Pass-01 前端绕过
关卡分析
尝试直接上传.php文件时会发现网页提示智能上传规定内的文件类型,且上传时尝试使用burp suite进行抓包会发现没有抓到数据包
即在上传时,数据包还没有经过客户端发给后端就被拦截掉了,说明上传验证是在前端进行的,且查看页面源代码也可以看到:
绕过:Burpsuite抓包修改或页面禁用js
Burpsuite抓包修改
将准备的.php文件后缀改成不会被拦截的.jpg形式,通过Burpsuite进行抓包
在这里将文件后缀的.jpg改成.php然后进行发送
关闭抓包后回到网页可以发现上传成功:
选择在另外新页面打开图片可以发现php文件已经成功上传:
页面禁用js
在设置里面选择禁用js然后直接上传php文件
php文件能够直接上传并打开
Pass-02 服务器端检测–IMME类型
关卡分析
和第一关一样,首先打开抓包直接上传php文件,这时会发现能够抓到数据包,说明不再是前端验证
这里尝试上传一张图片,能够正常上传:
查看抓取的数据包:
两个包中的content-type有区别:
文件源码:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name']
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '文件类型不正确,请重新上传!';
}
} else {
$msg = UPLOAD_PATH.'文件夹不存在,请手工创建!';
}
}
可知,这一关 主要是通过content-type的值进行过滤,当值为:image/jpeg、image/png、image/gif 这种时能够上传成功
Content-type
Content-Type在HTTP协议消息头中,使用Content-Type来表示请求和响应中的媒体类型信息
绕过:抓包修改文件的content-type
上传php文件抓包将content-type改为图片的类型然后发送
这里可以看到文件已经上传成功