• Pikachu靶场——XXE 漏洞


    1. XXE

    可参考我写另一篇文章: XXE 漏洞及案例实战

    漏洞描述

    XXE(XML External Entity)攻击是一种利用XML解析器漏洞的攻击。在这种攻击中,攻击者通过在XML文件中插入恶意实体来触发解析器加载恶意代码或文件,从而执行任意代码、读取本地文件等操作。

    在XXE攻击中,攻击者通常会构造一个包含恶意实体的XML文件,并将其提交到目标服务器上进行解析。当服务器使用XML解析器解析文件时,会读取实体并展开其定义,从而导致恶意代码被执行或文件被泄露。

    例如,在以下XML代码中:

    
    DOCTYPE foo [
      <!ELEMENT foo ANY >
      ]>
    <foo>&xxe;foo>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    所包含的ENTITY xxe就是一个XXE实体,它指定了一个名为“xxe”的实体,其内容来自于file:///etc/passwd路径下的文件。当XML解析器解析该文件时,它会尝试读取并展开xxe实体,从而将/etc/passwd文件内容返回给攻击者。

    防范XXE攻击,可以采取以下措施:

    1. 对用户提交的XML文件进行严格校验,禁止包含未知实体、注释等内容。
    2. 禁用或限制XML解析器的外部实体加载功能,例如禁止加载网络上的实体、限制文件读取范围等。
    3. 使用安全的XML解析库,如使用DOM解析器时要确保开启Entity Expansion Limit选项等。

    参考文章:XXE漏洞利用技巧:从XML到远程代码执行

    先输入一个非xml的内容,查看页面响应。

    在这里插入图片描述

    输入一个包含命名实体(内部实体)的xml数据(以下代码中xxe是命名实体的实体名称):

     
    DOCTYPE foo [    
    <!ENTITY xxe "芜湖" > ]> 
    <foo>&xxe;foo>
    
    • 1
    • 2
    • 3
    • 4

    网页上回显“芜湖”,说明网页对输入的xml数据是有结果回显的。

    在这里插入图片描述

    但是这里只能判断是否有回显,不能判断是否支持外部实体。

    1.1 查看系统文件内容

    查看hosts文件

    输入payload,代码中xxe是外部实体的实体名称:

     
    DOCTYPE foo [    
     ]> 
    <foo>&xxe;foo>
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    注意:file://协议只能用绝对路径,无法使用相对路径。

    1.2 查看PHP源代码

    查看php源代码一般用php伪协议php://filter

    构造payload:

     
    DOCTYPE foo [    
     ]> 
    <foo>&xxe;foo>
    
    • 1
    • 2
    • 3
    • 4

    获得了base64编码的xxe.php文件源代码

    在这里插入图片描述

    通过utools中的插件进行解码即可。
    在这里插入图片描述

    1.3 查看开放端口

    在输入框中输入下面的xml代码。

     
    DOCTYPE foo [    
     ]> 
    <foo>&xxe;foo>
    
    • 1
    • 2
    • 3
    • 4
     
    DOCTYPE foo [    
     ]> 
    <foo>&xxe;foo>
    
    • 1
    • 2
    • 3
    • 4

    页面显示如下图,但是81端口的处理速度较慢。因为服务器80端口是开放的而81端口是关闭的。

    image-20230909193720542

    使用bp抓包后进行爆破,爆破1~100这100个端口。

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

    点击Columns,勾选Response received,然后就增加了发送请求和回答复之间的时间的显示。

    在这里插入图片描述

    通过观察时间的长短,判断出了有哪些端口开放,这里只有80端口是开放的。

    1.4 探测内网主机

    同端口探测一样,可根据返回信息内容的接收响应时间来判断ip是否存在。

    构造payload

     
    DOCTYPE foo [    
     ]> 
    <foo>&xxe;foo>
    
    • 1
    • 2
    • 3
    • 4

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

    点击Columns,勾选Response received,然后就增加了发送请求和回答复之间的时间的显示。
    在这里插入图片描述

    使用nmap扫描来成功内网主机

    在这里插入图片描述

    对比两次的结果,信息一致。

  • 相关阅读:
    都知道0.1+0.2 = 0.30000000000000004,那要怎么让它等于0.3
    【图像去噪】基于隐马尔可夫模型实现图像去噪处理附matlab代码
    hadoop入门(六):集群测试
    C语言函数章--第二弹(让冤种室友用你的函数,但不给他看函数源码)
    测试总结的重要性
    golang查看CPU使用率与内存及源码中的//go:指令
    程序员必备的IP查询工具
    C#,寻找图强连通分量(SCC,Strongly Connected Components)的Kosaraju算法与源代码
    GCC and MinGW-w64 for Windows
    学习多线程,创建多线程的三种方式
  • 原文地址:https://blog.csdn.net/weixin_58783105/article/details/133418932