github编辑

[SUCTF 2018]GetShell

[SUCTF 2018]GetShell

考点

  • 中文取反代码执行

wp

有个文件上传页面index.php?act=upload,给了一个检查语句

if($contents=file_get_contents($_FILES["file"]["tmp_name"])){
    $data=substr($contents,5);
    foreach ($black_char as $b) {
        if (stripos($data, $b) !== false){
            die("illegal char");
        }
    }     
} 

读取上传文件开头第五个字符后的内容,然后进行黑名单判断。但是不知道黑名单是什么,需要试一下,测试的字符放后面了,放burpsuite里面爆破一下,记得在设置payload时把payload encoding取消打钩

可以看到,上传的文件直接保存成php,所有的数字字母都被过滤。但是PHP中笔记关键的[]()$~;都没被过滤,这就回到了无字符RCE。

无字符RCE主要有如下几种方案

  1. 自增获取每个字符

  2. 特殊字符取反

  3. 异或

本题除了取反符号~其他运算全ban了,所以需要找特殊字符,比如汉字。

用脚本fuzz一下

得到结果

payload

再执行env命令就可以看到flag

黑名单如下

小结

最后更新于