【web-ctf】ctf-pikachu-xxe

XXE(xml external entity -injection,xml外部实体注入)

XML文档结构
在这里插入图片描述

DTD(Document Type Definition,文档类型定义,用来为XML文档定义语义约束)

  1. DTD内部声明

     <!DOCTYPE 根元素 [元素声明]>
    
  2. DTD外部引用

     <!DOCTYPE 根元素名称 SYSTEM "外部DTD的URI">
    
  3. 引用公共DTD

     <!DOCTYPE 根元素名称 PUBLIC "DTD标识名" "公用DTD的URI">
    

漏洞产生原因
漏洞产生原因
在这里插入图片描述
代码意义:导入外部实体,用file协议读取etc/passwd文档并赋值给f,打印f

外部引用可以支持http,file,ftp等协议

如果一个接口支持接收xml数据,且没有对xml数据做任何安全上的措施,就可能导致XXE漏洞

simplexml_load_string()函数:将xml文档转换为SimpleXMLElement对象

注:php里面解析xml用的是libxml,其在>=2.9.0的版本中,默认禁止解析xml外部实体内容

漏洞举例

  1. 构造一个恶意xml文档
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM "file:///c:/windows/win.ini">
]>
<x>&f;</x>
  1. 将恶意xml内容填入框中,发现返回了c:/windows/win.ini的内容
    在这里插入图片描述
    攻击成功。

总结

现在很多语言里面对应的解析xml的函数默认是禁止解析外部实体内容的,从而也就直接避免了这个漏洞。

防范措施:

  1. 禁止解析外部实体内容
  2. 过滤敏感文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值