一次艰难的审计
字数 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配置

  1. 进入后台"基本设置"
  2. 找到"所在目录"设置项(webdir)
  3. 修改配置为恶意.htaccess内容:
    </IfModule><FilesMatch "jpg">SetHandler application/x-httpd-php</FilesMatch><IfModule mod_rewrite.c>
    
  4. 保存设置,生成新的.htaccess文件

2. 上传恶意文件

  1. 进入"我的-发布文章"
  2. 使用"上传缩略图"功能上传一个内容为PHP代码的.jpg文件
    • 文件内容示例:<?php phpinfo(); ?>
    • 文件扩展名保持为.jpg

3. 访问上传的文件

  1. 获取上传图片的链接,例如:
    127.0.0.1/TWCMS/upload/article/202201/30/15132861f63a98cb20085eyPl.jpg
    
  2. 注意去除链接中的_thumb后缀(系统自动添加的缩略图标识)
  3. 直接访问该.jpg文件,由于.htaccess的配置,它将被当作PHP文件解析执行

防御措施

  1. 对.htaccess文件内容进行严格过滤,禁止用户提交危险配置
  2. 限制上传文件的类型,不仅检查扩展名还要检查文件内容
  3. 将上传目录设置为不可执行PHP代码
  4. 使用白名单机制限制可修改的配置项
  5. 对用户输入的配置参数进行严格验证

总结

该漏洞利用了两个关键点:

  1. CMS允许用户修改.htaccess文件配置且无足够过滤
  2. 文件上传功能与恶意.htaccess配置结合导致上传绕过

通过这种攻击方式,攻击者可以在服务器上执行任意PHP代码,完全控制网站服务器。开发人员应重视配置管理功能的安全性,避免类似漏洞的出现。

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