upload是一个包含有各种上传漏洞的靶场,搭建十分简单,适合我们进行练习。
upload-labs上传漏洞
- pass-01
- pass-02:白名单验证
- pass-03:黑名单绕过
- pass-04:.htaccess解析
- pass-05:
- pass-06:大小写绕过
- pass-07: 收尾去空
- pass-08:点绕过
- pass-09:::$DATA绕过
- pass-10:点空格点绕过
- pass-11:双后缀名绕过
- pass-12:%00截断(get方式)
- pass-13:%00截断(post方式)
- pass-14:文件头检测,图片马利用文件包含漏洞.
- pass-15:突破getimagesize
- pass-16:exit_imagetype()
- pass-17:
- pass-18:代码审计
温馨提示:如果测试文件命名相同,请及时清理上传文件
目前更新到第13关,后续慢慢更新,欢迎关注~
下载地址:https://github.com/c0ny1/upload-labs

pass-01
这一关有三个思路
- 关闭js
查看源码,可以看到判断文件类型的函数写在了前端页面,可以直接选择浏览器直接禁用js,但是如果js里包含其他正常功能,效果适得其反,并且判断函数写在前端页面的情况很少

- burp抓包,修改文件类型
随意上传一张图片,抓到包后,修改文件类型为php,在数据部分写上<?php phpinfo();?>

上传成功
访问ip/upload-labs/upload/2.php,成功

- 修改源代码,进行本地访问
右键查看页面源代码并copy,删除判断文件类型的那段js代码
然后添加action=“http://xxx.xxx.xxx.xxx/upload-labs/Pass-01/index.php”,因为如果我们直接打开它,是运行在本地的,本地没有之前的访问地址,没法上传文件。可以正常上传一张图片,查看一下地址

双击打开,页面如下图所示
就可以直接上传php,显示成功上传,访问http://xxx.xxx.xxx.xxx/upload-labs/upload/test.php,同样得到
据说浏览器也可以直接修改前端页面,但我没有试过,大家可以尝试一下。
pass-02:白名单验证
首先看一下源码
$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处,只允许JPEG、PNG和GIF,这是一个很明显的白名单验证
先随意上传一个文件,抓包
可以看到,此时的Content-Type不是允许的类型,我们修改为image/jpeg(改成另外两个也可以),上传成功
访问http://xxx.xxx.xxx.xxx/upload-labs/upload/test.php,得到信息
Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。
Content-Type 标头告诉客户端实际返回的内容的内容类型。
菜鸟教程:content-type
pass-03:黑名单绕过
查看源码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array('.asp','.aspx','.php','.jsp');
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
本文记录了upload-labs靶场的多个关卡,涉及上传漏洞的多种绕过方法,如白名单验证、黑名单绕过、.htaccess解析、大小写绕过、%00截断等,通过代码审计和利用文件包含漏洞展示了攻击者可能的攻击路径,对于理解Web安全具有实践意义。
最低0.47元/天 解锁文章
457

被折叠的 条评论
为什么被折叠?



