目录
upload-labs靶场的安装搭建(windows)
(1)首先当然是需要phpstudy的环境,所以要先下载安装phpstudy。
(2)然后到github的网址中下载源码的压缩包。
github网址:https://github.com/Tj1ngwe1/upload-labs
(3)下载后解压缩到phpstudy目录下的WWW子文件夹中,这里要注意把压缩包的名字改成upload-labs,不然靶场的页面会显示得不对。
(4)然后在输入url HTTPS://127.0.0.1/upload-labs/就可以访问靶场。
upload-labs靶场攻略
通关时对后缀名单操作可通过burp抓包实现。
Pass-01
首先观察页面,需要上传一个文件。我们先尝试进行上传。
发现页面进行了提示,根据提示信息我们知道上传的途中对文件的后缀名进行了验证。 用弹窗进行错误提示的话证明是运用了前端验证。
这时我们有几种不同的解决办法。
(1)首先第一种,F12找到验证部分的代码,然后删除,就可以上传。
(2)第二种方法是增加要上传的文件类型,跟第一种方法一样,也是找到代码所在位置进行修改即可。
(3)第三种方法是我们先将要上传的文件后缀名修改成页面允许上传的类型,这样在点击上传后就可以通过前端的验证,用burp工具进行抓包,在burp中将文件后缀名改回原本想要上传的格式,再进行上传,这样就可以上传我们想要的类型文件而不会被前端的验证拦截。
这里代表上传文件成功。
上传的文件在upload目录下。(如果没有的话在WWW中的upload-labs里自己手动建一个,不然会报错),最终上传的文件为html类型的文件。
Pass-02
进入页面发现还是需要上传一个文件,我们先上传看看回显情况。
上传了一个文件名后缀为.php的文件后提示类型错误,错误回显的方式不是弹窗,是页面直接提示,所以不是前端验证。查看一下源码。
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists($UPLOAD_ADDR)) {
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR . '/' . $_FILES['upload_file']['name'])) {
$img_path = $UPLOAD_ADDR . $_FILES['upload_file']['name'];
$is_upload = true;
}
} else {
$msg = '文件类型不正确,请重新上传!';
}
} else {
$msg = $UPLOAD_ADDR.'文件夹不存在,请手工创建!';
}
}
其中如图中框住的代码部分可以看出,上传文件的途中是验证了content-type,并且固定了可以上传的文件类型。关于content-type的相关信息可以参考这篇博客。
(1条消息) Http中Content-Type的详解_阿祥小王子的博客-CSDN博客_content-type
接下来要绕过就很简单了,我们只需要用burp工具抓包,抓到之后修改content-type的类型为允许上传的类型即可,也就是判断语句中写到的类型。注意有两个content-type,不要改错。
上传文件成功。