某移动平台代码审计
字数 1418 2025-08-06 08:35:00

某移动平台代码审计教学文档

系统概述

该文档基于一次地市级HVV行动中发现的某移动平台系统进行代码审计分析。系统采用.NET框架开发,通过黑盒+白盒结合的方式进行审计。审计发现了多处安全漏洞,包括SQL注入、逻辑漏洞和文件上传漏洞等。

前台SQL注入漏洞1

漏洞发现过程

  1. 黑盒测试发现用户表单最多只能输入4个字符
  2. 通过Burp Suite捕获数据包,发现/Home/UserDepartment?username=8888请求
  3. 暴力破解4位数字用户名,发现有效用户名

漏洞代码分析

漏洞位于Controllers\HomeController.cs中的UserDepartment方法:

[HttpGet]
public ActionResult UserDepartment(string username)
{
    return Json(Account.UserDepartment(username), JsonRequestBehavior.AllowGet);
}

跟进Account.UserDepartment()方法:

public static List<X_keshi> UserDepartment(string username)
{
    User user = new User();
    return user.GetUserKeShi(username);
}

继续跟进user.GetUserKeShi()方法:

public List<X_keshi> GetUserKeShi(string userid)
{
    Msg msg = new Msg();
    string sql = "select a.* from x_keshi a,x_yonghukeshi b where a.id=b.keshiid and b.yonghuid='" + userid + "'";
    MobileDataEntityDAL<X_keshi> mobileDataEntityDAL = new MobileDataEntityDAL<X_keshi>();
    DataSet dataSet = DBHelper.SqlHelper(MobileDataBaseLink.Mobile, sql, msg, CommandType.Text);
    List<X_keshi> list = new List<X_keshi>();
    // ...
}

漏洞原理

  1. 用户输入username未经过任何过滤直接拼接到SQL语句中
  2. 使用字符串拼接方式构造SQL查询
  3. 数据库为Oracle

漏洞验证

  1. 构造延时注入:/Home/UserDepartment?username=8888' AND 1=DBMS_PIPE.RECEIVE_MESSAGE('RDS',5)--
  2. 使用Sqlmap可直接利用

前台SQL注入漏洞2

漏洞发现过程

  1. 通过全局搜索GetUserKeShi()方法发现另一处调用
  2. 位于Controllers\HomeController.cs中的UserModules方法

漏洞利用

  1. 直接访问:/home/UserModules?username=注入payload

逻辑漏洞(硬编码密码)

漏洞发现过程

  1. 跟踪login()方法调用链
  2. 最终在ValidateUser()方法中发现硬编码密码

漏洞代码分析

public Msg ValidateUser(string userid, string password)
{
    Msg msg = new Msg();
    // ...
    // 发现密码直接硬编码在代码中
    if (password == "硬编码的密码值")
    {
        msg.Result = true;
    }
    // ...
}

漏洞利用

  1. 使用前期收集到的账号(4位数字用户名)
  2. 直接使用硬编码密码登录
  3. 无验证码限制,可暴力破解

后台文件上传漏洞(5处)

漏洞发现方法

  1. 全局搜索SaveAs()函数
  2. 发现5处上传点

漏洞代码分析(以ArtConfigController为例)

位于\Areas\BackStage\Controllers\ArtConfigController.cs中的UploadImage()方法:

public ActionResult UploadImage(string name)
{
    // 检查路径是否存在,不存在则创建
    if (!Directory.Exists(path))
    {
        Directory.CreateDirectory(path);
    }
    
    // 检查是否有文件上传
    if (base.Request.Files.Count > 0)
    {
        // 获取上传的文件
        HttpPostedFileBase httpPostedFileBase = base.Request.Files[0];
        Image img = Image.FromStream(httpPostedFileBase.InputStream);
        
        // 生成缩略图
        Image thumbnail = ImageConvert.MakeThumbnail(img, 800, 800);
        
        // 使用用户提供的文件名或生成GUID作为文件名
        string fileName = string.IsNullOrEmpty(name) ? 
            Guid.NewGuid().ToString() + Path.GetExtension(httpPostedFileBase.FileName) : 
            name;
            
        // 保存文件
        thumbnail.Save(Path.Combine(path, fileName));
        
        return Json(fileName, JsonRequestBehavior.AllowGet);
    }
    // ...
}

漏洞原理

  1. 未对上传文件类型进行过滤
  2. 允许用户自定义文件名
  3. 未检查文件内容是否为有效图片
  4. 直接保存用户上传的文件

漏洞利用

  1. 访问后台文件上传功能
  2. 直接上传WebShell等恶意文件
  3. 结合前台注入和逻辑漏洞获取后台权限

组合攻击思路

  1. 利用前台SQL注入收集管理员账号
  2. 使用硬编码密码登录后台
  3. 利用后台文件上传漏洞获取WebShell
  4. 进一步渗透内网

防御建议

针对SQL注入

  1. 使用参数化查询或ORM框架
  2. 对用户输入进行严格过滤和转义
  3. 最小权限原则,限制数据库账户权限

针对逻辑漏洞

  1. 避免硬编码敏感信息
  2. 实现强密码策略
  3. 添加验证码等防暴力破解机制

针对文件上传

  1. 检查文件类型和内容
  2. 限制上传文件扩展名
  3. 重命名上传文件
  4. 将上传文件存储在非Web目录
  5. 设置适当的文件权限

总结

该移动平台系统存在多处高危漏洞,主要原因是:

  1. 未对用户输入进行有效过滤
  2. 使用不安全的编码实践(如SQL拼接)
  3. 缺乏基本的安全防护措施
  4. 敏感信息硬编码

通过组合利用这些漏洞,攻击者可完全控制该系统。开发人员应重视安全编码实践,定期进行代码审计和安全测试。

某移动平台代码审计教学文档 系统概述 该文档基于一次地市级HVV行动中发现的某移动平台系统进行代码审计分析。系统采用.NET框架开发,通过黑盒+白盒结合的方式进行审计。审计发现了多处安全漏洞,包括SQL注入、逻辑漏洞和文件上传漏洞等。 前台SQL注入漏洞1 漏洞发现过程 黑盒测试发现用户表单最多只能输入4个字符 通过Burp Suite捕获数据包,发现 /Home/UserDepartment?username=8888 请求 暴力破解4位数字用户名,发现有效用户名 漏洞代码分析 漏洞位于 Controllers\HomeController.cs 中的 UserDepartment 方法: 跟进 Account.UserDepartment() 方法: 继续跟进 user.GetUserKeShi() 方法: 漏洞原理 用户输入 username 未经过任何过滤直接拼接到SQL语句中 使用字符串拼接方式构造SQL查询 数据库为Oracle 漏洞验证 构造延时注入: /Home/UserDepartment?username=8888' AND 1=DBMS_PIPE.RECEIVE_MESSAGE('RDS',5)-- 使用Sqlmap可直接利用 前台SQL注入漏洞2 漏洞发现过程 通过全局搜索 GetUserKeShi() 方法发现另一处调用 位于 Controllers\HomeController.cs 中的 UserModules 方法 漏洞利用 直接访问: /home/UserModules?username=注入payload 逻辑漏洞(硬编码密码) 漏洞发现过程 跟踪 login() 方法调用链 最终在 ValidateUser() 方法中发现硬编码密码 漏洞代码分析 漏洞利用 使用前期收集到的账号(4位数字用户名) 直接使用硬编码密码登录 无验证码限制,可暴力破解 后台文件上传漏洞(5处) 漏洞发现方法 全局搜索 SaveAs() 函数 发现5处上传点 漏洞代码分析(以ArtConfigController为例) 位于 \Areas\BackStage\Controllers\ArtConfigController.cs 中的 UploadImage() 方法: 漏洞原理 未对上传文件类型进行过滤 允许用户自定义文件名 未检查文件内容是否为有效图片 直接保存用户上传的文件 漏洞利用 访问后台文件上传功能 直接上传WebShell等恶意文件 结合前台注入和逻辑漏洞获取后台权限 组合攻击思路 利用前台SQL注入收集管理员账号 使用硬编码密码登录后台 利用后台文件上传漏洞获取WebShell 进一步渗透内网 防御建议 针对SQL注入 使用参数化查询或ORM框架 对用户输入进行严格过滤和转义 最小权限原则,限制数据库账户权限 针对逻辑漏洞 避免硬编码敏感信息 实现强密码策略 添加验证码等防暴力破解机制 针对文件上传 检查文件类型和内容 限制上传文件扩展名 重命名上传文件 将上传文件存储在非Web目录 设置适当的文件权限 总结 该移动平台系统存在多处高危漏洞,主要原因是: 未对用户输入进行有效过滤 使用不安全的编码实践(如SQL拼接) 缺乏基本的安全防护措施 敏感信息硬编码 通过组合利用这些漏洞,攻击者可完全控制该系统。开发人员应重视安全编码实践,定期进行代码审计和安全测试。