upload-labs

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内容为
<FilesMatch "文件名">

  SetHandler application/x-httpd-php

</FilesMatch>

按情况修改文件名

方法二、.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上也有。

原文地址:https://www.cnblogs.com/BuFFERer/p/12273610.html