XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。
XXE漏洞全称XMLExternal Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害
XXE是XML的一个漏洞
XXE产生根本原因:网站接受XML数据,没有对xml进行过滤
XML被设计为传输和存储数据,其焦点是数据的内容。
HTML被设计用来显示数据,其焦点是数据的外观。
HTML旨在**显示信息,而XML旨在传输信息**。
<!DOCTYPE note [
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT head (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]]]>
<note>
<to>Daveto>
<from>Tomfrom>
<head>Reminderhead>
<body>You are a good manbody>
note>
-回显,玩法,协议,引入
前提:读取的文件必须存在
DOCTYPE ANY [
]>
<x>&xxe;x>
DOCTYPE foo [
<!ELEMENT foo ANY >
]>
<x>&rabbit;x>
上面的ip地址假设就是内网的一台服务器的ip地址。还可以进行一个端口扫描,看一下端口是否开放
如果访问的文件不存在,会显示如下图的信息
该CASE是在安装expect扩展
的PHP环境里执行系统命令
DOCTYPE ANY [
]>
<x>&xxe;x>
id是对于的执行的命令。实战情况比较难碰到
DOCTYPE test [
%file;
]>
<x>&send;x>
把核心 代码写入evil2.dtd
内容如下:
条件:看对方的应用有没有禁用外部实体引用,这也是防御XXE的一种措施
先把靶场的回显代码注释掉
DOCTYPE test [
%dtd;
%send;
]>
#读取C:/tmp/1.txt里的内容复制给 file
#然后去请求test.dtd
"
>
%payload;
#去访问?data=上面读到的数据
重启phpstudy,就有了一个access.log
然后攻击,无回显,查看日志
解码网站:https://www.bejson.com/enc/base64/
CTF XXE
xxe-lab靶场登录框xml数据传输测试–检查发现
靶场地址:https://github.com/c0ny1/xxe-lab
请求头中如下:
Content-Type: application/xml;
或者
Content-Type: text/xml;
Payload:
DOCTYPE Mikasa [
]>
<user><username>&test;username><password>Mikasapassword>user>
XXE安全真题复现–修改数据请求格式
地址:http://web.jarvisoj.com:9882/
点击Go!
,BurpSuite
拦截
数据包为json
格式
修改Content-Type
提交Payload
DOCTYPE ANY [
]>
<x>&ss;x>
靶场地址:XXE Lab: 1
下载地址:Download (Mirror)
XXE安全漏洞自动化注射脚本 工具
XXEinjector本身提供了非常非常丰富的操作选项,所以大家在利用XXEinjector进行渗透测试之前,请自习了解这些配置选项,以最大限度地发挥XXEinjector的功能。当然了,由于XXEinjector是基于Ruby开发的,所以Ruby运行环境就是必须的了。这里建议在kali环境下运行
工具地址:
工具使用:
git clone https://github.com/enjoiz/XXEinjector.git
php java python 过滤及禁用