一个合格程序猿应该知道的基础知识(二)—XXE注入攻击
消息来源:baojiabao.com 作者: 发布时间:2024-04-29
(图片源于网络,侵删)
ps:在提醒大家一下,明天就是七夕了,没买礼物的可要好好看看文末阿姨给你们的撩妹神器,你绝对值得拥有~
今天给大家介绍一下XML的xxe注入攻击,想知道XML注入的可以翻看上周介绍的基础知识篇。
1
xxe攻击概述
XML外部实体(XXE)攻击是许多基于注入的攻击方式之一,当攻击者将声明XML消息中的外部实体发送到应用程序并使用XML解析器解析时,就会发生这种攻击。
这个漏洞有许多不同的类型和行为,因为它可能会发生在不同类型的技术中,因为不同类型的XML解析器的原因。在这种情况下,令人高兴的是,每个解析器具有不同的功能和“特征”。
在我们开始之前,让我们先认识下可能面临的最常见的XXE漏洞类型—了解这些漏洞类型将有助于我们调试攻击并创建最终正确的POC:
基础的XXE注入— 外部实体注入本地DTD
基于盲注的XXE注入—XML解析器在响应中不显示任何错误
基于错误的XXE注入—成功解析之后,XML解析器始终显示SAME响应。(即“您的消息已被接收”),因此,我们可能希望解析器将文件的内容“打印”到错误响应中。
2
xxe攻击介绍
接下来我们将为大家按顺序介绍这三种类型:
基础的XXE注入
按照上一个概述,我们可以通过使用SYSTEM标识符来引用外部实体的数据。所以现在我们可以引入XXE注入的第一种技术,它将外部实体注入到包含引用本地文件路径(如/ etc / passwd)的SYSTEM标识符的XML文档中:
现在让我们做一个更复杂和更严重的攻击:
如果作为通用功能的一部分,应用程序服务器没有作出回应呢?(记得刚刚提到的基于错误的XXE吗?)如果我们想从其中具有XML特殊字元的外部源读取数据呢?如果在解析过程中解析失败呢?
这时我们可以载入引用我们的远程服务器并尝试从其URL获取内容的辅助外部DTD—这可以是一组字元,或下面的示例转储文件,最重要的是它甚至没有经过XML模式验证过程,因为它在解析器甚至获取远程内容之前发送!
例如,远程DTD文件—包含带有SYSTEM标识符和“file”处理程序的参数实体。请注意,参数实体“file”也连接到实体“send”内的URL:
解析DTD后,我们得到以下实体:
最终,服务器会尝试以文件内容发送参数“c”所指定的内容,到达我们定义的URL—我们记录该内容,并通过这样做来转储文件的内容:
第一步:如下图
第二步: 远程DTD正在解析。我们正在窃取文件的内容...
第三步:我们成功得到文件内容!
用这种技术记住的几件事情:文件内容中的字元“#”将导致URL截断。如果我们使用“or”定义参数实体,内容可能会中断。这取决于我们使用的是哪种(所以请确保在出现错误的情况下同时使用这两种测试场景)。
基于盲注的XXE注入
XML实体分为:参数实体和通用实体两种。参数实体用在DTD定义中。一般的xml文档中都使用通用实体。这里只介绍通用实体。
a、Blind XXE用途
对于传统的XXE来说,要求有一点,就是攻击者只有在服务器有回显或者报错的基础上才能使用XXE漏洞来读取服务器端文件。
例如:提交请求:
&file;
服务器在这个节点中返回etc/passwd的文件内容:
root:1:3.......
如果服务器没有回显,只能使用Blind XXE漏洞来构建一条带外信道提取数据。
b、参数实体和内部参数实体
Blink XXE主要使用了DTD约束中的参数实体和内部实体。参数实体是一种只能在DTD中定义和使用的实体,一般引用时使用%作为前缀。而内部实体是指在一个实体中定义的另一个实体,也就是嵌套定义。
如:
%param1;
[This is my site] &internal;
但是在我研究过程中,发现内部实体的这支持与否也是取决于解释器的。
IE/Firefox:
Chrome:
这也是比较蛋疼的特性,因为php,java,C#等语言的内置XML解析器都是有一定差别的,也就给漏洞利用带来不便。
c、bllind xxe
如果目标服务器没有回显,就只能用 Blind XXE 了。原理就是带着获取的文件源码以 get 参数或其他形式去访问我们的服务器,然后在日志里就可以找到我们要获取的内容了。
Blink XXE主要使用了DTD约束中的参数实体和内部实体。参数实体是一种只能在DTD中定义和使用的实体,一般引用时使用%作为前缀。而内部实体是指在一个实体中定义的另一个实体,也就是嵌套定义。
%remote;
%all;
&send;
xxx.xml
">
这里解释下,%remote; 会把外部文件引入到这个 XML 中,%all; 替换为后面的嵌套实体,这时再在 root 节点中引入 send 实体,便可实现数据转发。如果在 xxx.xml 中 send 实体是参数实体的话,也可以采用下面的形式。
%remote;
%all;
%send;
xxx.xml
">
d、测试
【1.php】
file_put_contents("1.txt", $_GET["file"]) ;
【test.php】
$xml=
%remote;
%all;
%send;
EOF;
$data = simplexml_load_string($xml) ;
echo "
" ;
print_r($data) ;
【evil.xml】
">
访问http://localhost/test.php, 这就是模拟攻击者构造XXE请求,然后存在漏洞的服务器会读出file的内容(c:/1.txt),通过带外通道发送给攻击者服务器上的1.php,1.php做的事情就是把读取的数据保存到本地的1.txt中,完成Blind XXE攻击。
攻击之后1.txt中的数据:
攻击者服务器日志:
e、总结
遇到XML相关的交互过程,以如下步骤判断是否存在漏洞:
(1)检测XML是否会被解析:
&shit;
如果$shit;变成了”this is shit”,那就继续第二步。
(2)检测服务器是否支持外部实体:
%shit;
通过查看自己服务器上的日志来判断,看目标服务器是否向你的服务器发了一条请求evil.xml的HTTP request。
(3)如果上面两步都支持,那么就看能否回显。如果能回显,就可以直接使用外部实体的方式进行攻击。当然有时候服务器会不支持一般实体的引用,也就是在DTD之外无法引用实体,如果这样的话,只能使用Blind XXE攻击。
(4)如果不能回显,毫无疑问,使用Blind XXE攻击方法。
基于错误的XXE注入
有时候,当解析过程成功时,当我们从服务器得到通用的响应时,我们可能希望服务器返回详细错误—因此,我们可以使用与远程DTD相同的技术,但会发生故意的错误如:
解析器将尝试解析DTD并访问发送实体中给出的路径,但是由于不能到达“my-evil-domain。$$$$ ”,我们将导致以下错误:
然后我们就可以根据信息调试我们自己的payload!# 安全脉搏 https://www.secpulse.com/archives/58915.html
请注意,由服务器响应的任何错误显示哪一行导致解析错误,同时出现语法错误,有时我们可能会使用此信息来调试我们自己的payload,使用“ n”。
例如:
]> n
包含payload的两个额外的“ n”会在第一行“ n”之后的第2行中出现错误,而其余的XML内容将会显示在第3行。
总之,XXE是一个非常强大的攻击,它允许我们操纵错误的XML解析器并利用它们。请注意,有更多的技术和攻击利用方式可以通过XXE注入完成。如前所述,每个解析器都有不同的能力,因此我们可以提出不同的漏洞。
3
xxe外部引入方式
当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网埠、攻击内网网站等危害。引入外部实体方式有多种,比如:
(1)恶意引入外部实体方式一
XML内容:
(2)恶意引入外部实体方式二
其中attack.dtd的内容为:
XML内容:
DTD文件(evil.dtd)内容:
(3)恶意引入外部实体方式三
XML内容:
DTD文件(evil.dtd)内容:
另外,不同程序支持的协议不一样,
上图是默认支持协议,还可以支持其他,如PHP支持的扩展协议有
相关文章
- 中兴受美国制裁事件 被罚了20亿美元过程事件始末 中兴被制裁后公司现状
2023-11-02 22:12:46
- B站怎么炸崩了哔哩哔哩服务器今日怎么又炸挂了?技术团队公开早先原因
2023-03-06 19:05:55
- 苹果iPhoneXS/XR手机电池容量续航最强?答案揭晓
2023-02-19 15:09:54
- 华为荣耀两款机型起内讧:荣耀Play官方价格同价同配该如何选?
2023-02-17 23:21:27
- google谷歌原生系统Pixel3 XL/4/5/6 pro手机价格:刘海屏设计顶配版曾卖6900元
2023-02-17 18:58:09
- 科大讯飞同传同声翻译软件造假 浮夸不能只罚酒三杯
2023-02-17 18:46:15
- 华为mate20pro系列手机首发上市日期价格,屏幕和电池参数配置对比
2023-02-17 18:42:49
- 小米MAX4手机上市日期首发价格 骁龙720打造大屏标准
2023-02-17 18:37:22
- 武汉弘芯遣散!结局是总投资1280亿项目烂尾 光刻机抵押换钱
2023-02-16 15:53:18
- 谷歌GoogleDrive网云盘下载改名“GoogleOne” 容量提升价格优惠
2023-02-16 13:34:45
- 巴斯夫将裁员6000人 众化工巨头裁员潮再度引发关注
2023-02-13 16:49:06
- 人手不足 韵达快递客服回应大量包裹派送异常没有收到
2023-02-07 15:25:20
- 资本微念与李子柒销声匿迹谁赢? 微念公司退出子柒文化股东
2023-02-02 09:24:38
- 三星GalaxyS8 S9 S10系统恢复出厂设置一直卡在正在检查更新怎么办
2023-01-24 10:10:02
- 华为Mate50 RS保时捷最新款顶级手机2022多少钱?1.2万元售价外观图片吊打iPhone14
2023-01-06 20:27:09
- 芯片常见的CPU芯片封装方式 QFP和QFN封装的区别?
2022-12-02 17:25:17
- 华为暂缓招聘停止社招了吗?官方回应来了
2022-11-19 11:53:50
- 热血江湖手游:长枪铁甲 刚猛热血 正派枪客全攻略技能介绍大全
2022-11-16 16:59:09
- 东京把玩了尼康微单相机Z7 尼康Z7现在卖多少钱?
2022-10-22 15:21:55
- 苹果iPhone手机灵动岛大热:安卓灵动岛App应用下载安装量超100万次
2022-10-03 22:13:45