Upload-labs通关手册

Upload-labs是一个帮你总结所有类型的上传漏洞的靶场,包括常见的文件上传漏洞:

Upload-labs通关手册_第1张图片

项目地址:https://github.com/c0ny1/upload-labs

运行环境

操作系统:windows、Linux
php版本:推荐5.2.17(其他版本可能会导致部分Pass无法突破)
php组件:php_gd2,php_exif(部分Pass需要开启这两个组件)
apache:以moudel方式连接

第一关

直接上传php木马,发现前端报错:

Upload-labs通关手册_第2张图片

尝试前端绕过,在前端js判断函数中加上可以上传php文件:

Upload-labs通关手册_第3张图片

即可上传成功:

Upload-labs通关手册_第4张图片
访问:

Upload-labs通关手册_第5张图片

第二关

查看源代码:

Upload-labs通关手册_第6张图片
发现仅仅判断content-type,于是修改content-type绕过:

Upload-labs通关手册_第7张图片
上传成功:

Upload-labs通关手册_第8张图片

第三关

查看源代码:

Upload-labs通关手册_第9张图片
发现是黑名单判断,于是尝试用php3,phtml绕过

Upload-labs通关手册_第10张图片

成功上传:

Upload-labs通关手册_第11张图片

第四关

查看源代码:

Upload-labs通关手册_第12张图片

虽然还是黑名单,但几乎过滤了所有有问题的后缀名,除了.htaccess,于是首先上传一个.htaccess内容如下的文件:

SetHandler application/x-httpd-php

Upload-labs通关手册_第13张图片

这样所有文件都会解析为php,然后再上传图片马,就可以解析:

Upload-labs通关手册_第14张图片

访问:

Upload-labs通关手册_第15张图片

第五关

查看源代码:

Upload-labs通关手册_第16张图片

还是黑名单,加上了.htaccess,但是没有将后缀进行大小写统一,于是可以通过大小写绕过:

Upload-labs通关手册_第17张图片

访问:

Upload-labs通关手册_第18张图片

第六关

查看源代码:

Upload-labs通关手册_第19张图片

还是黑名单,但是没有对后缀名进行去空处理,可在后缀名中加空绕过:

Upload-labs通关手册_第20张图片

访问:

Upload-labs通关手册_第21张图片

第七关

查看源代码:

Upload-labs通关手册_第22张图片

还是黑名单,但是没有对后缀名进行去”.”处理,利用windows特性,会自动去掉后缀名中最后的”.”,可在后缀名中加”.”绕过:

Upload-labs通关手册_第23张图片

访问:

Upload-labs通关手册_第24张图片

第八关

查看源代码:

Upload-labs通关手册_第25张图片

还是黑名单,但是没有对后缀名进行去”::$DATA”处理,利用windows特性,可在后缀名中加” ::$DATA”绕过:

Upload-labs通关手册_第26张图片

访问:

Upload-labs通关手册_第27张图片

第九关

查看代码:

Upload-labs通关手册_第28张图片

黑名单过滤,注意第15行和之前不太一样,路径拼接的是处理后的文件名,于是构造info.php. . (点+空格+点),经过处理后,文件名变成info.php.,即可绕过。

Upload-labs通关手册_第29张图片

访问:

Upload-labs通关手册_第30张图片

第十关

查看源代码:

Upload-labs通关手册_第31张图片

依旧是黑名单过滤,注意到,这里是将问题后缀名替换为空,于是可以利用双写绕过:

Upload-labs通关手册_第32张图片

访问:

Upload-labs通关手册_第33张图片

第十一关

查看代码:

Upload-labs通关手册_第34张图片

看到是白名单判断,但是$img_path直接拼接,因此可以利用%00截断绕过:

Upload-labs通关手册_第35张图片

访问:

Upload-labs通关手册_第36张图片

第十二关

查看代码:

Upload-labs通关手册_第37张图片

和十一关不同的是这次的save_path是通过post传进来的,还是利用00截断,但这次需要在二进制中进行修改,因为post不会像get对%00进行自动解码。

Upload-labs通关手册_第38张图片

Upload-labs通关手册_第39张图片

访问:

Upload-labs通关手册_第40张图片

第十三关

本关要求上传图片马即可,查看代码:

Upload-labs通关手册_第41张图片

通过读文件的前2个字节判断文件类型,因此直接上传图片马即可,制作方法:
copy normal.jpg /b + shell.php /a webshell.jpg
上传图片马

Upload-labs通关手册_第42张图片

成功绕过:

Upload-labs通关手册_第43张图片

接下来利用的话,还需要结合文件包含漏洞。

第十四关

本关还是要上传一个图片马,查看代码:

Upload-labs通关手册_第44张图片

这里用getimagesize获取文件类型,还是直接就可以利用图片马就可进行绕过:

Upload-labs通关手册_第45张图片

第十五关

本关还是要上传一个图片马,查看代码:

Upload-labs通关手册_第46张图片

这里用到php_exif模块来判断文件类型,还是直接就可以利用图片马就可进行绕过:

Upload-labs通关手册_第47张图片

第十六关

本关还是要上传一个图片马,查看代码:

Upload-labs通关手册_第48张图片

本关综合判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,最后再做了一次二次渲染,绕过方法:

Upload-labs通关手册_第49张图片

成功上传:

Upload-labs通关手册_第50张图片

第十七关

本关考察的是条件竞争,查看代码:

Upload-labs通关手册_第51张图片

这里先将文件上传到服务器,然后通过rename修改名称,再通过unlink删除文件,因此可以通过条件竞争的方式在unlink之前,访问webshell。
首先在burp中不断发送上传webshell的数据包:

Upload-labs通关手册_第52张图片

然后不断在浏览器中访问,发现通过竞争可以访问到:

Upload-labs通关手册_第53张图片

第十八关

本关需要上传图片马,查看代码

Upload-labs通关手册_第54张图片

Upload-labs通关手册_第55张图片

Upload-labs通关手册_第56张图片

本关对文件后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等,将文件上传后,对文件重新命名,同样存在条件竞争的漏洞。可以不断利用burp发送上传图片马的数据包,由于条件竞争,程序会出现来不及rename的问题,从而上传成功:

Upload-labs通关手册_第57张图片

第十九关

本关考察CVE-2015-2348 move_uploaded_file() 00截断,上传webshell,同时自定义保存名称,直接保存为php是不行的

Upload-labs通关手册_第58张图片

查看代码:

Upload-labs通关手册_第59张图片

发现move_uploaded_file()函数中的img_path是由post参数save_name控制的,因此可以在save_name利用00截断绕过:

Upload-labs通关手册_第60张图片

你可能感兴趣的:(WriteUp)