Ricky Hao

记一次被队友坑的解题过程- - XXE

phithon大大某日出了一题,说能写出来的就请他吃饭!
这种好事,嘿嘿,怎么可能错过呢?

于是,我就拉着:“队友”@Ring来一起解题。

题目的源码是这样的:




    heiheihei
    










$(document).ready(function(){
    $("#getw").click(function(){
        var number = parseInt($("#num").val());
        $.ajax({
            "url": "number.php",
        "type": "post",
            "contentType": "application/xml",
            "data": ""+number+"",
            "dataType": "text",
            "success": function(data) {
                $("#result").text(data);
            }
        })
    });
});



大意就是让我们用XXE漏洞来读取number.php的内容。
至于啥是XXE漏洞呢?详见XML External Entity attack/XXE攻击

总之,这就是一个很牛掰的漏洞吧?大概?

一开始,我是不会做XXE的,连听都没听说过。当然,至于怎么执行XXE代码我也是不懂的- -。。
经过多次的尝试和查阅资料之后,构造了下面这样的语句:

《记一次被队友坑的解题过程- - XXE》

这里的test是我新建的一个实体,然后在下面的提交语句中提交,就可以回显出我们定义的值。

但是,这题只能回显数字,而不能回显字符。那么怎么能够得到number.php源码呢?

首先,我们可以知道,用以下的语句可以将本地文件读取:

file:///path/to/file.ext
http://url/file.ext
php://filter/read=convert.base64-encode/resource=conf.php

因为php文件包含

远程的1.dtd脚本如下:



%int;
%send;

至于其中的1.php,可有可无。如果要将其导出为文本,或者处理,就写个php文件接收吧。不然可以直接查询日志的。

参考资料:
XML External Entity attack/XXE攻击
XXE注入:攻击与防御 – XXE Injection: Attack and Prevent

点赞

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据