马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本期内容涉及到很多前面的内容,因此复习后可以更好的了解本期内容
介绍
XXE -"xml external entity injection"即"xml外部实体注入漏洞"。
概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的设置进行执行,导致问题"
也就是说服务端吸取和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。
具体的关于xml实体的介绍,网络上有很多,自己动手先查一下。
如今很多语言里面对应的解析xml的函数默认是禁止解析外部实体内容的,从而也就直接避免了这个漏洞。
以PHP为例,在PHP里面解析xml用的是libxml,其在≥2.9.0的版本中,默认是禁止解析xml外部实体内容的。
本章提供的案例中,为了模拟漏洞,通过手动指定LIBXML_NOENT选项开启了xml外部实体解析。
个人评价:需要有一定的网站开发的知识储备
适用场景:适用于任何涉及XML数据解析的应用步伐或服务
实际反馈:可以用来攻击内网和读取服务器文件
原理
XXE漏洞(XML外部实体注入)是一种常见的安全漏洞,它允许攻击者利用XML解析器处理惩罚外部实体时的安全缺陷,通过注入恶不测部实体,实现敏感数据读取、服务器端请求伪造(也就是SSRF后面会学到)或远程代码执行(RCE)
也就是XML外部实体(XXE)漏洞是指在处理惩罚XML输入时,没有正确禁用外部实体引用而导致的安全漏洞。
XXE漏洞就像是一个不设防的快递收发站。
假设你是一个快递收发站的管理员(相称于服务器),正常情况下,你会按照寄件人(外部用户)的要求,吸取并转发包裹(数据请求)。但是,这个 XXE 漏洞就好比这个收发站没有对快递包裹进行严格的安检(没有正确设置 XML 解析器)。
攻击者就好比是心怀恶意的寄件人,他们寄来的包裹里面会附带一个特别的纸条(恶意构造的外部实体引用),比如要求你去隔壁公司的保险柜(系统中的敏感文件,像设置文件、密码文件等)取一份机密文件,然后再把这份文件看成普通包裹寄回给他(把敏感信息泄漏出去)。
由于收发站没有安检(服务器存在 XXE 漏洞),它就会按照包裹里的纸条要求去做,导致本该保密的信息被泄漏,这就如同服务器执行了攻击者构造的恶意 XML 请求,读取了本地文件等敏感信息并反馈给了攻击者。
很像之前学过的SQL注入,但是是完全差异的,大家一定要仔细理解
因此,我们起首要了解一些新知识
XML声明
假设你正在写一封信,信的开头会写上收信人的地址和邮编等根本信息。XML声明就像是这封信的开头部分,它告诉阅读者(比如欣赏器或其他步伐)这封信(XML文档)的根本信息。
DTD文档类型定义(Document Type Definition)
假设你写信时,有一套固定的格式要求,比如信必须有开头、正文和结尾,而且开头必须写日期,结尾必须写祝福语。这套格式要求就像是DTD文档类型定义。
文档元素
你写信时,信的内容被分成了几个部分,比如开头是问候语,中央是正文,结尾是祝福语。这些部分就像是文档元素。
实践
起首,什么是api
API(应用步伐编程接口)可以比喻为一家饭店的菜单,你想吃什么需要通过菜单来和厨师(应用步伐)联系
而本期内容没有标准答案,有很多方法,在此列举一些,和之前讲过的目次遍历方式一样,指定你本地电脑的文件即可
1,
- <?xml version="1.0"?>
- <!DOCTYPE ANY [
- <!ENTITY xxe SYSTEM "file:///c:/windows/win.ini"> ]>
- <a>&xxe;</a>
复制代码
- <?xml version="1.0"?> :声明了 XML 文档的版本,这里是 1.0 版本,这是标准的 XML 开头声明,用于定义文档的 XML 版本。
- <!DOCTYPE ANY [ :这是文档类型定义(DTD)的开始标记。ANY 表现文档的根元素可以是任意名称,在这里是为后续定义外部实体做预备。
- <!ENTITY xxe SYSTEM "file:///c:/windows/win.ini"> ]> :这一行定义了一个名为 xxe 的外部实体,SYSTEM 关键字指定了实体的类型为系统外部实体,其值 file:///c:/windows/win.ini 表现从本地文件系统中读取 C 盘 windows 目次下的 win.ini 文件作为该实体的值。通过这种方式,攻击者可以将本地文件的内容包含到 XML 文档中,如果服务器端在解析 XML 时没有正确处理惩罚外部实体引用,就会导致 XXE 漏洞被利用。
- <a>&xxe;</a> :在 XML 元素 <a> 中引用了之前定义的 xxe 外部实体,当服务器端解析这个 XML 时,会将 &xxe; 替换为从 file:///c:/windows/win.ini 文件中读取的内容,从而实现了读取本地文件的目的,这是 XXE 漏洞的一种典型利用方式。
2,
- <?xml version="1.0"?>
- <!DOCTYPE test [
- <!ENTITY xxe SYSTEM "http://example.com/test.txt">]>
- <content>&xxe;</content>
复制代码 介绍:通过将外部实体指向一个远程 HTTP URL,从远程服务器上读取文件内容。如果服务器端在解析 XML 时允许外部实体引用,并且网络设置允许访问外部网络,攻击者可以通过这种方式获取远程服务器上的敏感信息,或者进行其他恶意操作,如访问内部网络资源等。
3,
- <?xml version="1.0"?>
- <!DOCTYPE cmd [
- <!ENTITY xxe SYSTEM "expect://id">]>
- <data>&xxe;</data>
复制代码 介绍:有些 XML 解析器会将外部实体的值作为系统命令来执行,在这个例子中,expect://id 会尝试在服务器上执行 id 命令,从而获取服务器受骗前用户的权限信息等。不外,这种方式对解析器的要求较高,并非全部解析器都会支持。
至此,xxe模块完成
本期内容同样需要一定的网站开发基础,但是通过详细的解释,希望大家可以更好了解
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|