渗透测试基础 - XXE 外部实体注入

渗透测试基础-XXE 外部实体注入

只为对所学知识做一个简单的梳理,如果有表达存在问题的地方,麻烦帮忙指认出来。我们一起为了遇见更好的自己而努力💪!

XXE简介

XML External Entity injection)XML 外部实体注入漏洞,如果XML文件在引用外部实体时候,如果通过构造恶意内容,可以导致读取任意文件命令执行对内网的攻击,这就是XXE漏洞。这个漏洞是基于xml的,所以还得说一下xml是什么

XML简介

XML是可扩展的标记语言(Xtensible Markup Language),设计用来进行数据的传输和存储, 结构是树形结构,有标签构成,这点与HTML语言很像。但是XML和HTML也有明显区别。

如下:
XML被设计用来传输和存储数据

HTML被设计用来显示数据

xml预定义的语言,需要先去定义它,如1+1=2这里的加号和等号,是有人它们预定义了这样的能力,它们才能这样去执行

xml由三部分构成:XML声明DTDXML部分
在这里插入图片描述
既然是用来存储传输的,那又怎么会与渗透有关呢?这是因为xml虽然自己什么也做不了,但是在php中,有个函数就能将其作为对象来执行命令。simplexml_load_string()
在这里插入图片描述
我们来了解一下这个句子是怎么来读取文件信息的
在这里插入图片描述
如刚刚一样 xml分为以上三个部分,由DTD来做操作

<!ENTITY test SYSTEM “file:///C:/1.txt”>

system 通过file协议调取文件C盘下1.txt的内容,放到了test的实体里面
然后在<scan>&test</scan>,再次调用test
在这里插入图片描述
将得到值放入变量$test上,然后下面这个句子,放入了刚刚提到了函数中
在这里插入图片描述
这里的意思基本就是去执行这个xml文件,得到的结果给变量obj,然后在下面print输出1.txt内容。

可是要明白的是,正常情况下,别人的网站是不会写个print在这的,这个没必要拿出来让所有人看到,就像sql注入里的盲注人家没必要把报错信息公布出来,这样也一样。那这里它既然不能自己显示出来,我们得换其他方法,看能不能将数据外带出来。

这里就需要讲另外一个东西了,XXE”炮台”,这个”炮台”由三个文件组成,1.xml2.php3.txt,外加上我们burp拦截之后传进去的恶意代码,这样就能实现数据的外带。

XXE外部实体注入靶场演练

在这里插入图片描述
靶场在进去之前告诉了我们这里XXE炮台的地址,和flag是什么

先看一下靶场什么样的,在最下面显示这个网站是一个CMS
在这里插入图片描述
在这里插入图片描述

先信息收集一下 御剑扫描看看有什么目录在。

发现了这么两个地址:

一个为数据库连接
在这里插入图片描述
一个为网站后台
在这里插入图片描述
根据上面得到的网站信息为CMS的信息,将对应版本的网站源码下载下来看看
在这里插入图片描述
将源码文件放到了自己的phpstudy上运行起来,这里能看到挺多信息,既然要管理员的密码,那我们是不是得需要知道数据库的账号密码,如果拿下了数据库,不是什么信息都有了,所有先在源码上找找看数据库的配置文件在哪
在这里插入图片描述
在这个目录下找到了数据库连接的配置文件,既然这个CMS网站的密码文件在这,那靶场的配置文件会不会也在这呢,去尝试一下。
在这里插入图片描述
发现一片空白,可这里应该高兴,因为如果没有这个文件,那是会报错的,什么信息都没有显示出来,反倒这里应该是有文件存在的,瞎输点东西验证一下。
在这里插入图片描述

既然这里有东西,那就先看看这里是啥 看是不是我们需要的数据库连接的配置文件。

这就需要看一下前面提到的”炮台”了,1.xml;2.php;3.txt,和攻击代码,到底是什么个东西。
3.txt,这里没啥说的,因为它就是存放的地方,空的,等下用来放我们需要的数据的

先从攻击代码来看
在这里插入图片描述
上下两部分直接不看了 看中间最核心的
在这里插入图片描述

SYSTEM 获取conn.php里的内容,进行base64的编码之后放入实体file
在这里插入图片描述
然后带着数据 访问下面这个地址(炮台的第一个文件)
在这里插入图片描述
然后file里的数据,放到这里,然后带着这个数据去访问2.php
在这里插入图片描述
最前面那个函数在这里的意思是,如果没有3.txt,那就创建一个,如果有,就将第二个参数的值写入进去,第二个参数的值,就是刚刚一路传过来的conn.php里面的值。3.txt就没必要讲了,就是为了存放接收到的数据。

既然有了攻击手法,就差网站给我们这个机会了,机会就是simplexml_load_string这个函数

对源码文件进行审计,看有没有不合理的使用,比如有没有对传进来的xml做过滤,或者使用XXE的防御函数等这样的防御手段。

经过源码的查找发现,在目录weixin/index.php有出现
在这里插入图片描述
在这里插入图片描述
postarr是 在file_get_contents那传过来的,这里的意思是
在这里插入图片描述
读取文件内容,读取括号里php://input传过来的所有文件,这里的php://input 可以做到,什么都能收到,且不做任何处理,比如收到的数据里面有标调符号什么的,用其他方式就有可能出问题,用这个php://input就非常的好用。

在往上看,需要怎样才能这样使用
在这里插入图片描述
这里看到的是,if条件,当signature不为空,echostr为空时,这个if条件就满足了,能执行下面的句子,然后在看看这个signature是怎么进来的
在这里插入图片描述
在上面看到,是能用POST或者GET直接传进来的,也没有发现对传进来的数据做限制。

在这里插入图片描述
访问weixin目录,然后抓包将其改为POST数据包
在这里插入图片描述
signature在上面写入值,让其满足刚刚的if条件

然后在下面插入刚刚的攻击语句
在这里插入图片描述
在这里插入图片描述
数据包改完之后发过去

然后直奔3.txt的炮台
在这里插入图片描述
3.txt成功接收到了文件的值,这个值是经过base64编码过的,所以需要解码一下。
在这里插入图片描述
这里看到了数据库的连接账号密码,用开始御剑扫描的数据库网页地址去尝试连接一下。
在这里插入图片描述
在这里插入图片描述
进去之后就看到的admin的密码,虽然是md5的加密的样子,解密一下

在这里插入图片描述

漏洞总结

这里在说一下有关XXE漏洞的防护方法:

  1. 检查所使用的底层xml解析库,默认禁止外部实体的解析
  2. 使用第三方应用代码及时升级补丁
  3. 同时增强对系统的监控,防止此问题被人利用

还可以参考文档具体操作,具体使用方式,libxml_set_external_entity_loader
(点击进入)

《最好的防御,是明白其怎么实施的攻击》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jinxya

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

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

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

打赏作者

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

抵扣说明:

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

余额充值