# 首先是一个简单的外部实体引入的例子
其中test.txt和XXE_Test.php 处于同级目录下
结果:
所以,本地直接是可行的,那么我们再进一步:
能不能通过传入一个xml来模拟真实的情景呢?
真棒,遇见各种bug在这里记录一下吧(悄悄水一天):
第一,先是phpstorm,安装phpstorm后:
1. 最省事的是将工程直接放在WWW目录下,这样就不会出现502错误了(如果代码没啥问题的话。。)
2. 配置php解释器:
如图,就在这个位置在CLI interpreter中定位自己的php.exe然后就可以用了
3. 可以配合Xdebug完成PHP的调试,具体可自行百度~
第二,关于xml的处理函数
这里介绍最简单的simplexml函数
分别是simplexml_load_file(),simplexml_load_string()故名思意,一个是用来打开文件的,一个是用来打开字符形式的。
第三,怎么接收前端的xml
1. 网上比较多的方法是写一个php自己发送数据,格式大致如下:
$ch
= curl_init();
$data
=
'<?xml version="1.0" encoding="utf-8"?><root><aa>123</aa><bb>456</bb></root>'
;
curl_setopt(
$ch
, CURLOPT_URL,
'http://127.0.0.1/test/test.php'
);
curl_setopt(
$ch
, CURLOPT_HTTPHEADER,
array
(
"Content-type: text/xml;charset=\"utf-8\""
));
curl_setopt(
$ch
, CURLOPT_POST, 1);
curl_setopt(
$ch
, CURLOPT_POSTFIELDS,
$data
);
curl_setopt(
$ch
, CURLOPT_HEADER,0);
curl_exec(
$ch
);
curl_close(
$ch
);
此时,接受端一般有两种写法:
首先,不能用$_POST原因呢是因为$_POST默认不接受text/xml类型的数据,
”$_POST 只能取得 Content-type 為 application/x-www-form-urlencoded 或 multipart/form-data 的資料“
而接受的方法1. 一般是使用file_get_contents('php://input')来接收原始post数据,写法为:

2. 或者使用$GLOBALS['HTTP_RAW_POST_DATA'];来接收,写法为:
我是通过第一种方法完成了数据的传输,然而却存在数据传不完的bug。。明天找师傅问一哈吧。。实在解决不了了。。。。其实来说,只要解决了数据传输不全的问题,也就完全证明了xxe注入漏洞的危害性,明天解决这个问题后可以去找个wp分析一下实际的利用过程
2. 内网探测 http://192.168.0.100:80
等等,其实已经危害很大了,相当于一个肉鸡了,欧克,搞定收工~
首先,不能用$_POST原因呢是因为$_POST默认不接受text/xml类型的数据,
”$_POST 只能取得 Content-type 為 application/x-www-form-urlencoded 或 multipart/form-data 的資料“
而接受的方法1. 一般是使用file_get_contents('php://input')来接收原始post数据,写法为:

2. 或者使用$GLOBALS['HTTP_RAW_POST_DATA'];来接收,写法为:
$xml =$GLOBALS['HTTP_RAW_POST_DATA'];
//将xml数据写入文本文件"a.txt"中
$handle =fopen('a.txt','a+');
fwrite($handle,$xml);
所以,是怎么做到的呢,似乎是因为<>的原因导致的,构造payload:
通过添加\ 然后str_replace 就完成了写入到执行的操作,所以不用拖明天了
其他利用方式:
1. 命令执行 expect://ifconfig2. 内网探测 http://192.168.0.100:80
等等,其实已经危害很大了,相当于一个肉鸡了,欧克,搞定收工~
今日分享:
哎,今日又有朋友脱单了~既然如此,就分享一个
我爱你,没有什么目的。只是爱你。张爱玲的一句话,祝福长久吧~
没有评论:
发表评论