pass01
前端验证
可以禁用js或者将一句话木马文件改后缀为jpg再抓包改后缀
pass02
MIME验证
抓包改Content-Type为image/jpeg
pass03
黑名单验证(后缀名绕过)
只要后缀不为图中的黑名单后缀即可绕过
常用绕过后缀名
php,php3,php4,php5,phtml.pht
pass04
黑名单验证(.htaccess攻击)
源码中黑名单后缀多了,基本没办法从后缀名绕过
这时可以利用.htaccess文件进行攻击
先上传一个.htaccess文件,内容如下
再上传对应.htaccess文件内容的文件名文件,含有一句话木马
.htaccess文件,它将该目录下匹配的对应文件解析为php执行
pass05
点空格点绕过
新增的一关 前三关的结合体
对照源码分析
假设上传一个文件 为xx.php. .
$file_name = deldot($file_name);//删除文件名末尾的点
这时文件名为xx.php.
$file_ext = strrchr($file_name, '.');
strrchr 匹配文件名最后出现点的位置 这时修改文件为.
$file_ext = trim($file_ext); //首尾去空
这时文件名为.
根据Windows特性,会删除文件名最后的点
因此最后上传上去的文件名为xx.php
pass06
大小写绕过
查看源码,发现少了转换成小写的函数
对此可以采用大小写绕过黑名单方式
pass07
空格绕过
对比前面的关卡,源码少了首尾去空
文件名后缀加个空格就可
pass08
点绕过
查看源码,发现少了删除末尾点
在后缀名上加上点即可绕过
pass09
::$DATA绕过
对比源码,少了::$DATA,在后缀名加上,Windows特性不会解析::$DATA
pass10
点空格点绕过
跟第五关一样
pass11
双写绕过
$file_name = str_ireplace($deny_ext,"", $file_name);
将黑名单中的后缀名替换成空
因此可以采用双写进行绕过
pass12
%00截断(get方式)
第一个方块,是白名单验证,所以上传时首先需要将php木马文件改成jpg格式
第二个方块,是说明用拼接路径get方式接收,所以%00截断方式在url上截断
因为在url处进行了截断,所以最终保存的后缀名为url处的php
pass13
%00截断(POST方式)
第一个方块,是白名单验证,所以上传时首先需要将php木马文件改成jpg格式
第二个方块,是说明用拼接路径post方式接收,所以%00截断方式在bp上修改,由于post不会对%00进行编码,所以需要在bp上进行编码
pass14
图片马绕过
题目提示使用图片马,利用文件包含漏洞
下方源码为用函数二进制读取文件,判断为图片才能通过,因此无法简单的改后缀绕过
图片马制作方法
copy a.jpg /b + shell.php /a shell.jpg
/b 表示一个二进制文件
+ 表示将多个文件合并成一个文件
/a 表示一个ASCII文本文件
先上传一个图片马,并复制上传成功后的图像链接
查看文件包含漏洞,跳转到该链接
然后在该链接后拼接保存好的图像路径地址
http://192.168.184.103/upload-labs/include.php?file=upload/6420210619180100.jpg
成功执行php
pass15
图片马绕过
绕过方法跟14关一样,只是获取图片信息从二进制读取到getimagesize函数读取
getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。
pass16
图片马绕过
绕过方法一样,只是用php自带模块对图片进行检验
需要开启php扩展