XXE漏洞原理

XXE漏洞原理

XXE(外部实体注入)是XML外部实体注入。

当应用程序允许引用外部实体时,通过XXE,攻击者可以实现任意文件读取,DOS拒绝服务攻击以及代理扫描内网等。

常规的POST的content-type为application/x-www-form-urlencoded,但只要将其修改为application/json,就可以传入json格式的POST数据,修改为application/xml,就可以传入XML格式的数据。常规的WAF一般只检测application/x-www-form-urlencoded的数据。

防御方法:

1.禁用外部实体(PHP:可以将libxml_disable_entity_loader设置为TRUE来禁用外部实体)

2.过滤用户提交的XML数据

DTD

DTD(文档类型定义)用来是定义 XML 文档的合法构建模块。

DTD 可以在 XML 文档内声明,也可以外部引用。

内部:<!DOCTYPE 根元素 [元素声明]> ex: <!DOCTYOE test [any]>

外部:<!DOCTYPE 根元素 SYSTEM "文件名"> ex:<!DOCTYPE test SYSTEM 'http://www.test.com/evil.dtd'>

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

DTD实体

1.内部实体声明

<!ENTITY 实体名称 "实体的值">

<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
]>
 
<test>&writer;&copyright;</test>

2.外部实体声明

<?xml version="1.0"?>
<!DOCTYPE a [
<!ENTITY b SYSTEM "file:///home/ctf/flag.txt">
]
>
<c>&b;</c>

读取flag.txt输出到页面

XXE漏洞学习

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值