XXE漏洞

随笔3周前发布 一滴水
3 0 0

来自:

[NCTF2019]Fake XML cookbook

在moectf2023中也有一道题知识点是XXE漏洞,只不过那道更明显一点。

XXE漏洞全称XML External Entity Injection 即XML外部实体注入。

XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。

XXE漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。

XXE常见利用方式

与SQL相似,XXE漏洞也分为有回显和无回显

有回显,可以直接在页面中看到payload的执行结果或现象。

无回显,又称为blind xxe,可以使用外带数据(OOB)通道提取数据。即可以引用远程服务器上的XML文件读取文件。

解析xml在php库libxml,libxml>=2.9.0的版本中没有XXE漏洞。

(来自:https://blog.csdn.net/qq_52907838/article/details/118030007)

 

打开就是一个登录页面,一般正常人想到的都是SQL注入,但是这里没用。也没有什么注册按钮,那常规外网渗透也渗不了。

XXE漏洞

打开源码,看到最后有个地方:

XXE漏洞

最后有个error: function(XMLHttpRequest, textStatus, errorThrown),这里就可以初见端倪,应该就是相关XML的一个XXE漏洞。

我们随便输一个账号密码,然后bp抓包:

XXE漏洞

发现最后这个位置是XML/HTML格式,这里就可以XXE外部实体注入了。

里面存在一个XML实体,我们可以构造恶意实体,尝试读取文件:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
  <!ENTITY admin SYSTEM "file:///etc/passwd">
  ]>
<user><username>&admin;</username><password>111</password></user>

XXE漏洞

成功获取。

(一般我们都会用file:///etc/passwd来测试是否可以文件包含、路径穿越这些)

接着尝试读取flag,一般在根目录:

XXE漏洞

 

payload解释:

<?xml version=”1.0″ alt=”XXE漏洞”>

standalone值是yes的时候表示DTD仅用于验证文档结构,从而外部实体将被禁用,但它的默认值是no,而且有些parser会直接忽略这一项。

按实体有无参分类,实体分为一般实体和参数实体,

一般实体的声明:<!ENTITY 实体名称 “实体内容”>,引用一般实体的方法:&实体名称;

外部实体,用来引入外部资源。有SYSTEM和PUBLIC两个关键字,表示实体来自本地计算机还是公共计算机。

因为将file:///flag命名为admin,所以下面用&admin。

PHP引用外部实体,常见的利用协议:

file://文件绝对路径 如:file:///etc/passwd

http://url/file.txt

php://filter/read=convert.base64-encode/resource=xxx.php

__EOF__

XXE漏洞
本文作者: Eddie Murphy 本文链接: https://www.cnblogs.com/EddieMurphy-blogs/p/17707198.html 关于博主: 评论和私信会在第一时间回复。或者直接私信我。 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处! 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...