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

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

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

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试

在这里插入图片描述

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

第十七关
查看源码

在这里插入图片描述

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

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

在这里插入图片描述
加载一个大一点的字典,让他一直上传,形成竞争条件
同时,一直访问原文件,直至出现
在这里插入图片描述

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

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

初始文件命名规则$this->cls_upload_dir . t h i s > c l s f i l e n a m e this->cls_filename,重命名规则 this->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-19.jpg,那么,可不可以00截断一下呢,改为upload-19.php(0x00).jpg,抓个包看一下

在这里插入图片描述
在这里插入图片描述

测试

在这里插入图片描述

第二十关
查看源码

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

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

在这里插入图片描述
测试
在这里插入图片描述

发布了40 篇原创文章 · 获赞 42 · 访问量 3584

猜你喜欢

转载自blog.csdn.net/per_se_veran_ce/article/details/100740748