记一次从代码审计到拿下内网edr的过程
字数 1271 2025-08-10 08:28:57
从代码审计到内网EDR攻防实战教学文档
0x01 前言
本教学文档详细记录了一次从外网代码审计到最终拿下内网EDR系统的完整过程。通过本案例,您将学习到如何从外网资产入手,通过源码审计获取初始权限,并进一步渗透内网关键安全系统的技术方法。
0x02 寻找源码到Getshell
查找源码阶段
-
目标分析:目标系统为通用系统,外网资产较少,常规渗透无果后转向源码审计
-
源码获取方法:
- 网盘泄露:尝试各种网盘泄露网站查找,未果
- 代码仓库泄露:在Github、Gitlab等平台尝试多个关键词搜索,无收获
- FOFA资产搜索:
- 使用favicon.ico或title特征搜索同类系统
- 采集相关资产进行批量检查
- 最终在某站点发现
web.rar文件,成功获取源码
代码审计阶段
-
目录结构分析:
- 首先检查
web.xml配置文件 - 重点关注
filter.PurFilter过滤器
- 首先检查
-
权限绕过分析:
// PurFilter中定义的允许访问的路径和后缀 String[] strPass = {"/login.jsp", "/login.do", "/logout.do", "/error.jsp"}; String[] strSuffix = {".jpg", ".png", ".gif", ".css", ".js", ".html"}; // URL处理逻辑 String url = request.getRequestURI(); int lastPoint = url.lastIndexOf("."); String suffix = url.substring(lastPoint).toLowerCase();漏洞原理:
- 使用
getRequestURI()获取URL,该方法会返回完整URI包括分号后的内容 - 可构造如
/test/1.jsp;1.jpg的URL绕过权限校验 - 分号后的
.jpg后缀使请求通过校验,而实际仍由1.jsp处理
- 使用
-
寻找上传点:
- 全局搜索
multipart关键词 - 发现一处未做充分校验的文件上传功能
- 全局搜索
获取权限阶段
-
利用上传漏洞:
- 构造特殊请求包上传Webshell
- 成功获取目标系统控制权限
-
初步信息收集:
- 执行
tasklist发现目标安装有某EDR终端防护系统
- 执行
0x03 拿下内网EDR
获取EDR系统权限
-
内网探测:
- 扫描C段443端口
- 发现EDR管理界面
https://172.x.x.x
-
建立代理通道:
- 使用frp建立内网代理
-
漏洞利用:
- 测试公开EDR漏洞
- 发现未修复的命令执行漏洞
- 利用公开脚本获取反弹shell
登录EDR管理界面
-
初始思路:
- 查找数据库凭据
- 检查进程发现使用MongoDB
find /ac -type f -name "*.php" | xargs grep "password" find /ac -type f -name "*.php" | xargs grep "mongodb_password"- 因解密困难放弃此路径
-
未授权登录漏洞利用:
- 定位漏洞文件
/ui/login.php - 备份原文件后修改认证逻辑:
// 原始代码 if($user == 'admin' && $pass == 'password') // 修改为 if(1==1) - 通过
/ui/login.php?user=admin直接登录管理界面
- 定位漏洞文件
-
后续操作:
- 添加白名单规避检测
- 批量下发后门程序
- 实现内网主机批量上线
0x04 技术总结
-
外网突破:
- 通过多种渠道获取外网系统源码
- 深入代码审计发现权限绕过和文件上传漏洞
-
内网横向:
- 利用历史未修复漏洞获取EDR系统权限
- 通过文件修改实现管理界面未授权登录
-
关键点:
getRequestURI()方法的安全隐患- 分号在URL解析中的特殊作用
- EDR系统管理界面的认证绕过
- 内网代理和扫描技术的应用
-
防御建议:
- 严格校验文件上传功能
- 避免使用
getRequestURI()进行安全判断 - 及时修复已知漏洞
- 对关键系统文件进行完整性监控
- 实施最小权限原则,避免过度信任内部系统
本案例展示了从外网到内网、从Web应用到安全系统的完整攻击链,强调了纵深防御和及时漏洞修复的重要性。