pass-01
尝试上传一个php,发现提示不行。
前端js拦截了,先将php文件后缀改为允许的格式,比如jpg,burp抓包改一下就好了。后缀改为php成功上传。
访问发现上传成功。
pass-02
观察第二关的源码,发现判断content-type。
依旧burp抓包,修改content-type。
访问发现上传成功。
pass-03
查看源码,发现是设置了文件后缀名黑名单,禁止上传后缀名为php的文件,这里利用php2、php3、php4、php5一样会解析,直接修改后缀名为php2上传。
由于我这里是用phpstudy搭建的,所以没办法解析,只能放一张图以示抱歉。
pass-04
观察源码,这次的黑名单更多基本所有的都包括了,而且还将全部都转换为小写。
这里网上百度的方法,上传.htaccess文件
方法一、.htaccess内容为
SetHandler application/x-httpd-php
按情况修改文件名
方法二、.htaccess内容为
AddType application/x-httpd-php .jpg
不过两种方法均为成功,很尴尬- -!
pass-05
观察第五关源码,发现将.htaccess也加入了黑名单,可是去掉了大写转换成小写,直接将后缀名改为大写上传成功。
pass-06
观察源码,发现一样的黑名单,也加上了大写转换成小写,但是没有了首位去空,这里可以最后加空格绕过。
burp抓包,后缀名添加空格。
访问上传成功。
pass-07
观察源码,这次和第六关相比,首位去空回来了,但是少了去“.”,利用windwos特性,会自动去掉文件后缀名最后的“.”进行上传。
burp抓包修改,进行上传。
访问发现上传成功。
pass-08
这是一个涨姿势的关,第八关这个绕过方式我之前是不知道的,就是在php+windows的情况下:如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名。观察源码,巧了没有这个。
burp抓包,修改后缀。
发现成功上传。
pass-09
又是涨姿势的一关,程序先是去除文件名前后的空格,再去除文件名最后所有的.,再通过strrchar来寻找.来确认文件名的后缀,但是最后保存文件的时候没有重命名而使用的原始的文件名,导致可以利用类似one.php. .(两个点号之间有一个空格)绕过,如果重名名了文件的话应该会用$file_ext来进行拼凑文件,这样保存在服务器中的文件将没有后缀(去除了.空格)
pass-10
观察源码,发现是黑名单+去掉后缀名,双写后缀名绕过。
pass-11
观察源码,这次变成了白名单判断,当有php环境中有两个截断条件: 1.php版本小于5.3.4 详情关注CVE-2006-7243 2.php的magic_quotes_gpc为OFF状态,便会有00截断,利用00截断上传。
burp抓包修改,上传成功。
pass-12
观察源码,这里保存用了post方法,所以要用burp再16进制里面改,因为post不会像get对%00进行自动解码。
burp抓包找到然后修改。
查看发现上传成功。
pass-13 -- pass-16
上传图片马即可。copy normal.jpg /b + shell.php /a webshell.jpg
十三关是对比文件的前两个字节
十四关是用了getimagesize函数来对文件类型做判断
十五关是用的exif_imagetype函数
十六关是用的二次渲染
pass-17
观察源码,发现是条件竞争,上传之后就会删掉。
这里可以通过burp的intruder模块来实现。我又一次失败。
pass-18
一样失败,但看大佬的说是本关对文件后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等,将文件上传后,对文件重新命名,同样存在条件竞争的漏洞。可以不断利用burp发送上传图片马的数据包,由于条件竞争,程序会出现来不及rename的问题,从而上传成功。
pass-19
观察源码,CVE-2015-2348 move_uploaded_file() 00截断。
上传成功。
到这里就结束了,好多都还没有吸收,都需要再回头复习。
链接:https://pan.baidu.com/s/1dne-3fR5M1VylcjhhZQLCw
提取码:ij7r
Github上也有。