Pass-01
查看提示,有一个前端验证,那思路就是把shell文件后缀改为jpg,绕过前端,再通过修改包文件中的后缀还原。
在包中将yyds.jpg后缀换位yyds.php成功上传
Pass-02
MIME(Multipurpose Internet Mail Extensions)多用途网络邮件扩展类型,可被称为Media type或Content type,它设定某种类型的文件当被浏览器打开的时候需要用什么样的应用程序,多用于HTTP通信和设定文档类型例如HTML。之所以叫多用途网络邮件扩展类型,因为它最早被用于电子邮件系统,后用于浏览器。
简单来说就是有Content type检查。
那我们的思路就是在包中对Content type符合协议就行。
上传yyds.jpg,抓包Content type已经符合协议,修改文件后缀为php,成功上传php文件
Pass-03
看到这个提示,第一反应就是,大小写绕过,那就试试吧,结果是失败。
分析源码,果然是存在将str全部转为小写的操作。存在过滤
$deny_ext = array(’.asp’,’.aspx’,’.php’,’.jsp’);
这里明显存在过滤不全,因为php文件还可以为php2、php3、php4、php5。
前提是apache中允许,一般默认允许phtml,php3,php4,php5,pht
那修改后缀为php3,成功上传
Pass-04
看到这种过滤,有过滤php,pHp的通常不会有将str全部转为小写的操作。这里用phP试一试。失策了。。。
分析源码确实还是存在转换小写操作
过滤是比较严谨的,我们可以采用apahce文件解析绕过。创建文件名为.htaccess的文件,编辑,保存。这是apahce一个白名单文件,作用是会将名为yyds.jpg的文件按php文件来解析。
<FilesMatch "yyds.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
先上传.htaccess文件,再上传yyds.jpg文件,访问yyds.jpg文件按php格式正常解析。
Pass-05
分析源码,第五关可以通过apache解析绕过,也可通过大小写绕过。上传一个yyds.Php文件,上传成功。
Pass-06
第六关相比前面少了个首位去空,那么上传yyds.php,抓包,在php后面加上一个空格,最后访问yyds.php可以成功访问。