实战渗透 - 一个怎么够?我全都要!
字数 1308 2025-08-20 18:17:41
实战渗透教学:从备份文件扫描到Getshell
1. 信息收集与备份文件扫描
1.1 扫描策略
- 目标命名规则:
子域名.主域名.com - 扫描文件规则:
子域名.zip或子域名.rarabc.子域名.主域名.com对应abc.zip或abc.rar
- 使用工具:
- 自定义异步扫描工具(基于aiohttp, aiomysql)
- Kemoon师傅的snail2.0工具(针对.svn,.git,.rar,.zip泄露)
1.2 识别备份文件
通过响应头中的Content-Type判断:
- RAR文件:
application/octet-stream - ZIP文件:
application/x-zip-compressed
2. 源代码审计
2.1 系统架构分析
- 中间件: Tomcat
- 开发框架: Spring MVC
- 数据库: Oracle
- 默认凭证: System/****2020
2.2 安全控制分析
web.xml配置了登录过滤器- 除
/images/,/scripts/,/css/目录外,其他访问都会重定向到/login.jsp - 未发现敏感操作的Servlet地址
3. 认证绕过
3.1 默认凭证利用
- 使用FOFA搜索同系统站点
- 测试默认凭证
System/****2020 - 成功登录后获得系统管理员权限
3.2 SSO控制器漏洞
发现SSOcontroller中/CSS开头的路由地址存在认证问题:
@RequestMapping(method = {RequestMethod.GET}, value = {"/CSS/sso"})
public ModelAndView sso(HttpServletRequest request, HttpServletResponse response, String xxx) {
// 认证逻辑
}
认证流程分析:
- 检查Referer头:
String referer = request.getHeader("REFERER"); if (referer == null) { // 跳转错误页面 } - 检查非admin账户:
if ("admin".equals(xxx)) { // 跳转错误页面 } - 用户存在性检查:
User dbUser = this.userService.getUserByUserID(xxx); if (dbUser == null || dbUser.getLocked().intValue() == 1) { // 错误处理 } else { // 直接登录 mav = this.userLoginController.login(request, dbUser, "1"); }
利用方法:
- 构造请求头
Referer: 任意值 - 爆破有效用户名(非admin账户)
- 直接登录无需密码
4. 文件上传漏洞
4.1 漏洞代码分析
String type = matUrl.getOriginalFilename().substring(matUrl.getOriginalFilename().lastIndexOf("."));
String OriginalFilename = matUrl.getOriginalFilename().substring(0, matUrl.getOriginalFilename().lastIndexOf("."));
String saveName = System.currentTimeMillis() + type;
String saveName2 = OriginalFilename + type;
String contextPath = request.getSession().getServletContext().getRealPath("/upload");
File savefile = new File(contextPath + "/" + saveName);
// 文件保存逻辑...
漏洞点:
- 未对文件扩展名进行校验
- 直接拼接用户控制的文件名和扩展名
- 最终保存为时间戳+原始扩展名的形式
4.2 利用方法
- 构造上传表单:
<form action="漏洞URL" method="post" enctype="multipart/form-data"> <input type="file" name="Filedata"/> <input type="submit" value="提交"/> </form> - 上传JSP webshell:
<%String name = "yuanhai";%> <h1>hello<%=name%></h1> - 访问上传的文件(需携带有效会话Cookie)
5. 批量利用与评分
5.1 批量利用策略
- 使用FOFA搜索同系统站点(案例中发现79个站点)
- 自动化测试SSO认证漏洞
- 自动化上传webshell
5.2 评分计算
- 每个站点提交可获得3-6分
- 79个站点总计可获得246分(教育SRC平台)
6. 防御建议
6.1 针对备份文件泄露
- 禁止在web目录存放源代码压缩包
- 使用.gitignore等机制排除敏感文件
- 定期检查web目录文件权限
6.2 针对认证漏洞
- 禁用或修改所有默认凭证
- 实现强密码策略
- 对SSO接口增加二次验证
6.3 针对文件上传漏洞
- 实施严格的白名单校验
- 对上传文件重命名(不使用用户输入)
- 限制上传目录的执行权限
- 对上传内容进行安全检查
7. 工具与资源
- 自定义备份文件扫描工具(即将开源)
- snail2.0信息泄露扫描工具:https://github.com/lakemoon602/snail2.0
- FOFA搜索引擎:https://fofa.info/
- 教育SRC平台:https://src.sjtu.edu.cn/