文件上传绕过upload-labs-master通关16-20

第十六关
这一关对后缀名和文件类型啥的都进行了很严格的控制,而且在后面还对图片进行了二次编译。

原理:将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。具体实现需要自己编写Python程序,人工尝试基本是不可能构造出能绕过渲染函数的图片webshell的。

那么,怎么找到相同的部分呢?需要一个HxD的软件,下载地址为
https://en.softonic.com/download/hxd/windows/post-download
打开渲染后的图片和原始图片

文件上传绕过upload-labs-master通关16-20_第1张图片
文件上传绕过upload-labs-master通关16-20_第2张图片

蓝色部分为相同不变的部分,可在这块添加恶意代码

文件上传绕过upload-labs-master通关16-20_第3张图片

再次上传带有恶意代码的gif图

文件上传绕过upload-labs-master通关16-20_第4张图片
在这里插入图片描述
在这里插入图片描述

测试

文件上传绕过upload-labs-master通关16-20_第5张图片

至于png jpg格式的图片,涉及到一些构造的问题,可以查看大佬的博客。

第十七关
查看源码

文件上传绕过upload-labs-master通关16-20_第6张图片

可以看到没有对文件名的后缀做任何校验,但是上传到服务器后,然后通过rename修改名称,再通过unlink删除文件,需要用到并发漏洞(网上都喜欢叫条件竞争)。

1、可以正常上传php文件,抓包后放入intruder模块中选择发送多次,然后在浏览器中访问就好了,在就算程序会对文件名改名也没关系的,直接访问原文件名就好了。

文件上传绕过upload-labs-master通关16-20_第7张图片
加载一个大一点的字典,让他一直上传,形成竞争条件
同时,一直访问原文件,直至出现
文件上传绕过upload-labs-master通关16-20_第8张图片

2、相同的思路用网上的脚本跑一下,同时,一直刷新浏览器

第十八关
和前一关类似,只不过是采用白名单的形式

初始文件命名规则$this->cls_upload_dir . t h i s − > c l s f i l e n a m e , 重 命 名 规 则 this->cls_filename,重命名规则 this>clsfilenamethis->cls_upload_dir . $this->cls_file_rename_to,当大量文件需要被重命名时就会出现条件竞争.
move在rename之前,move操作进行了一次文件保存, 然后rename进行了一次更改文件名。
利用burp不间断地发送上传图片马的数据包,由于条件竞争,程序会出现来不及rename的问题,从而上传成功。

白名单中存在.7z这个后缀名,apache不能解析,因此可以利用apache的解析漏洞,命名文件为1.php.7z,这样,apche从右往左解析时,遇到.7z不认识,就把这个文件当作.php来解析

在这里插入图片描述

剩余步骤和17关一样

第十九关

文件上传绕过upload-labs-master通关16-20_第9张图片

保存名自动变为upload-19.jpg,那么,可不可以00截断一下呢,改为upload-19.php(0x00).jpg,抓个包看一下

文件上传绕过upload-labs-master通关16-20_第10张图片
在这里插入图片描述

测试

文件上传绕过upload-labs-master通关16-20_第11张图片

第二十关
查看源码

在这里插入图片描述
数组条件,可以抓包构造数组
在这里插入图片描述
filename构成的过程中由于 f i l e [ c o u n t ( file[count( file[count(file) - 1]的作用,导致$file[1] = NULL,所以构造文件名后相当于直接就是xx.php/.,可以直接在move_uploaded_file函数的作用下可以将/.忽略,因此可以上传成功。

因此save_name变量的两个值分别是xx.php/,另外一个值是jpg。

文件上传绕过upload-labs-master通关16-20_第12张图片
测试
文件上传绕过upload-labs-master通关16-20_第13张图片

你可能感兴趣的:(文件上传绕过,upload-labs通关)