一次艰难的审计
字数 982 2025-08-29 08:31:47
CMS后台.htaccess文件上传绕过漏洞分析与利用
漏洞概述
本教学文档详细分析了一种通过修改CMS后台伪静态设置中的.htaccess文件配置,结合文件上传功能实现PHP代码执行的漏洞利用方法。该漏洞属于配置不当导致的文件上传绕过漏洞。
漏洞分析
1. 漏洞背景
- 目标:某CMS后台系统
- 漏洞位置:设置-链接设置-伪静态设置中的Apache模块配置
- 漏洞类型:.htaccess配置不当导致的上传绕过
2. 关键代码分析
2.1 配置读取机制
$cfg['webdir'] = $this->kv->xget('cfg');
xget()是从数据库tw_kv表中获取cfg数据的函数- 配置数据存储在数据库中,通过
xget()读取
2.2 配置写入机制
$this->kv->xset('webdir', R('webdir', 'P'), 'cfg');
xset()用于将配置写入数据库R('webdir', 'P')获取POST参数中的webdir值
3. 漏洞利用原理
通过修改.htaccess文件配置,可以将特定扩展名(如.jpg)的文件解析为PHP文件:
<IfModule mod_rewrite.c>
</IfModule>
<FilesMatch "jpg">
SetHandler application/x-httpd-php
</FilesMatch>
<IfModule mod_rewrite.c>
这段配置会使服务器将所有.jpg文件当作PHP文件解析。
漏洞利用步骤
1. 修改.htaccess配置
- 进入后台"基本设置"
- 找到"所在目录"设置项(webdir)
- 修改配置为恶意.htaccess内容:
</IfModule><FilesMatch "jpg">SetHandler application/x-httpd-php</FilesMatch><IfModule mod_rewrite.c> - 保存设置,生成新的.htaccess文件
2. 上传恶意文件
- 进入"我的-发布文章"
- 使用"上传缩略图"功能上传一个内容为PHP代码的.jpg文件
- 文件内容示例:
<?php phpinfo(); ?> - 文件扩展名保持为.jpg
- 文件内容示例:
3. 访问上传的文件
- 获取上传图片的链接,例如:
127.0.0.1/TWCMS/upload/article/202201/30/15132861f63a98cb20085eyPl.jpg - 注意去除链接中的
_thumb后缀(系统自动添加的缩略图标识) - 直接访问该.jpg文件,由于.htaccess的配置,它将被当作PHP文件解析执行
防御措施
- 对.htaccess文件内容进行严格过滤,禁止用户提交危险配置
- 限制上传文件的类型,不仅检查扩展名还要检查文件内容
- 将上传目录设置为不可执行PHP代码
- 使用白名单机制限制可修改的配置项
- 对用户输入的配置参数进行严格验证
总结
该漏洞利用了两个关键点:
- CMS允许用户修改.htaccess文件配置且无足够过滤
- 文件上传功能与恶意.htaccess配置结合导致上传绕过
通过这种攻击方式,攻击者可以在服务器上执行任意PHP代码,完全控制网站服务器。开发人员应重视配置管理功能的安全性,避免类似漏洞的出现。