uploadlabs经验总结
- 软件开发
- 2025-09-12 04:24:02

目录
一、基础上传漏洞(太过简单目前环境不可能存在)
1、抓包然后改后缀进行绕过
2、抓包然后改上传文件类型进行绕过
3、改后缀大小写绕过,以及收尾加空格,加::$DATA,加点等等
4、黑名单不完整绕过,复习后缀绕过(通过.php5绕过等)
5、压缩包中通过将恶意文件放在子压缩包中绕过
二、中等风险(小型公司可能存在)
1、%00截断(%00只能用于php版本低于5.3的)
2.图片拼接php恶意代码
三、较高风险(现如今的环境部分存在)
1、二次渲染
2、条件竞争
4、数组绕过
一、基础上传漏洞(太过简单目前环境不可能存在) 1、抓包然后改后缀进行绕过 2、抓包然后改上传文件类型进行绕过 3、改后缀大小写绕过,以及收尾加空格,加::$DATA,加点等等 4、黑名单不完整绕过,复习后缀绕过(通过.php5绕过等) 5、压缩包中通过将恶意文件放在子压缩包中绕过
例如:
二、中等风险(小型公司可能存在) 1、%00截断(%00只能用于php版本低于5.3的) 2.图片拼接php恶意代码可以直接用Notepad直接打开图片后面加一个php代码,但是需要16进制,要不然图片可能出错。
也可以cmd进行生成,命令语句:copy 14.jpg /b + 14.php /a webshell.jpg
三、较高风险(现如今的环境部分存在) 1、二次渲染imagecreatefromjpeg()函数
二次渲染是由Gif文件或 URL 创建一个新图象。成功则返回一图像标识符/图像资源,失败则返回false,导致图片马的数据丢失,上传图片马失败。
进行通关
按照原来的方法进行上传,我们可以发现还是可以上传的,但是配合包含漏洞却无法解析,这时我们把上传的图片复制下来用Notepad打开,发现我们原来写的php代码没有了,这就是二次渲染把我们里面的php代码删掉了。
我们把原图和他修改过的图片进行比较,看看哪个部分没有被修改。将php代码放到没有被更改的部分,配合包含漏洞,就可以了。
2、条件竞争对条件竞争的考察,我们看代码他是先将图片上传上去,才开始进行判断后缀名、二次渲染。如果我们在上传上去的一瞬间访问这个文件,那他就不能对这个文件删除、二次渲染。这就相当于我们打开了一个文件,然后再去删除这个文件,就会提示这个文件在另一程序中打开无法删除。
操作:直接上传一个php文件,然后进行抓包,将数据包发送至intruder下
然后发包,用另一个浏览器一直访问18.php地址,只要在上传的一瞬间,他还没来的及删除、修改就可以了(一直访问)。
4、数组绕过源代码:
php $is_upload = false; $msg = null; if(!empty($_FILES['upload_file'])){ //检查MIME $allow_type = array('image/jpeg','image/png','image/gif'); if(!in_array($_FILES['upload_file']['type'],$allow_type)){ $msg = "禁止上传该类型文件!"; }else{ //检查文件名 $file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name']; if (!is_array($file)) { $file = explode('.', strtolower($file)); } $ext = end($file); //文件后缀 $allow_suffix = array('jpg','png','gif'); if (!in_array($ext, $allow_suffix)) { $msg = "禁止上传该后缀文件!"; }else{ $file_name = reset($file) . '.' . $file[count($file) - 1]; $temp_file = $_FILES['upload_file']['tmp_name']; $img_path = UPLOAD_PATH . '/' .$file_name; if (move_uploaded_file($temp_file, $img_path)) { $msg = "文件上传成功!"; $is_upload = true; } else { $msg = "文件上传失败!"; } } } }else{ $msg = "请选择要上传的文件!"; }如果save_name为空,则把`$_FILES['upload_file']['name']`赋值给$file,反之`$_POST['save_name']`赋值给$file
如果$file不是数组,则将其处理为数组,通过`.`符号将其分割 [ “muma.php”,””,”jpg”]
通过`end()`函数获得$file中的最后一个元素,赋值给$ext,并进行后缀校验。感觉这里应该有名堂
后缀符合,则拼接文件名为`首元素.尾元素` `reset()`获取数组首元素
$file_name = reset($file) . '.' . $file[count($file) - 1];
count[2]-1=1,因为[1]我们没有设置就直接为空,前面为返回的file为test.php再拼接一个小数点,又因为windows会省略小数点,即可上传成功
uploadlabs经验总结由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“uploadlabs经验总结”