一、前言
之前没好好总结,打算复习下并总结下
环境: upload-labs
upload-labs是一个使用php语言编写的,
专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。
旨在帮助大家对上传漏洞有一个全面的了解。
目前一共21关,每一关都包含着不同上传方式。
二、测试
2.1 Pass-01
重点:前端JS方法绕过
2.2 Pass-02
重点:数据包文件类型检测绕过
php ——> application/octet-stream
jpg ——> image/jpeg
2.3 Pass-03
重点:php文件名格式
php3 phtml等
2.4 Pass-04
过滤了大部分可用后缀名
重点:.htaccess文件应用
将php改后缀为jpg,通过上传.htaccess文件,使目标服务器将jpg文件当作php文件解析
.htaccess文件内容:
<FilesMatch "1.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
2.5 Pass-05
1、检测代码先 删除末尾的 .
2、转换为小写
3、去除字符串::$DATA
4、首尾去空
但最后又以 file_name 命名文件
所以我们需要构造个文件名 可用pass前面的检测
并且,在最后去除的情况下,还能不被 $deny_ext 识别
例如构造 test.php. .
删除末尾的 . ——> test.php.空格
首位去空 ——> test.php./
$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_name = deldot($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'];
//问题 最后又以 file_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 . '文件夹不存在,请手工创建!';
}
}
2.6 Pass-06
未进行大小写转换,可造成绕过
如:上传 test.phP
2.7 Pass-07
未进行末尾去空
上传 test.php+空格
2.8 Pass-08
未删除末尾的 .
命名以 file_name 命名
上传 test.php.
2.9 Pass-09
没有对后缀名进行去”::$DATA”处理,利用windows特性,可在后缀名中加” ::$DATA”绕过
解释:在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,
不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名
访问的时候不用加上 ::$DATA
2.10 Pass-10
这里和第五关一样欸 难到是upload-labs下错了?
2.11 Pass-11
双写绕过
2.12 Pass-12
可设置save_path参数值
%00截断
截断条件:php版本小于5.3.4,php的magic_quotes_gpc为OFF状态
2.13 Pass-13
与12关类似,%00截断
但是 这里是 POST 传参,不会自动编解码,需要在hex进制里修改为 00
2.14 Pass-14
制作图片马绕过
结合 文件包含漏洞 利用
2.15 Pass-15
图片马绕过
2.16 Pass-16
用到php_exif模块来判断文件类型,用图片马绕过
2.17 Pass-17
综合判断了后缀名、content-type,
以及利用imagecreatefromgif判断是否为gif图片,
最后再做了一次二次渲染
绕过 图片马 + 二次渲染绕过
参考 https://xz.aliyun.com/t/2657#toc-13
2.18 Pass-18
白名单
不在白名单里的文件,则会删除原文件
那么,可以在服务器删除木马前一刻访问到目标文件
利用 intruder进行上传
后续 参考:其他博客写的比较详细 懒癌发作了!