通过绕过扩展程序黑名单来上传webshell程序

题目

image-20261013163339351

考点

本关服务端校验的是扩展名黑名单——它只挡掉了少数几个后缀(如.php),但没挡.htaccess。思路:先上传一个.htaccess配置文件,把.png声明成”按PHP解析”,再传一个内容为php代码的.png文件——黑名单只管文件名后缀,管不了配置规则。

开始打靶

首先上传一张正常的图片,获取到图片存储的路径

image-20261013163524340

现在我们尝试上传一个php文件去读取服务器的文件,服务器返回信息不允许上传php文件

image-20261013163809168

我们这里可以尝试利用上传.htaccess文件,文件内容为AddType application/x-httpd-php .png,这里的意思就是将文件后缀为.png的文件当做php去解析

image-20261013164343102

接下来上传png文件,文件内容还是php代码

image-20261013164431277

访问上传的文件,可以看到成功读取到了服务器的文件内容,这里服务器成功的将png文件当做php去解析了

image-20261013164534277

提交内容,通关!

image-20261013164551031

修复措施

本关能打成功是因为黑名单只挡了几个常见后缀,漏掉了.htaccess这种配置文件。修复要点:

  1. 用白名单不用黑名单:黑名单永远有漏网之鱼(.htaccess、.user.ini、.php5、.phtml都是例子),白名单只放行明确安全的类型才靠谱。
  2. 禁止上传点开头的文件:.htaccess这类隐藏配置文件一律拒绝。
  3. 服务端重命名:不保留用户扩展名,随机生成文件名,配置规则再怎么写也影响不到。
  4. 存储目录不可执行:目录禁脚本执行,AddType写了也白写。