第一关

这一关根据提示是一个文件上传的前端绕过,本题采用三种方法解决:

第一种:

通过直接禁用前端的JS来进行绕过。

文件上传成功。但这种方法会导致页面的某些功能显示不出来。

第二种:

通过BS修改后缀名,进行绕过。

如果js代码是在本地运行,很可能抓不到数据包。

第三种:

将网站源码复制下来,放到本地,然后将js代码删除。

找到文件上传的地址

在本地文件中添加地址

在本地进行上传

第二关

这是一个白名单过滤,而且是MIME过滤,所谓的MIME过滤就是指对与请求包的Content-Type进行过滤,

将Content-Type改为图片的格式

成功上传。

第三关

这是一个黑名单过滤

尽管.php无法上传,但是我们可以使用.phtml .php进行绕过。apache服务器能够使用php解析.phtml .php3

成功上传。

注:要在apache的httpd.conf中有如下配置代码:AddType application/x-httpd-php .php .phtml .phps .php5 .pht,如果不配置他是无法解析php5代码的,访问的时候就是一个空白页。

第四关

通过后端的代码可以知道,这次过滤的东西很多,我们可以尝试上传一个.htaccess配置文件,将4.png图片当作php代码进行解析,首先创建一个.htaccess文件,里面写上代码。

第五关:

通过后端的代码我们可以看到,php对文件的过滤还是蛮严格的,但是我们仔细看一下可以发现它没有对.PHP的文件后缀名进行过滤因此本题有两种思路:

第一种:

直接上传.PHP的文件。

第二种:

通过代码我们可以整理出它后端过滤的流程,就是删到结尾的点后删除结尾的空格,这样我们完全可以将文件的后缀名改为.php. .这样经过它的删除之后我们仍有一个.php.的后缀名。这是我们还是可以正常访问的。

第六关:

通过代码我们可以看出,后端对大小写进行了转换,将大写强制转换为小写,这时候我们上传.PHP文件的方法就不行了,但是我们仍然可以使用第四题的第二种方法。

第七关:

通过代码我们可以发现,后端没有对扩展名的. 进行过滤,所以我们可以通过将扩展名改为.php.的方式进行绕过。

第八关:

这一关没有对后缀名中的’::$DATA’进行过滤。在php+windows的情况下:如果文件名+”::$DATA”会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持”::$DATA”之前的文件名。利用windows特性,可在后缀名中加” ::$DATA”绕过:

第九关:

这个关过滤的思路就是会删去结尾的.将大写转换为小写然后删去结尾的空格。这个和第五关第二种方法是一样的。

第十关:

本题的过滤思路就是,后端会匹配黑名单里的内容将假如匹配到了黑名单里的内容则将文件的扩展名更改为空,但是它只是过滤一次所以我们可以采用双写进行绕过将文件扩展名改为.pphphp进行绕过。

第十一关:

本题是采用白名单,并且后端会将最后一个.之后的名字当作文件的扩展名,比如. .php,它会将文件的扩展名当作.php来处理。并且会采用直接拼接的方式将它进行重命名。因此我们采用%00进行截断,

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

第十二关:

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

第十三关:

通过读文件的前2个字节判断文件类型,因此直接上传图片马即可,制作图片马:

1
copy 1.jpg /b + 1.php /a shell.jpg

然后上传就行了,因为我这个版本问题,没有文件包含漏洞,所以无法测试。

第十四关:

这题是用getimagesize函数判断文件类型,还是可以图片马绕过,方法同pass-13。

第十五关:

这里用到php_exif模块来判断文件类型,用图片马绕过,方法同pass-13。

第十六关:

判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,最后再做了一次二次渲染,二次渲染简单的理解就是在你点上传之后服务器已经给你将文件上传出去了,但是图片会再进行一次过滤之类的,将图片重新复制一份并储存在一个新的文件地址之下,然后删除原来的文件,二次渲染可以通过条件竞争进行访问。具体的操作过程将在下一关讲解。

第十七关:

本题是一个条件竞争的题,先将文件上传到服务器,然后判断文件后缀是否在白名单里,如果在则重命名,否则删除,因此我们可以上传1.php只需要在它删除之前访问即可,可以利用burp的intruder模块不断上传,然后我们不断的访问刷新该地址即可。

第十八关:

本题也存在条件竞争的问题,根据提示的源码可能看不出有什么东西,但是通过查看本题完整的源代码可以看出这题对文件后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等,因此可以通过不断上传图片马,由于条件竞争可能来不及重命名,从而上传成功。

第十九关:

本关采用两种方法。

第一种:

根据源码将名字伪造成一个文件夹,这样就可以成功的绕过。

第二种:

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