文件上传——黑名单验证绕过案例
文件上传——黑名单验证绕过案例
1.Pass-03(特殊后缀)
进入提交界面,并查看提交php文件的反应


我们将提交的文件后缀改为了php4的形式,发现能够提交成功:

2.Pass-04(.htaccess)
首先明确htaccess文件,它是超文本访问(Hypertext Access)的缩写,一个基于Apache的Web服务器使用的配置文件,用于控制它所在的目录以及该目录下的所有子目录。负责相关目录下的网页配置。通过htaccess文件,可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
参考连接:https://blog.csdn.net/weixin_46329243/article/details/113091399
查看提交结果界面:

查看源码(当然,正常情况下我们是不可能有源码的):

可以发现,这个禁止后缀禁止得很彻底,尝试htaccess方法,首先创建.htaccess并将其上传:
1 |
|
就是将jpg文件解释为php格式,最终能够上传成功(当然,这需要看Apache的相关配置的)
3.Pass-05(.user.ini)
当禁用了.htaccess,提示显示上传目录存在php文件,所以我们可以尝试利用.user.ini的文件配置,其类似于.htaccess但是应用范围更广,只要是以fastcgi运行的php都可以用它来动态的局部修改php.ini中的配置

1 |
|
该.user.ini文件里面的意思是:所有的php文件都自动包含1.gif文件。.user.ini相当于一个用户自定义的php.ini。然后再上传一个内容为php的脚本,命名为liaoyue.gif

复制图像地址后,将文件名改为readme.php,然后密码设置为一句话的密码,蚁剑连接成功,最终上传成功。
4.Pass-06(大小写绕过)
使用大小写也是一种绕过的方法,去除对文件后缀名的转为小写设定,直接选择后缀名为.PHP
等非黑名单中存在的格式上传:


(总感觉作用不大……)
5.Pass-07(空格绕过)
选择后缀为.php
的一句话上传,抓包后在后面增加空格,也是能够成功绕过。(这里需要在抓包工具中进行修改,我是没办法直接改文件名,系统会自动去掉空格)
6.Pass-08(点号绕过)
选择后缀为.php
的一句话上传,抓包后在后面增加点,达到成功绕过的目的。(这里需要在抓包工具中进行修改,我是没办法直接改文件名,系统会自动去掉点)
7.Pass-09(特殊字符::$DATA绕过)
选择后缀为.php
的一句话上传,抓包后在后面增加::$DATA
,达到上传文件成功的目的。(这里需要在抓包工具中进行修改,我是没办法直接改文件名,系统不允许有::的存在)
8.Pass-10(针对去掉名称后面的.)
查看源码:

可以看见,在源码里,对上述的一些文件名黑名单绕过都赶尽杀绝,但是对于源码中其路径拼接的是$file_name
而不是$file_ext
,而$file_name
是仅仅处理了文件名末尾的点。所以我们可以尝试在点后面在多加一个.
选择后缀为.php
的一句话上传,抓包后构造文件后缀为php. .
,达到成功绕过的目的。
9.Pass-11(双写绕过)
查看源码:

查看后能够发现其对存在黑名单中的字符进行替换,但str_ireplace()
函数只替换一次,因此修改文件名为1.pphphp
就可以实现绕过