πŸ”XML external entity (XXE) injection

KhΓ‘i niệm, cΓ‘c lα»— hα»•ng vΓ  bαΊ£o vệ

ChΓΊng ta sαΊ½ xem doc trΖ°α»›c khi bΖ°α»›c vΓ o thα»±c hΓ nh lab.

  • XML lΓ  ngΓ΄n ngα»― Δ‘Γ‘nh dαΊ₯u mở rα»™ng, nΓ³ được sα»­ dα»₯ng rα»™ng rΓ£i, được phΓ‘t triển để lΖ°u truwxx vΓ  truyền dα»― liệu. Hiện nay cΓ³ rαΊ₯t nhiều loαΊ‘i tΓ i liệu sα»­ dα»₯ng Δ‘α»‹nh dαΊ‘ng XML nhΖ° rtf, pdf, tệp hΓ¬nh αΊ£nh (svg) hay cΓ‘c file cαΊ₯u hΓ¬nh.

  • CαΊ₯u trΓΊc XML lΓ  cΓ‘c thΓ nh phαΊ§n cΖ‘ bαΊ£n cα»§a ngΓ΄n ngα»― Δ‘Γ‘nh dαΊ₯u tΓ i liệu XML (Extensible Markup Language). XML được sα»­ dα»₯ng để mΓ΄ tαΊ£ vΓ  trao Δ‘α»•i dα»― liệu giα»―a cΓ‘c α»©ng dα»₯ng khΓ‘c nhau. XML sα»­ dα»₯ng cΓ‘c thαΊ» để xΓ‘c Δ‘α»‹nh cαΊ₯u trΓΊc cα»§a tΓ i liệu vΓ  nα»™i dung cα»§a nΓ³.

CΓ‘c thΓ nh phαΊ§n cΖ‘ bαΊ£n cα»§a cαΊ₯u trΓΊc XML bao gα»“m:

  1. Khai bΓ‘o XML: Khai bΓ‘o XML lΓ  mα»™t chuα»—i Δ‘α»‹nh dαΊ‘ng để chỉ ra rαΊ±ng tΓ i liệu lΓ  mα»™t tΓ i liệu XML. Khai bΓ‘o XML phαΊ£i được Δ‘αΊ·t ở Δ‘αΊ§u cα»§a tΓ i liệu vΓ  cΓ³ Δ‘α»‹nh dαΊ‘ng nhΖ° sau:

  1. ThαΊ»: ThαΊ» lΓ  cΓ‘c khα»‘i xΓ’y dα»±ng chΓ­nh cα»§a tΓ i liệu XML. ChΓΊng được sα»­ dα»₯ng để xΓ‘c Δ‘α»‹nh nα»™i dung cα»§a tΓ i liệu. Mα»™t thαΊ» bao gα»“m thαΊ» mở, thαΊ» Δ‘Γ³ng vΓ  nα»™i dung nαΊ±m giα»―a chΓΊng. VΓ­ dα»₯:

  1. Thuα»™c tΓ­nh: Thuα»™c tΓ­nh được sα»­ dα»₯ng để cung cαΊ₯p thΓ΄ng tin bα»• sung về mα»™t phαΊ§n tα»­. ChΓΊng cΓ³ thể được sα»­ dα»₯ng để xΓ‘c Δ‘α»‹nh cΓ‘c thuα»™c tΓ­nh cα»§a phαΊ§n tα»­ hoαΊ·c để truyền tαΊ£i thΓ΄ng tin bα»• sung. Thuα»™c tΓ­nh cΓ³ thể được xΓ‘c Δ‘α»‹nh trong thαΊ» mở cα»§a phαΊ§n tα»­. VΓ­ dα»₯:

  1. ChΓΊ thΓ­ch: ChΓΊ thΓ­ch được sα»­ dα»₯ng để thΓͺm thΓ΄ng tin giαΊ£i thΓ­ch cho tΓ i liệu XML. ChΓΊ thΓ­ch bαΊ―t Δ‘αΊ§u bαΊ±ng cαΊ·p kΓ½ tα»± "<!--". ChΓΊ thΓ­ch khΓ΄ng αΊ£nh hưởng Δ‘αΊΏn nα»™i dung cα»§a tΓ i liệu. VΓ­ dα»₯:

  1. KhΓ΄ng gian tΓͺn: KhΓ΄ng gian tΓͺn được sα»­ dα»₯ng để phΓ’n biệt cΓ‘c phαΊ§n tα»­ cΓ³ cΓΉng tΓͺn nhΖ°ng thuα»™c cΓ‘c khΓ΄ng gian tΓͺn khΓ‘c nhau. KhΓ΄ng gian tΓͺn cΓ³ thể được xΓ‘c Δ‘α»‹nh trong khai bΓ‘o XML hoαΊ·c trong thαΊ» mở cα»§a phαΊ§n tα»­. VΓ­ dα»₯:

ĐÒy lΓ  cαΊ₯u trΓΊc cΖ‘ bαΊ£n cα»§a tΓ i liệu XML, cho phΓ©p xΓ‘c Δ‘α»‹nh nα»™i dung vΓ  cαΊ₯u trΓΊc cα»§a tΓ i liệu, cΕ©ng nhΖ° thΓͺm thΓ΄ng tin bα»• sung về dα»― liệu mΓ  nΓ³ chα»©a.

Tham chiαΊΏu (References) thường cho phΓ©p bαΊ‘n thΓͺm hoαΊ·c bao phαΊ§n text hoαΊ·c phαΊ§n Δ‘Γ‘nh dαΊ₯u bα»• sung trong mα»™t tΓ i liệu XML. CΓ‘c tham chiαΊΏu luΓ΄n luΓ΄n bαΊ―t Δ‘αΊ§u vα»›i biểu tượng β€œ&” , Δ‘Γ’y lΓ  kΓ½ tα»± dΓ nh riΓͺng vΓ  kαΊΏt thΓΊc vα»›i kΓ½ tα»± β€œ;”. XML cΓ³ hai kiểu tham chiαΊΏu:

Tham chiαΊΏu thα»±c thể (Entity Reference): Mα»™t tham chiαΊΏu thα»±c thể chα»©a mα»™t tΓͺn giα»―a dαΊ₯u tΓ‘ch mở vΓ  dαΊ₯u tΓ‘ch Δ‘Γ³ng. VΓ­ dα»₯: &amp; cΓ³ amp lΓ  tΓͺn. TΓͺn tham chiαΊΏu tα»›i mα»™t chuα»—i vΔƒn bαΊ£n hoαΊ·c Δ‘Γ‘nh dαΊ₯u Δ‘Γ£ được Δ‘α»‹nh nghΔ©a trΖ°α»›c.

Tham chiαΊΏu kΓ½ tα»± (Character Reference): Chα»©a cΓ‘c tham chiαΊΏu, vΓ­ dα»₯ &#65;, chα»©a mα»™t dαΊ₯u bΔƒm (#) được theo sau bởi mα»™t sα»‘. Sα»‘ nΓ y luΓ΄n luΓ΄n tham chiαΊΏu tα»›i mΓ£ hΓ³a Unicode cα»§a kΓ½ tα»±. Trong vΓ­ dα»₯ nΓ y, 65 tham chiαΊΏu tα»›i chα»― cΓ‘i β€œA”.

  • XML Document Type Definition (DTD) lΓ  mα»™t tαΊ­p tin vΔƒn bαΊ£n Δ‘α»‹nh nghΔ©a cαΊ₯u trΓΊc, cΓ‘c phαΊ§n tα»­ vΓ  thuα»™c tΓ­nh cα»§a mα»™t tΓ i liệu XML. DTD được sα»­ dα»₯ng để xΓ‘c Δ‘α»‹nh cΓ‘ch mΓ  cΓ‘c phαΊ§n tα»­ vΓ  thuα»™c tΓ­nh phαΊ£i được sα»­ dα»₯ng trong tΓ i liệu XML, cΕ©ng nhΖ° cΓ‘c quy tαΊ―c mΓ  phαΊ£i tuΓ’n thα»§ khi tαΊ‘o tΓ i liệu XML.

  • VΓ­ dα»₯, Δ‘oαΊ‘n mΓ£ XML sau Δ‘Γ’y sα»­ dα»₯ng mα»™t DTD để Δ‘α»‹nh nghΔ©a cαΊ₯u trΓΊc cα»§a mα»™t tΓ i liệu XML Δ‘Ζ‘n giαΊ£n:

  • Trong vΓ­ dα»₯ nΓ y, DTD được Δ‘α»‹nh nghΔ©a bΓͺn trong khai bΓ‘o DOCTYPE. NΓ³ Δ‘α»‹nh nghΔ©a rαΊ±ng tΓ i liệu XML phαΊ£i chα»©a ba phαΊ§n tα»­: "title", "author" vΓ  "content", theo thα»© tα»± nhΖ° vαΊ­y. Mα»—i phαΊ§n tα»­ nΓ y chỉ cΓ³ thể chα»©a dα»― liệu vΔƒn bαΊ£n, được Δ‘α»‹nh nghΔ©a bαΊ±ng cΓ‘ch sα»­ dα»₯ng kΓ½ tα»± Δ‘αΊ‘i diện #PCDATA.

Để xα»­ lΓ½ được file xml, mọi α»©ng dα»₯ng đều cαΊ§n phαΊ£i cΓ³ mα»™t XML parser (cΓ²n được gọi lΓ  XML processor) để xα»­ lΓ½ file xml vΓ  Δ‘Ζ°a ra output. Khi chΓΊng ta khai bΓ‘o mα»™t entity, parser sαΊ½ tα»± Δ‘α»™ng thay thαΊΏ giΓ‘ trα»‹ cα»§a entity vΓ o nΖ‘i entity được khi bΓ‘o.

Request:

Response:

ChΓΊng ta cΓ³ thể thαΊ₯y trong phαΊ§n DOCTYPE declaration, ngoΓ i khai bΓ‘o nhα»―ng elements , nΓ³ khai bΓ‘o thΓͺm mα»™t URI (trong XML thΓ¬ URI được hiểu lΓ  mα»™t system identifier) trỏ Δ‘αΊΏn file c:/boot.ini. External entity được Δ‘αΊ·t tΓͺn bar vΓ  được chỉ Δ‘α»‹nh trαΊ£ về thΓ΄ng qua <foo>&bar;</foo>

Vα»›i XXE attack, tΓ΄i sαΊ½ cΓ³ thể gαΊ·p cΓ‘c dαΊ‘ng phα»• biαΊΏn sau:

  • Khai thΓ‘c XXE để trΓ­ch xuαΊ₯t file: Định nghΔ©a external entity chα»©a nα»™i dung cα»§a 1 file vΓ  trαΊ£ về trong response;

  • Khai thΓ‘c XXE để thα»±c thi SSRF attacks: Định nghΔ©a external entity dα»±a vΓ o URL Δ‘αΊΏn back-end system;

  • Khai thΓ‘c blind XXE để hα»‘t dα»― liệu theo kiểu out-of-band: Truyền tαΊ£i dα»― liệu nhαΊ‘y cαΊ£m tα»« server Δ‘αΊΏn hệ thα»‘ng mΓ  attacker cΓ³ thể kiểm soΓ‘t;

  • Khai thΓ‘c blind XXE để trΓ­ch xuαΊ₯t dα»― liệu thΓ΄ng qua thΓ΄ng bΓ‘o lα»—i: LΓ m phΓ‘t sinh parsing error message chα»©a thΓ΄ng tin nhαΊ‘y cαΊ£m.

HαΊ§u nhΖ° tαΊ₯t cαΊ£ cΓ‘c lα»— hα»•ng XXE phΓ‘t sinh do thΖ° viện phΓ’n tΓ­ch cΓΊ phΓ‘p XML cα»§a α»©ng dα»₯ng hα»— trợ cΓ‘c tΓ­nh nΔƒng XML nguy hiểm tiềm αΊ©n mΓ  α»©ng dα»₯ng khΓ΄ng cαΊ§n hoαΊ·c khΓ΄ng cΓ³ Γ½ Δ‘α»‹nh sα»­ dα»₯ng. CΓ‘ch dα»… nhαΊ₯t vΓ  hiệu quαΊ£ nhαΊ₯t để ngΔƒn chαΊ·n cΓ‘c cuα»™c tαΊ₯n cΓ΄ng cα»§a XXE lΓ  tαΊ―t cΓ‘c tΓ­nh nΔƒng Δ‘Γ³. NΓ³i chung, chỉ cαΊ§n vΓ΄ hiệu hΓ³a Δ‘α»™ phΓ’n giαΊ£i cα»§a cΓ‘c thα»±c thể bΓͺn ngoΓ i vΓ  vΓ΄ hiệu hΓ³a hα»— trợ cho XInclude lΓ  Δ‘α»§. Điều nΓ y thường cΓ³ thể được thα»±c hiện thΓ΄ng qua cΓ‘c tΓΉy chọn cαΊ₯u hΓ¬nh hoαΊ·c bαΊ±ng cΓ‘ch ghi Δ‘Γ¨ hΓ nh vi mαΊ·c Δ‘α»‹nh theo chΖ°Ζ‘ng trΓ¬nh. Tham khαΊ£o tΓ i liệu về thΖ° viện phΓ’n tΓ­ch cΓΊ phΓ‘p XML hoαΊ·c API cα»§a bαΊ‘n để biαΊΏt chi tiαΊΏt về cΓ‘ch tαΊ―t cΓ‘c chα»©c nΔƒng khΓ΄ng cαΊ§n thiαΊΏt.

Lab

ChΓΊng ta để khi Γ½ khi truy cαΊ­p trang web cΓ³ mα»™t nΓΊt check xem sα»‘ lượng sαΊ£n phαΊ©m cΓ²n lαΊ‘i lΓ  bao nhiΓͺu.

DΓΉng burp suite để check thΓ¬ chΓΊng ta sαΊ½ cΓ³ req vΓ  res nhΖ° trΓͺn. VΓ  chΓΊng ta tα»± Δ‘αΊ·t ra giαΊ£i thuyαΊΏt rαΊ±ng nαΊΏu thΓͺm mα»™t external entity vΓ o giα»―a XML declaration vΓ  stock element.

<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>

Sau Δ‘Γ³ thay 1 thΓ nh &xxe, kiểu nhΖ° nΓ y:

Solve:

NhΖ° tiΓͺu đề ở Δ‘Γ’y chΓΊng ta cαΊ§n phαΊ£i khai thΓ‘c lα»— hα»•ng XXE thΓ΄ng qua SSRF, nαΊΏu chΖ°a biαΊΏt tα»›i ssrf thΓ¬ cΓ³ thể xem ở bΓ i gαΊ§n nhαΊ₯t trong mα»₯c server-side.

ChΓΊng ta sαΊ½ vαΊ«n dΓΉng burp suite để bαΊ―t cΓ‘c request:

Mα»—i lαΊ§n req thΓ¬ mα»—i nΓ³ sαΊ½ bΓ‘o lα»—i kΓ¨m theo endpoint mΓ  chΓΊng ta cαΊ§n. Cho tα»›i khi lαΊ₯y được full dα»― liệu tαΊ‘i endpoint cuα»‘i.

XInclude lΓ  mα»™t tiΓͺu chuαΊ©n cα»§a W3C được sα»­ dα»₯ng trong tΓ i liệu XML để tham chiαΊΏu Δ‘αΊΏn cΓ‘c phαΊ§n khΓ‘c cα»§a tΓ i liệu hoαΊ·c cΓ‘c tΓ i liệu khΓ‘c vΓ  chΓ¨n chΓΊng vΓ o tΓ i liệu hiện tαΊ‘i. XInclude cho phΓ©p tΓ‘ch tΓ i liệu thΓ nh cΓ‘c phαΊ§n nhỏ hΖ‘n để quαΊ£n lΓ½ vΓ  tΓ‘i sα»­ dα»₯ng nΓ³ trong cΓ‘c tΓ i liệu khΓ‘c.

XInclude được Δ‘α»‹nh nghΔ©a bαΊ±ng cΓ‘c phαΊ§n tα»­ vΓ  thuα»™c tΓ­nh mα»›i, bao gα»“m:

  • <xi:include> phαΊ§n tα»­: được sα»­ dα»₯ng để tham chiαΊΏu Δ‘αΊΏn tΓ i liệu hoαΊ·c phαΊ§n cα»§a tΓ i liệu khΓ‘c vΓ  chΓ¨n chΓΊng vΓ o tΓ i liệu hiện tαΊ‘i. NΓ³ cΓ³ thể cΓ³ mα»™t sα»‘ thuα»™c tΓ­nh, bao gα»“m "href" để chỉ Δ‘α»‹nh đường dαΊ«n Δ‘αΊΏn tΓ i liệu được chΓ¨n, "parse" để chỉ Δ‘α»‹nh cΓ‘ch tΓ i liệu được phΓ’n tΓ­ch, vΓ  "xpointer" để chỉ Δ‘α»‹nh phαΊ§n cα»§a tΓ i liệu được chΓ¨n.

  • <xi:fallback> phαΊ§n tα»­: được sα»­ dα»₯ng để Δ‘α»‹nh nghΔ©a mα»™t phαΊ§n tα»­ dα»± phΓ²ng nαΊΏu tΓ i liệu khΓ΄ng hα»— trợ XInclude.

VΓ­ dα»₯, Δ‘oαΊ‘n mΓ£ sau Δ‘Γ’y minh họa cΓ‘ch sα»­ dα»₯ng XInclude để chΓ¨n mα»™t tΓ i liệu XML vΓ o tΓ i liệu hiện tαΊ‘i:

Trong Δ‘Γ³, phαΊ§n tα»­ <xi:include> được sα»­ dα»₯ng để chΓ¨n tΓ i liệu XML được chỉ Δ‘α»‹nh trong thuα»™c tΓ­nh "href" vΓ o tΓ i liệu hiện tαΊ‘i. Thuα»™c tΓ­nh "parse" được sα»­ dα»₯ng để chỉ Δ‘α»‹nh rαΊ±ng tΓ i liệu được chΓ¨n cΕ©ng lΓ  mα»™t tΓ i liệu XML.

Vα»›i lab tiαΊΏp theo chΓΊng ta thαΊ₯y được lΓΊc nΓ y ở req truyền Δ‘i dα»― liệu vα»›i tham sα»‘ chα»© khΓ΄ng phαΊ£i xml. Tα»± hỏi rαΊ±ng cΓ³ thể chΓ¨n được Δ‘oαΊ‘n nΓ y vΓ o productId khΓ΄ng?

ĐoαΊ‘n mΓ£ XML trΓͺn chα»©a mα»™t phαΊ§n tα»­ XInclude tham chiαΊΏu Δ‘αΊΏn mα»™t tΓ i nguyΓͺn bΓͺn ngoΓ i bαΊ±ng cΓ‘ch sα»­ dα»₯ng mα»™t Δ‘α»‹a chỉ file URI. Cα»₯ thể, phαΊ§n tα»­ "xi:include" xΓ‘c Δ‘α»‹nh rαΊ±ng nΓ³ muα»‘n bao gα»“m nα»™i dung cα»§a mα»™t tệp tin nαΊ±m tαΊ‘i "/etc/passwd" trΓͺn hệ thα»‘ng tệp tin cα»₯c bα»™. Thuα»™c tΓ­nh "parse" được Δ‘αΊ·t thΓ nh "text", cho biαΊΏt rαΊ±ng tệp được bao gα»“m sαΊ½ được xα»­ lΓ½ nhΖ° vΔƒn bαΊ£n thuαΊ§n tΓΊy chα»© khΓ΄ng phαΊ£i lΓ  mα»™t tΓ i liệu XML.

Mα»—i mα»₯c cα»§a bΓ i nΓ y đều cΓ³ để lαΊ‘i cmt kΓ¨m theo tαΊ£i mα»™t file avatar, chΓΊng ta sαΊ½ khai thΓ‘c lα»— hα»•ng XXE qua upload

TrΖ°α»›c hαΊΏt chΓΊng ta cαΊ§n tαΊ£i mα»™t file αΊ£nh Δ‘α»‹nh dαΊ‘ng svg về để up lΓͺn.

Sau khi upload sαΊ½ nhΖ° nΓ y, sau Δ‘Γ³ vΓ o burp suite vΓ  chuyển sang chαΊΏ Δ‘α»™ repeater vΓ  chỉ sα»­a Δ‘oαΊ‘n svg thΓ nh nhΖ° nΓ y:

BΓ i nΓ y cΕ©ng giα»‘ng cΓ‘c bΓ i khΓ‘c nhΖ°ng nhΖ° tiΓͺu đề thΓ¬ chΓΊng ta khΓ΄ng nhαΊ­n được kαΊΏt quαΊ£. VΓ  vαΊ₯n đề ở Δ‘Γ’y thα»­ xem nΓ³ cΓ³ tΖ°Ζ‘ng tΓ‘c vα»›i mα»™t domain bΓͺn ngoΓ i khΓ΄ng?

TiαΊΏp theo chΓΊng ta sαΊ½ khai thΓ‘c XXE thΓ΄ng qua XML parameter entities. NαΊΏu chΖ°a hiểu nΓ³ lΓ  gΓ¬ thΓ¬ Δ‘αΊ‘i khΓ‘i:

XML parameter entities lΓ  mα»™t loαΊ‘i thα»±c thể trong XML được sα»­ dα»₯ng để Δ‘α»‹nh nghΔ©a cΓ‘c tham sα»‘ cΓ³ thể được sα»­ dα»₯ng trong nα»™i dung cα»§a tΓ i liệu XML.

Mα»™t parameter entity được khai bΓ‘o bαΊ±ng cΓ‘ch sα»­ dα»₯ng cαΊ·p kΓ½ tα»± % vΓ  ;. Để sα»­ dα»₯ng mα»™t parameter entity, bαΊ‘n cαΊ§n Δ‘αΊ·t tΓͺn cα»§a nΓ³ giα»―a cαΊ·p dαΊ₯u & vΓ  ;.

VΓ­ dα»₯, ta cΓ³ thể Δ‘α»‹nh nghΔ©a mα»™t parameter entity companyname nhΖ° sau:

Sau Δ‘Γ³, ta cΓ³ thể sα»­ dα»₯ng parameter entity nΓ y trong nα»™i dung cα»§a tΓ i liệu XML nhΖ° sau:

Vα»›i lab nΓ y thΓ¬ cΓ‘ch khai thΓ‘c XXE vα»›i entity thΓ΄ng thường thΓ¬ khΓ΄ng thể vαΊ­y sα»­ dα»₯ng parameter entity.

Ở hai lab trΓͺn Blind XXE thΓ¬ nΓ³ hΖ‘i nα»­a nαΊ‘c nα»­a mα»‘ chΖ°a khai thΓ‘c lαΊ₯y dα»― liệu được gΓ¬, thΓ¬ trong lab nΓ y chΓΊng ta sαΊ½ leak data mΓ‘y chα»§ ra vΓ  gα»­i về server cα»§a chΓΊng ta bαΊ±ng cΓ‘ch tαΊ‘o mα»™t file DTD.

TαΊ­n dα»₯ng lα»— hα»•ng XXE mΓΉ để lαΊ₯y dα»― liệu ra khỏi hệ thα»‘ng thΓ΄ng qua kα»Ή thuαΊ­t out-of-band PhΓ‘t hiện mα»™t lα»— hα»•ng XXE mΓΉ thΓ΄ng qua kα»Ή thuαΊ­t out-of-band lΓ  Δ‘iều quan trọng, nhΖ°ng nΓ³ chΖ°a thα»±c sα»± cho thαΊ₯y cΓ‘ch lα»— hα»•ng cΓ³ thể bα»‹ khai thΓ‘c. Điều mΓ  kαΊ» tαΊ₯n cΓ΄ng thα»±c sα»± muα»‘n Δ‘αΊ‘t được lΓ  lαΊ₯y ra dα»― liệu nhαΊ‘y cαΊ£m. Điều nΓ y cΓ³ thể được thα»±c hiện thΓ΄ng qua mα»™t lα»— hα»•ng XXE mΓΉ, nhΖ°ng nΓ³ Δ‘Γ²i hỏi kαΊ» tαΊ₯n cΓ΄ng phαΊ£i lΖ°u trα»― DTD Δ‘α»™c hαΊ‘i trΓͺn mα»™t hệ thα»‘ng mΓ  họ kiểm soΓ‘t, sau Δ‘Γ³ triệu gọi DTD ngoαΊ‘i vi tα»« XXE payload in-band.

Mα»™t vΓ­ dα»₯ về DTD Δ‘α»™c hαΊ‘i để lαΊ₯y nα»™i dung cα»§a file /etc/passwd nhΖ° sau:

DTD nΓ y thα»±c hiện cΓ‘c bΖ°α»›c sau:

  1. Định nghΔ©a mα»™t thα»±c thể tham sα»‘ XML cΓ³ tΓͺn lΓ  file, chα»©a nα»™i dung cα»§a file /etc/passwd.

  2. Định nghΔ©a mα»™t thα»±c thể tham sα»‘ XML cΓ³ tΓͺn lΓ  eval, chα»©a mα»™t khai bΓ‘o Δ‘α»™ng cα»§a thα»±c thể tham sα»‘ XML khΓ‘c cΓ³ tΓͺn exfiltrate. Thα»±c thể exfiltrate sαΊ½ được Δ‘Γ‘nh giΓ‘ bαΊ±ng cΓ‘ch thα»±c hiện mα»™t yΓͺu cαΊ§u HTTP Δ‘αΊΏn mΓ‘y chα»§ web cα»§a kαΊ» tαΊ₯n cΓ΄ng chα»©a giΓ‘ trα»‹ cα»§a thα»±c thể file trong chuα»—i truy vαΊ₯n URL.

  3. Sα»­ dα»₯ng thα»±c thể eval, Δ‘iều nΓ y khiαΊΏn cho khai bΓ‘o Δ‘α»™ng cα»§a thα»±c thể exfiltrate được thα»±c hiện.

  4. Sα»­ dα»₯ng thα»±c thể exfiltrate, để giΓ‘ trα»‹ cα»§a nΓ³ được Δ‘Γ‘nh giΓ‘ bαΊ±ng cΓ‘ch yΓͺu cαΊ§u URL được chỉ Δ‘α»‹nh.

KαΊ» tαΊ₯n cΓ΄ng phαΊ£i lΖ°u trα»― DTD Δ‘α»™c hαΊ‘i trΓͺn mα»™t hệ thα»‘ng mΓ  họ kiểm soΓ‘t, thường lΓ  tαΊ£i nΓ³ lΓͺn mΓ‘y chα»§ web cα»§a mΓ¬nh. VΓ­ dα»₯, kαΊ» tαΊ₯n cΓ΄ng cΓ³ thể phα»₯c vα»₯ DTD Δ‘α»™c hαΊ‘i tαΊ‘i URL sau:

http://web-attacker.com/malicious.dtd

Cuα»‘i cΓΉng, kαΊ» tαΊ₯n cΓ΄ng phαΊ£i gα»­i XXE payload sau Δ‘αΊΏn α»©ng dα»₯ng dα»… bα»‹ tαΊ₯n cΓ΄ng:

Payload XXE nΓ y khai bΓ‘o mα»™t thα»±c thể tham sα»‘ XML cΓ³ tΓͺn xxe vΓ  sau Δ‘Γ³ sα»­ dα»₯ng thα»±c thể trong DTD. Điều nΓ y sαΊ½ khiαΊΏn trΓ¬nh phΓ’n tΓ­ch XML tΓ¬m nαΊ‘p DTD ngoαΊ‘i vi tα»« mΓ‘y chα»§ cα»§a kαΊ» tαΊ₯n cΓ΄ng vΓ  diα»…n giαΊ£i nΓ³ ngay lαΊ­p tα»©c. CΓ‘c bΖ°α»›c được Δ‘α»‹nh nghΔ©a trong DTD Δ‘α»™c hαΊ‘i sau Δ‘Γ³ được thα»±c hiện, vΓ  file /etc/passwd được truyền Δ‘αΊΏn mΓ‘y chα»§ cα»§a kαΊ» tαΊ₯n cΓ΄ng.

LΖ°u Γ½ Kα»Ή thuαΊ­t nΓ y cΓ³ thể khΓ΄ng hoαΊ‘t Δ‘α»™ng vα»›i mα»™t sα»‘ nα»™i dung file, bao gα»“m cΓ‘c kΓ½ tα»± xuα»‘ng dΓ²ng trong file /etc/passwd. Điều nΓ y lΓ  do mα»™t sα»‘ trΓ¬nh phΓ’n tΓ­ch XML tΓ¬m nαΊ‘p URL trong Δ‘α»‹nh nghΔ©a thα»±c thể ngoαΊ‘i vi bαΊ±ng API kiểm tra cΓ‘c kΓ½tα»± được phΓ©p xuαΊ₯t hiện trong URL. Trong tΓ¬nh huα»‘ng nΓ y, cΓ³ thể sα»­ dα»₯ng giao thα»©c FTP thay vΓ¬ HTTP. Đôi khi, sαΊ½ khΓ΄ng thể lαΊ₯y dα»― liệu chα»©a cΓ‘c kΓ½ tα»± xuα»‘ng dΓ²ng, vΓ  do Δ‘Γ³ mα»™t file nhΖ° /etc/hostname cΓ³ thể được mα»₯c tiΓͺu hΖ°α»›ng tα»›i thay thαΊΏ.

BΓ’y giờ nhΖ° mΓ¬nh giαΊ£i thΓ­ch ở trΓͺn sαΊ½ tαΊ‘o mα»™t DTD vα»›i nα»™i dung file nhΖ° trΓͺn.

Sau Δ‘Γ³ gα»­i lαΊ‘i payload nhΖ° cΕ© kΓ¨m endpoint exploit.dtd để exploit server.

Mα»™t cΓ‘ch tiαΊΏp cαΊ­n khΓ‘c để khai thΓ‘c XXE mΓΉ lΓ  kΓ­ch hoαΊ‘t mα»™t lα»—i phΓ’n tΓ­ch XML trong Δ‘Γ³ thΓ΄ng bΓ‘o lα»—i chα»©a dα»― liệu nhαΊ‘y cαΊ£m mΓ  bαΊ‘n muα»‘n lαΊ₯y. Điều nΓ y sαΊ½ hiệu quαΊ£ nαΊΏu α»©ng dα»₯ng trαΊ£ về thΓ΄ng bΓ‘o lα»—i kαΊΏt quαΊ£ trong phαΊ£n hα»“i cα»§a nΓ³.

BαΊ‘n cΓ³ thể kΓ­ch hoαΊ‘t thΓ΄ng bΓ‘o lα»—i phΓ’n tΓ­ch XML chα»©a nα»™i dung cα»§a tệp /etc/passwd bαΊ±ng cΓ‘ch sα»­ dα»₯ng mα»™t DTD bΓͺn ngoΓ i Δ‘α»™c hαΊ‘i nhΖ° sau:

DTD nΓ y thα»±c hiện cΓ‘c bΖ°α»›c sau:

  • XΓ‘c Δ‘α»‹nh XML parameter entity được gọi lΓ  file, chα»©a nα»™i dung cα»§a tệp /etc/passwd.

  • XΓ‘c Δ‘α»‹nh XML parameter entity được gọi lΓ  eval, chα»©a mα»™t khai bΓ‘o Δ‘α»™ng cα»§a mα»™t XML parameter entity khΓ‘c được gọi lΓ  error. Entity lα»—i sαΊ½ được xem xΓ©t bαΊ±ng cΓ‘ch tαΊ£i mα»™t tệp khΓ΄ng tα»“n tαΊ‘i cΓ³ tΓͺn chα»©a giΓ‘ trα»‹ cα»§a file entity.

  • Sα»­ dα»₯ngeval entity, Δ‘iều nΓ y lΓ m cho khai bΓ‘o Δ‘α»™ng cα»§a entity lα»—i được thα»±c hiện.

  • Sα»­ dα»₯ng entity lα»—i, để giΓ‘ trα»‹ cα»§a nΓ³ được Δ‘Γ‘nh giΓ‘ bαΊ±ng cΓ‘ch cα»‘ gαΊ―ng tαΊ£i tệp khΓ΄ng tα»“n tαΊ‘i, dαΊ«n Δ‘αΊΏn thΓ΄ng bΓ‘o lα»—i chα»©a tΓͺn cα»§a tệp khΓ΄ng tα»“n tαΊ‘i, Δ‘Γ³ lΓ  nα»™i dung cα»§a tệp /etc/passwd.

Gọi DTD bΓͺn ngoΓ i Δ‘α»™c hαΊ‘i sαΊ½ dαΊ«n Δ‘αΊΏn thΓ΄ng bΓ‘o lα»—i nhΖ° sau:

java.io.FileNotFoundException: /nonexistent/root❌0:0:root:/root:/bin/bash daemon❌1:1:daemon:/usr/sbin:/usr/sbin/nologin bin❌2:2:bin:/bin:/usr/sbin/nologin

Khi server cα»§a nαΊ‘n nhΓ’n khΓ³a chαΊ·t out-of-band interaction nhαΊ±m chα»‘ng lαΊ‘i phΖ°Ζ‘ng Γ‘n trΓ­ch xuαΊ₯t dα»― liệu thΓ¬ chΓΊng ta cΓ³ thể sα»­ dα»₯ng external DTD ở local.

ChΓΊng ta sαΊ½ Δ‘i vΓ o lab để hiểu rΓ΅ hΖ‘n. VαΊ«n nhΖ° cΕ© lab vαΊ«n cho chΓΊng ta check sα»‘ liệu.

Đúng ta sαΊ½ cΓ³ Δ‘oαΊ‘n paylaod sau:

  • Entity %local_dtd được Δ‘α»‹nh nghΔ©a để tham chiαΊΏu Δ‘αΊΏn DTD mαΊ·c Δ‘α»‹nh cα»§a DocBook XML, được lΖ°u trα»― tαΊ‘i đường dαΊ«n file:///usr/share/yelp/dtd/docbookx.dtd.

  • Entity %ISOamso chα»©a mΓ£ HTML ISOamso, được sα»­ dα»₯ng để Δ‘α»‹nh nghΔ©a cΓ‘c kΓ½ tα»± toΓ‘n học. Tuy nhiΓͺn, nΓ³ cΕ©ng chα»©a hai entity khΓ‘c, % file vΓ  % eval, được sα»­ dα»₯ng để thα»±c hiện mα»™t cuα»™c tαΊ₯n cΓ΄ng XML External Entity (XXE).

  • Entity % file được Δ‘α»‹nh nghΔ©a để tham chiαΊΏu Δ‘αΊΏn tαΊ­p tin /etc/passwd trΓͺn mΓ‘y chα»§.

  • Entity % eval được Δ‘α»‹nh nghΔ©a để Δ‘α»‹nh nghΔ©a mα»™t entity mα»›i cΓ³ tΓͺn lΓ  % error, được sα»­ dα»₯ng để thα»±c hiện cuα»™c tαΊ₯n cΓ΄ng XXE. Thα»±c thể nΓ y sαΊ½ Δ‘α»‹nh nghΔ©a mα»™t hΓ m lα»—i mα»›i vΓ  thα»±c hiện nΓ³.

Ở Δ‘Γ’y đường dαΊ«n lΓ m sao biαΊΏt được thΓ¬ vΓ­ dα»₯ Yelp Help Browser cho GNOME trΓͺn Linux thΓ¬ Δ‘Ζ°Γ²ng dαΊ«n sαΊ½ β€œusr/share/yelp/dtd/docbookx.dtd

CΓ³ thể check bαΊ±ng payload nΓ y: [NαΊΏu sinh lα»—i thΓ¬ đường dαΊ«n sai]

End

CαΊ£m Ζ‘n mn Δ‘Γ£ đọc bΓ i!! HαΊΉn mn cΓ‘c bΓ i research khΓ‘c....

Last updated