XML的XXE漏洞详解(小白刚入门的第二天,大佬们轻点喷)

XXE产生的原因

XXE是XML外部实体注入漏洞,发生在应用程序解析XML输入时,没有禁止外部实体加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、DDOS攻击等危害,简单地说就是用户传入的XML被当成实体执行了。

检测

在HTTP的Request的报文出现以下请求报文表明是用XML传输的

Content-type:text/xml application/xml

DTD

DTD(文档类型定义)存在XXE的地方, 可以被声明在XML的文档中,也可以作为一个外部的引用。

<!DOCTYPE 根元素 [定义内容]> 内部DTD文档
<!DOCTYPE 根元素 [SYSTEM] "DTD文件路径">外部DTD文档
<!DOCTYPE 根元素 [SYSTEM] "DTD文件路径"[定义内容]内外结合DTD文档

内部实体几乎不会用到,这里就不做演示了

外部实体

<!ENTITY 实体 SYSTEM "URL">
 <?XML version="1.0"?>
<!DOCTYPE din [
    <!ENTITY root SYSTEM "edn.xml">
]>
<din>&root;</bin>

实战

靶场:pikachu

有回显

先测试一下是否有xxe漏洞

bp抓包

 可以看到传输方式为xml存在xxe漏洞 

构造payload语句

<?xml version = "1.0"?>
<!DOCTYPE note [
    <!ENTITY hacker "ESHLkangi">
]>
<name>&hacker;</name>

   

有回显

修改xml语句

<?xml version = "1.0"?>
<!DOCTYPE ANY [
    <!ENTITY f SYSTEM "file:///c:/windows/win.ini">
]>
<x>&f;</x>

无回显

无回显又称为blind xxe,可以使用带外数据通道提取数据,先使用php://filter获取目标文件的内容,然后将内容以http请求的方式发送到接受数据的服务器(因为这一块比较难,对于我来说,看了几篇文章还是没能理解,抱歉了师傅们,无回显这一块暂时先不更新了,精进了在补一篇,哪位佬也可以分享下,不胜感激)

导致xxe漏洞的关键函数

simplexml_import_dom

该函数可以把DOM节点转化为simplexmlelement对象

libxml_disable_entity_loader(false)

这个函数的意思是允许php加载外部实体,这也是xxe漏洞产生的原因,在现实的生产环境中把false改为true

loadxml

该函数可以把输入的字符串转化为DOMDocument对象

XXE漏洞的修复与防御

配置xml处理器使用静态DTD,不允许XML中含有任何自己声明的DTD,设置相应的属性值为false

1.使用开发语言禁用外部实体

2.过滤用户提交的敏感数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值