实验室:通过扩展黑名单绕过 Web shell 上传

本文描述了一种针对Apache服务器的安全漏洞利用方法。通过上传伪装成.htaccess的文件,并设置特定的MIME类型,可以将任意自定义扩展名映射为可执行的PHP代码。在示例中,作者展示了如何通过修改上传请求,绕过服务器对.php文件的禁用,成功上传并执行.l33t扩展的文件,从而获取敏感信息。

前言:
服务器通常不会执行文件,除非它们已被配置为这样做。例如,在 Apache 服务器执行客户端请求的 PHP 文件之前,开发人员可能必须将以下指令添加到他们的/etc/apache2/apache2.conf文件中:

LoadModule php_module /usr/lib/apache2/modules/libphp.so
AddType application/x-httpd-php .php
  • 许多服务器还允许开发人员在各个目录中创建特殊的配置文件,以便覆盖或添加一个或多个全局设置。例如,Apache
    服务器将从一个名为(.htaccess如果存在)的文件中加载特定于目录的配置。

同样,开发人员可以使用web.config文件在 IIS 服务器上进行特定于目录的配置。这可能包括如下指令,在这种情况下允许将 JSON 文件提供给用户:

<staticContent>
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>

Web 服务器在存在时使用这些类型的配置文件,但通常不允许您使用 HTTP 请求访问它们。但是您可能偶尔会发现无法阻止您上传自己的恶意配置文件的服务器,在这种情况下,即使您需要的文件扩展名被列入黑名单,您也可以欺骗服务器将任意自定义文件扩展名映射到可执行的 MIME 类型。


第一步:登录网站,上传文件e.php失败,网站禁止上传.php类型文件。
在这里插入图片描述
第二步:打开 Burp 的代理历史记录,设置过滤器,找到POST /my-account/avatar用于提交文件上传的请求发送到“重发器”。在响应中,请注意标头显示您正在与 Apache 服务器通信。
在这里插入图片描述
第三步:进行以下更改:
1.filename将参数 的值更改为.htaccess
2.Content-Type将标头 的值更改为text/plain.
3.将上传文件的内容替换为以下 Apache 指令:AddType application/x-httpd-php .l33t)
这会将任意扩展名 ( .l33t) 映射到可执行 MIME 类型application/x-httpd-php。由于服务器使用该mod_php模块,它已经知道如何处理这个问题。

在这里插入图片描述
第四步:复制请求到浏览器,找到请求并修改filename参数值,更改exploit.php为exploit.l33t。再次发送请求,发现文件上传成功。
在这里插入图片描述

第五步:复制到浏览器响应,切换到包含GET /files/avatars/<文件名>请求。观察响应中返回了 Carlos 的秘密。
1.首先将修改后的请求复制到浏览器
2.找到GET请求

在这里插入图片描述
在这里插入图片描述
将密码提交,实验完成!
文中有的地方可能讲的不对,还希望大佬多多保函,给予改正,万分感谢!

### 关于 NULL 的本质 NULL 的本质可以被理解为一种特殊的指针值,其核心在于它并不表示任何有效的内存地址。具体来说,NULL 被定义为 `(void *)0` 或者简单的 `0`,这实际上是一个特殊的整数值,在 C 和 C++ 中用来表示空指针[^1]。 在计算机体系结构中,`0x00000000` 通常被认为是一个非法或者保留的内存地址,因此将指针赋值为 NULL 实际上是为了表明该指针当前不指向任何有效对象或内存区域。需要注意的是,尽管 NULL 的值通常是零,但它并不是作为普通的整数零来处理,而是一种特定的标记用于指示“无指向”。 关于 BUU CTF 的 Upload-Labs: Upload-Labs 是一个经典的文件上传漏洞学习平台,主要目的是让参与者通过解决不同级别的挑战来掌握常见的 Web 安全问题以及如何利用这些漏洞完成攻击模拟。以下是针对此实验室的一些通用解题思路和技巧: #### 文件扩展绕过 许多服务器端脚本会基于白名单/黑名单机制过滤掉危险类型的文件(比如 `.php`, `.jsp`)。然而如果实现不当,则可能存在多种方式去规避这种检测逻辑。例如尝试提交带有双扩展名如 `shell.php.jpg` 或者使用 Unicode 编码混淆真实意图。 #### MIME 类型伪造 除了检查文件后缀之外, 应用程序还可能验证上传数据的实际 Content-Type 是否匹配预期格式 (image/jpeg 等) 。但是一些服务并未严格校验客户端声明的内容类型与实际二进制流之间的一致性,从而允许恶意用户发送看似合法却隐藏着可执行代码的数据包。 #### 零宽字符注入 有时开发者会在保存之前对原始输入做简单替换操作(删除某些特殊符号),但如果忽略了不可见字符的影响就可能导致路径拼接错误进而触发本地包含等问题。可以通过附加一些非打印 ASCII 字符串到目标资源名称上来测试是否存在此类缺陷。 ```bash curl --form "file=@evil%EF%BC%8Ejpg" http://example.com/upload ``` 以上命令演示了怎样借助 URL 百分号编码技术嵌入一个几乎看不见的小圆点替代标准句号达到欺骗目的的效果。 #### 后门植入分析 部分题目可能会要求参赛选手思考更深层次的安全隐患——即使成功突破防御措施并将自定义脚本放置到了远程主机目录下也未必能够立即获得完全控制权因为还有额外防护层有待克服比如说PHP open_basedir限制等等情况都需要单独考虑解决方案。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值