【Web安全 文件上传漏洞】upload-labs

upload靶场下载地址:https://github.com/c0ny1/upload-labs

Pass-01 JS前端校验

在客户端使用js脚本对文件后缀名检验,抓包更换后缀名即可

文件上传成功

Pass-02 MIME类型校验

服务端对MIME类型检验,抓包更换image/jpeg即可

文件上传成功

Pass-03 黑名单绕过

对后缀名进行黑名单判断,抓包修改后缀名为.php3 | .phtml | .php5等即可
前提:
apache的配置文件httpd.conf中有如下配置
AddType application/x-httpd-php .php .php3 .php5 .phtml

文件上传成功

Pass-04 .htaccess文件绕过

黑名单判断,没有限制.htaccess文件,可以利用apache解析漏洞
先上传.htaccess文件,在上传jpg文件,那么所有的jpg文件都会被当作php文件执行
httpd.conf:AllowOverride All
.htaccess文件内容:SetHandler application/x-httpd-php .jpg
上传.htaccess文件

上传jpg文件

文件上传成功

Pass-05 大小写绕过

源码中没有过滤大小写,可以进行绕过上传

Pass-06 空格绕过

源码中少了首尾去空这一行代码,可以在后缀名后面增加空格

Pass-07 点绕过

源码中少了删除文件名末尾的点这一行代码,可以在后缀名后面加一个点,进行绕过

Pass-08 ::$DATA绕过

源码缺少::$DATA限制,在php+windows的情况下:如果文件名+::$DATA会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持::$DATA之前的文件名。利用windows特性,可在后缀名中加::$DATA绕过

Pass-09 点+空格+点 绕过

代码先是去除文件名前后的空格,再去除文件名最后所有的.,再通过strrchar函数来寻找.来确认文件名的后缀,但是最后保存文件的时候没有重命名而使用的原始的文件名,导致可以利用phpinfo.php. .(点+空格+点)来绕过

Pass-10 双写绕过

源码中,后缀名替换为空只替换一次,使用复写后缀名进行绕过

Pass-11 %00截断

截断条件:php版本小于5.3.4,php的magic_quotes_gpc为OFF状态

Pass-12 %00截断

save_path参数通过POST方式传递,还是利用00截断,因为POST不会像GET对%00进行自动解码,所以需要在二进制中进行修改。

修改前

修改后

成功上传

Pass-13 图片头欺骗


Pass-14 getimagesize()图片马

getimagesize()函数判断文件类型,还是可以图片马绕过,方法同上

Pass-15 exif_imagetype()图片马

php_exif模块来判断文件类型,用图片马绕过,方法同pass-13
参考链接:https://www.cnblogs.com/cookies9/p/9209252.html

Pass-16 图片二次渲染

就是根据用户上传的图片,新生成一个图片,将原始图片删除,将新图片添加到数据库中。比如一些网站根据用户上传的头像生成大中小不同尺寸的图像。
我们需要知道,新生成的图片和原图片有什么不同,在相同的地方(不被渲染的地方)插入代码进行绕过
参考链接:https://xz.aliyun.com/t/2657#toc-13

找到两张图片相同的地方写入代码

将写入代码的图片上传

Pass-17 条件竞争

通过源码得知,先将文件上传到服务器,然后判断文件后缀是否在白名单里,如果在则重命名,否则删除
参考链接:https://cloud.tencent.com/developer/article/1650655

使用Intruder模块进行重复发包

使用python去访问上传的文件

访问到后,停止发包,成功连上webshell

Pass-18

审查源码发现,对文件后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等,因此可以通过不断上传图片马,由于条件竞争可能来不及重命名,从而上传成功。


posted @ 2021-08-24 15:30  StarCi  阅读(241)  评论(0编辑  收藏  举报