渗透测试 | 一次某医疗系统实战
字数 1509 2025-08-10 08:28:04
医疗系统渗透测试实战教学文档
1. 概述
本文档详细记录了一次针对某医疗系统的渗透测试过程,涉及越权访问、SSRF漏洞利用、文件上传绕过、DLL劫持等多个技术点。整个过程展示了从信息收集到最终提权的完整攻击链。
2. 信息收集阶段
2.1 初始扫描
使用nmap进行基础扫描:
nmap -sC -sV -sT -T4 -Pn 10.10.11.238
参数说明:
-sC: 使用默认脚本扫描-sV: 探测服务版本-sT: TCP连接扫描-T4: 较快的扫描速度-Pn: 跳过主机发现,直接扫描
2.2 目录扫描
进行了常规的目录扫描,但未发现明显可利用点。
2.3 子域名发现
通过子域名收集发现:
- 主网站:病人挂号系统
- 子网站:医生登录系统
3. 漏洞挖掘与利用
3.1 越权访问漏洞
- 在主站注册并登录普通用户账号
- 分析HTTP请求,发现POST包中的关键参数:
POST /some_endpoint HTTP/1.1 Host: target.com ... Acctype=1 - 将
Acctype参数值从1(普通用户)修改为2(医生身份) - 服务器返回医生身份的响应
测试发现:虽然获得了医生身份,但在主站功能有限
3.2 Cookie复用攻击
- 在主站获取医生身份的cookie
- 直接访问子站(医生登录系统)
- 替换cookie为从主站获取的医生cookie
- 成功登录医生后台
工具推荐:使用Firefox浏览器的"Cookie-Editor"插件方便修改cookie
3.3 SSRF漏洞利用
在医生后台发现:
- "Issue Prescriptions"功能中存在URL输入表单
- 输入本机IP后,系统会读取并显示内容
利用方法:
- 构造恶意URL探测内网服务
- 尝试读取本地文件(如file://协议)
- 结合后续文件上传功能实现更深入利用
3.4 文件上传绕过
结合SSRF漏洞:
- 上传恶意文件(如webshell)
- 利用SSRF触发文件访问
- 通过文件上传位置获取webshell执行权限
常见绕过技巧:
- 修改Content-Type
- 添加垃圾数据绕过检测
- 使用双扩展名(.jpg.php)
- 大小写变异(.PhP)
4. 权限提升
4.1 逆向分析
获取系统shell后:
- 分析系统中关键的dll和exe文件
- 使用IDA Pro/Ghidra等工具逆向
- 寻找:
- 硬编码凭证
- 不安全的函数调用
- DLL加载逻辑缺陷
4.2 DLL劫持提权
实施步骤:
- 识别目标应用程序加载的DLL
- 查找应用程序搜索路径中可写目录
- 创建恶意DLL并放置在优先加载位置
- 确保DLL导出必要函数避免崩溃
- 触发应用程序执行,加载恶意DLL
关键技术点:
- 使用Process Monitor监控DLL加载
- 确保DLL兼容性(32/64位)
- 编写DLL时包含必要的导出函数
5. 防御建议
5.1 修复越权漏洞
- 实施严格的权限验证
- 避免前端控制权限级别
- 使用服务端会话管理
5.2 防止Cookie滥用
- 区分不同子系统的会话令牌
- 实施Cookie的HttpOnly和Secure标志
- 考虑使用SameSite属性
5.3 SSRF防护
- 限制URL访问协议(禁用file://等)
- 实施白名单域名策略
- 禁用不必要的URL处理功能
5.4 文件上传安全
- 实施文件内容检查
- 存储上传文件在非web可访问目录
- 重命名上传文件
- 限制可执行文件上传
5.5 防提权措施
- 限制应用程序加载DLL的路径
- 实施DLL签名验证
- 使用最新版开发框架避免DLL劫持漏洞
6. 总结
本次渗透测试展示了医疗系统中常见的安全问题链:
- 通过参数篡改实现垂直越权
- 利用会话令牌复用横向移动
- 结合SSRF和文件上传获取初始立足点
- 通过逆向分析和DLL劫持完成权限提升
医疗系统作为关键基础设施,应实施纵深防御策略,特别关注权限管理和输入验证。