发布时间:2023-08-12 14:00
Pass-01:
第一关就是简单的前端js验证绕过。我能想到有三种办法:
一是先将php文件改为jpg文件绕过js验证,然后抓包改回php后缀即可.
二是修改前端js代码,只需在判断函数中的可上传文件类型中加入php即可。
三是直接禁用改网页的js功能(当然这个方法比较极端)。
Pass-02:
查看源代码
可知只验证了文件类型,故抓包修改content-type即可绕过验证上传webshell.
Pass-03:
查看源代码
发现是存在黑名单,但是黑名单中后缀名太少,所以可以用php3,php4,php5,phtml其中之一绕过。
Pass-04:
查看源代码
还是黑名单,但是这次的黑名单把改过滤的基本上都过滤了,但是还有.haccess文件可以上传(简单介绍下这个文件:.htaccess文件能够设置服务器解析文件的格式 比如 设置 匹配到jpg 就用php的格式来解析)。
上传完.haccess文件之后便可以上传图片马,服务器将自动把图片马作为php文件解析。
Pass-05:
查看源代码
这次连.haccess也过滤了,并且过滤了大小写,空格,::$DATA。没有办法了,看看提示
这让我想到了之前做的一道文件上传类型的ctf题,它是通过上传.user.ini文件来getshell。
相关知识:.user.ini相当于当前目录一个用户自定义的php.ini。在文件中写入auto_prepend_file=你上传的文件名.jpg,这样当前目录的php文件就会自动包含指定的文件。使用.user.ini文件的条件比较苛刻,那就是上传目录存在php文件。刚好这一关符合条件。。。
Pass-06:
查看源码
发现没有过滤大小写,所以直接上传PHP后缀文件即可。
Pass-07:
查看源码
发现没有过滤文件名末尾的空格,所以在文件名后加上空格即可绕过。。。
Pass-08:
查看源码
没有过滤文件名末尾的点,利用windows特性,会自动去掉后缀名中最后的”.”,可在文件后缀名中加”.”绕过。
Pass-09:
特殊符号绕过原理:
Windows系统下,如果上传的文件名中test.php:: D A T A 会 在 服 务 器 上 生 成 一 个 t e s t . p h p 的 文 件 , 其 中 内 容 和 所 上 传 文 件 内 容 相 同 , 并 被 解 析 。 正 好 源 码 中 没 有 过 滤 : : DATA会在服务器上生成一个test.php的文件,其中内容和所上传文件内容相同,并被解析。 正好源码中没有过滤:: DATA会在服务器上生成一个test.php的文件,其中内容和所上传文件内容相同,并被解析。正好源码中没有过滤::DATA。。。
Pass-10:
查看源代码
黑名单过滤,注意第14行和之前不太一样,路径拼接的是处理后的文件名,于是构造info.php. . (点+空格+点),经过处理后,文件名变成info.php.,即可绕过。
Pass-11:
查看源代码
依旧是黑名单过滤,注意到,这里是将问题后缀名替换为空,于是可以利用双写绕过:如将文件命名为test.phphpp;
Pass-12:
看到是白名单判断,但是$img_path直接拼接,因此可以利用%00截断绕过:
(%00截断漏洞只在php版本<5.3.4才存在。。。)。
Pass-13:
和十二关不同的是这次的save_path是通过post传进来的,还是利用00截断,但这次需要在二进制中进行修改,因为post不会像get对%00进行自动解码。
Pass-14:
本关要求上传图片马即可,查看代码:
通过读文件的前2个字节判断文件类型,所以只需在文件中加入特定的文件头即可,如GIF89a图片文件欺骗,在文件内容头部写入GIF89a。
还有一种方法就是直接上传图片马即可,制作方法:
copy normal.jpg /b + shell.php /a webshell.jpg
上传完图片马只是第一步,最重要的是如何让其被当作脚本解析,一般是结合文件包含漏洞来使用。本关中恰好存在include.php并且参数可控。。。
使file参数等于图片马的路径即可实现文件包含,解析图片马
Pass-15:
本关还是要上传一个图片马,查看代码:
这里用getimagesize获取文件类型,还是直接就可以利用图片马或者图片文件头欺骗就可进行绕过。。。
Pass-16:
查看代码:
这次使用exif_imagetype()函数来检验文件类型,还是可以用前两关同样的方法进行文件上传,不多解释了。。。
Pass-17:
查看源代码:
本关综合判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,最后再做了一次二次渲染,这里使用容易绕过二次渲染的gif文件。现在制作一个gif图片马,copy就可以了。也可以winhex制作。
制作后便上传,发现无法利用。然后将上传的图片重新下载下来,放入winhex,进行对比。
可以找到二次渲染后不变的地方,而这个地方就是可以插入一句话的地方。
具体可以参考这篇文章
Pass-18:
查看源代码
本关考察的是条件竞争
这里先将文件上传到服务器,然后通过rename修改名称,再通过unlink删除文件,因此可以通过条件竞争的方式在unlink之前,访问webshell。
首先在burp中不断发送上传webshell的数据包:
然后不断在浏览器中访问,发现通过竞争可以访问到:
Pass-19:
本关也存在条件竞争的问题,不过这题对文件后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等,因此可以通过不断上传图片马,由于条件竞争可能来不及重命名,从而上传成功。
Pass-20:
查看源代码:
本关考察CVE-2015-2348 move_uploaded_file() 00截断,上传webshell,同时自定义保存名称,直接保存为php是不行的。发现move_uploaded_file()函数中的img_path是由post参数save_name控制的,因此可以在save_name利用00截断绕过:
Pass-21:
这一关白名单,
验证过程:
方法: