从js泄露敏感信息到命令执行再到旁站sql注入
字数 1624 2025-11-21 12:14:34
从JS泄露敏感信息到命令执行再到旁站SQL注入 - 渗透测试实战教学
前言
在渗透测试过程中,登录框是常见的测试目标。当弱密码尝试无果后,许多测试者可能会直接放弃该目标。然而,前端JavaScript文件中可能隐藏着关键敏感信息,这些信息可能成为进一步渗透的突破口。本文通过一个完整的实战案例,展示如何从JS文件信息泄露逐步深入,最终获得系统权限并发现旁站漏洞。
资产搜集阶段
目标定位
使用FOFA搜索引擎进行目标发现,搜索语法:
title:"仿真实验"&&title="大学"
通过此语法可定位到特定类型的教育系统平台,这类平台往往存在较多的安全漏洞。
初始侦察
- 目标系统:某学校实验平台
- 主要界面:经典登录框,功能单一
- 初步测试:尝试常见弱密码组合(admin/admin、admin/123456等)
- 结果:弱密码已被修复,常规入口点被封锁
JS文件敏感信息挖掘
信息收集方法
- 打开浏览器开发者工具(F12)
- 切换到源代码(Sources)标签页
- 系统浏览所有加载的JS文件
- 使用关键词搜索:password、username、pass、pwd、key、secret等
实战发现
在检查JS文件时,直接发现硬编码的测试账号密码:
// 在某个JS文件中发现的代码片段
var defaultUsername = "expert_user";
var defaultPassword = "test123456";
验证利用
使用发现的凭据成功登录系统,获得"专家用户"权限,成功接管平台。
命令执行漏洞挖掘
功能分析
登录后,在平台功能中发现"自主编程"模块,该模块疑似直接调用服务器端的Python解释器。
漏洞验证
在编程界面尝试执行系统命令:
import os
os.system("whoami")
命令执行成功返回"root",确认存在命令执行漏洞。
利用扩展
进一步验证可执行更多系统命令,确认服务器权限级别。
旁站渗透与SQL注入
旁站发现
使用FOFA进行IP段扫描:
ip="目标网站IP"
发现同一IP下运行的其他系统。
漏洞识别
在新发现的旁站进行测试时,通过Burp Suite抓包发现:
- HTTP响应中包含详细的SQL错误信息
- 错误信息暴露数据库类型(如MySQL)
- 表明存在SQL注入漏洞的可能性极高
SQL注入利用
使用SQLMap进行自动化检测:
-
保存请求数据包到文本文件(如request.txt)
-
使用优化命令提高检测效率:
sqlmap -r request.txt --dbms=mysql --technique=E --batch
参数说明:
-r:从文件读取HTTP请求--dbms=mysql:指定数据库类型,避免盲目探测--technique=E:专注于报错注入技术--batch:使用默认选项,无需交互确认
- 成功提取信息:获取当前数据库用户信息,确认漏洞存在。
工具与技巧总结
JS信息收集工具推荐
FindSomething浏览器插件:
- 自动收集页面中的所有JS文件内容
- 支持关键词匹配和敏感信息识别
- 可发现接口端点、API密钥等敏感数据
- 提供更高效的JS文件审计能力
渗透测试最佳实践
- 全面信息收集:不局限于常规测试点,JS文件常被忽视但富含敏感信息
- 深入功能测试:对每个系统功能进行安全测试,特别是涉及代码执行的模块
- 关联资产发现:通过IP、域名等关联信息寻找旁站,扩大测试范围
- 自动化工具辅助:合理使用SQLMap等工具提高测试效率
安全防护建议
开发人员防护措施
- 前端安全:避免在JS文件中硬编码敏感信息,使用环境变量或安全配置
- 输入验证:对所有用户输入进行严格过滤,特别是命令执行和数据库查询接口
- 错误处理:生产环境关闭详细错误信息显示,避免信息泄露
- 权限控制:实施最小权限原则,避免使用root等高权限账户运行服务
安全运维建议
- 定期安全扫描:对Web应用进行定期的漏洞扫描和渗透测试
- 代码审计:建立代码审查机制,确保安全编码实践
- 网络隔离:对不同系统进行适当的网络隔离,降低旁站攻击风险
结论
本案例展示了渗透测试中常见的攻击链:从信息收集到漏洞利用,再到横向移动。通过系统性的测试方法,即使最初看似安全的系统也可能存在严重漏洞。安全团队应重视前端代码安全、输入验证和错误处理,而渗透测试人员则需要培养全面、细致的测试习惯,不放过任何可能的安全隐患。