本书从内网渗透测试红队的角度,由浅入深,全面、系统地讨论了常见的内网攻击手段和相应的防御方法,力求语言通俗易懂、示例简单明了,以便读者领会。同时,本书结合具体案例进行讲解,可以让读者身临其境,快速了解和掌握主流的内网渗透测试技巧。阅读本书不要求读者具备渗透测试的相关背景知识。如果读者有相关经验,会对理解本书内容有一定帮助。本书可作为大专院校网络安全专业的教材。
徐焱,北京交通大学安全研究员,MS08067安全实验室创始人,多年来一直从事网络安全培训领域工作。已出版《Web安全攻防:渗透测试实战指南》《内网安全攻防:渗透测试实战指南》《Python安全攻防:渗透测试实战指南》《JAVA代码审计(入门篇)》等书籍。
第1章 内网渗透测试基础 1
1.1 内网基础知识 1
1.1.1 域 1
1.1.2 LDAP 4
1.1.3 活动目录 5
1.1.4 域控制器和活动目录的区别 5
1.1.5 域内权限 6
1.2 企业内网架构 9
1.2.1 企业内网概述 9
1.2.2 内网基础设施 10
1.2.3 云服务 12
1.3 常规攻击路径分析 13
1.3.1 网络区域环境分析 13
1.3.2 内网常规攻击路径分析 14
1.4 常用工具 16
1.4.1 Cobalt Strike 16
1.4.2 Windows PowerShell 18
1.4.3 PowerShell Empire 24
1.5 常用防御方法 26
1.5.1 常用网络安全防御技术 26
1.5.2 常用网络安全防御产品 27
第2章 内网信息收集 29
2.1 枚举发现 29
2.2 主机发现与端口枚举 29
2.2.1 Nmap主机发现 29
2.2.2 Nmap端口枚举 30
2.3 账户发现方法分析 32
2.3.1 本地账户发现分析 32
2.3.2 域账户发现分析 34
2.3.3 邮件账户发现分析 35
2.3.4 云账户发现分析 37
2.3.5 账户发现的防御方法 38
2.4 COM对象枚举方法分析 39
2.4.1 COM对象简介 39
2.4.2 创建COM对象 39
2.4.3 枚举COM对象 43
2.4.4 COM对象枚举系统信息 46
2.5 域信息收集方法分析 47
2.5.1 Nmap的NSE脚本 47
2.5.2 利用PowerView收集域信息 48
2.6 域控制器信息收集方法分析 50
2.6.1 从个人计算机定位域控制器 50
2.6.2 基于NetBIOS收集域控制器信息 51
2.6.3 基于LDAP收集域控制器信息 53
2.7 内网敏感数据发现方法分析 57
2.7.1 定位内网资料、数据、文件 57
2.7.2 获取人事组织结构信息 57
2.7.3 枚举核心业务机器及敏感信息 59
2.7.4 快速定位相关人员使用的计算机 59
2.7.5 获取个人计算机操作系统相关信息 62
2.7.6 获取个人计算机网络配置相关信息 64
2.7.7 获取远程管理软件保存的凭据 66
2.7.8 获取个人计算机浏览器敏感信息 75
2.7.9 收集应用与文件形式的信息 78
2.7.10 破解密码保护文件 80
2.7.11 发现内网邮件账户 85
2.7.12 内网敏感信息的防护方法 85
第3章 隐藏通信隧道技术 87
3.1 快速寻找可用于构建出网通信隧道的计算机 87
3.1.1 可用于构建出网通信隧道的协议 87
3.1.2 可用于构建出网通信隧道的计算机 91
3.1.3 批量探测可以出网的计算机 92
3.2 常用隧道穿透技术分析 92
3.2.1 Netsh 93
3.2.2 frp 94
3.2.3 利用CertUtil下载 96
3.3 多级跳板技术分析 97
3.3.1 攻击者直连内网的后果 97
3.3.2 多级跳板技术 98
3.3.3 三级跳板技术 98
3.4 通信隧道非法使用的防范 99
第4章 权限提升漏洞分析及防御 101
4.1 Linux权限提升漏洞分析及防范 101
4.1.1 内核漏洞提权分析 102
4.1.2 使用linux-exploit-suggester排查内核漏洞 102
4.1.3 sudo提权漏洞分析 104
4.1.4 SUID提权漏洞分析 104
4.1.5 GTFOBins与权限提升 106
4.1.6 Linux权限提升漏洞的防范建议 107
4.2 利用MS14-068漏洞实现权限提升及防范 107
4.2.1 MS14-068漏洞说明 108
4.2.2 MS14-068漏洞利用条件 108
4.2.3 MS14-068漏洞利用方式 108
4.2.4 MS14-068漏洞的防范建议 111
4.3 GPP权限提升漏洞分析及防范 111
4.3.1 GPP基础知识 111
4.3.2 GPP提权技术思路 115
4.3.3 GPP权限提升漏洞的防范建议 116
4.4 绕过UAC提权漏洞分析及防范 117
4.4.1 UAC简介 117
4.4.2 使用白名单程序绕过UAC 118
4.4.3 使用COM组件绕过UAC 120
4.4.4 UACME的使用 121
4.4.5 绕过UAC提权漏洞的防范建议 121
4.5 令牌窃取提权漏洞分析及防范 122
4.5.1 令牌窃取模块 122
4.5.2 pipePotato本地提权分析 123
4.5.3 令牌窃取提权漏洞的防范建议 124
4.6 SQL Server数据库提权分析及防范 124
4.6.1 SQL Server数据库的提权的相关概念 124
4.6.2 SQL Server提权分析 125
4.6.3 域环境中的MSSQL枚举 127
4.6.4 域环境中的MSSQL认证 128
4.6.5 UNC路径注入分析 129
4.6.6 哈希转发分析 133
4.6.7 利用MSSQL模拟提权分析 135
4.6.8 利用Linked SQL Server提权分析 140
4.6.9 SQL Server数据库提权漏洞的防范建议 146
4.7 DLL劫持提权分析及防范 146
4.7.1 DLL劫持原理 147
4.7.2 编写测试DLL程序 147
4.7.3 手动挖掘DLL劫持漏洞 149
4.7.4 使用DLLHSC自动挖掘DLL劫持漏洞 150
4.7.5 DLL劫持漏洞的防范建议 151
第5章 域内横向移动分析及防御 153
5.1 Windows本地认证明文密码和散列值的获取 153
5.1.1 Windows本地密码认证流程 153
5.1.2 通过转储lsass.exe获取登录密码 154
5.1.3 通过SAM文件获取用户名和密码散列值 159
5.1.4 破解密码散列值 163
5.2 利用明文密码远程登录其他域的主机 170
5.2.1 IPC远程登录概述 170
5.2.2 使用Windows自带的命令获取远程主机的信息 172
5.2.3 使用计划任务 173
5.3 通过哈希传递攻击进行横向移动 175
5.3.1 哈希传递攻击概述 175
5.3.2 通过哈希传递攻击进行横向移动 175
5.3.3 哈希传递攻击实验 176
5.3.4 哈希传递攻击的防范 178
5.4 在远程计算机上执行程序 179
5.4.1 实验环境 179
5.4.2 使用at命令 181
5.4.3 使用schtasks命令 181
5.4.4 使用PsExec 182
5.4.5 使用wmiexec.vbs 182
5.4.6 使用DCOM 183
5.5 在远程计算机上运行代码 185
5.5.1 基于CMSTP运行代码 185
5.5.2 基于Compiler运行代码 188
5.5.3 基于Control运行代码 191
5.5.4 基于csc运行代码 193
5.5.5 基于资源管理器运行代码 196
5.5.6 基于Forfiles运行代码 197
5.5.7 基于MSBuild运行代码 198
5.5.8 运行恶意代码的检测与防范方法 200
5.6 票据传递攻击 201
5.6.1 通过MS14-068漏洞进行横向移动 201
5.6.2 使用黄金票据 202
5.6.3 使用白银票据 204
5.7 利用系统漏洞进行横向移动 206
5.7.1 MS17-010漏洞 206
5.7.2 CVE-2020-17144漏洞 211
5.8 域内横向移动攻击防范建议 215
5.8.1 通用安全措施 216
5.8.2 防止密码被窃取 217
5.8.3 内网安全流量检测 218
第6章 域控制器安全 220
6.1 域控制器渗透测试流程 220
6.1.1 实验环境 220
6.1.2 实验网络及设备部署和配置 221
6.1.3 内网相关知识梳理 223
6.1.4 渗透测试思路 223
6.2 ZeroLogon漏洞分析 228
6.2.1 ZeroLogon漏洞概述 228
6.2.2 实验环境 229
6.2.3 ZeroLogon漏洞利用过程分析 229
6.2.4 ZeroLogon漏洞防范建议 232
6.3 获取域内用户名和密码散列值 233
6.3.1 提取ntds.dit文件并导出用户名和密码散列值 233
6.3.2 利用DCSync获取域内所有用户的密码散列值 239
6.4 域控制器安全防范建议 240
6.4.1 物理环境安全 241
6.4.2 通信网络安全 242
6.4.3 主机设备安全 244
6.4.4 应用数据安全 247
第7章 跨域攻击分析及防御 249
7.1 跨森林攻击 249
7.1.1 森林信任概述 249
7.1.2 跨森林枚举 250
7.1.3 利用Extra SID进入其他森林 253
7.1.4 利用Linked SQL Server进入其他森林 257
7.1.5 跨森林Kerberoast攻击 261
7.1.6 利用外部安全主体 262
7.1.7 利用ACL 263
7.2 单个森林漏洞利用 265
7.2.1 PetitPotam利用 266
7.2.2 ProxyNotShell利用 269
7.2.3 NotProxyShell利用 271
7.3 单个森林权限滥用 273
7.3.1 Backup Operators组滥用 273
7.3.2 LAPS滥用 275
7.3.3 域共享权限滥用 277
7.3.4 Exchange权限滥用 279
7.3.5 组策略对象权限滥用 282
7.4 跨域攻击的防范 284
第8章 权限维持分析及防御 286
8.1 启动项、系统服务后门分析及防范 286
8.1.1 注册表启动项后门分析 286
8.1.2 隐藏计划任务 287
8.1.3 粘滞键后门分析 291
8.1.4 bitsadmin后门分析 292
8.1.5 映像劫持后门分析 293
8.1.6 PowerShell Profile 294
8.1.7 隐藏服务 297
8.1.8 登录脚本 300
8.2 利用黄金票据或白银票据实现权限维持及其防范 302
8.2.1 Kerberos认证协议原理概述 302
8.2.2 黄金票据 303
8.2.3 白银票据 308
8.3 利用活动目录证书服务实现权限维持及其防范 312
8.4 利用密码转储实现权限维持及其防范 317
8.4.1 浏览器密码转储分析 317
8.4.2 剪贴板记录提取与键盘记录获取分析 319
8.4.3 Linux凭据转储分析 322
8.4.4 Windows密码转储分析 323
8.4.5 NirSoft密码转储平台 325
8.5 常用Nishang脚本后门分析及防范 329
8.5.1 常用Nishang脚本 329
8.5.2 Nishang脚本后门防范 330
8.6 Linux权限维持分析及防范 331
8.6.1 通过SSH免密登录实现权限维持 331
8.6.2 crontab计划任务 333
8.6.3 软链接权限维持分析 333
8.6.4 systemd服务后门分析 334
8.6.5 Linux rootkit 335
8.7 使用VC++开发后门程序 340
8.7.1 通过Socket编程实现控制端和被控制端的网络连接 341
8.7.2 反弹端口的技术原理及编程实现 343
8.7.3 利用注册表键Run实现自启动 345
8.7.4 后门自删除的技术实现 347
8.7.5 关机和重启功能的技术实现 348
8.8 防御规避和反防御规避 349
8.8.1 访问令牌操作 349
8.8.2 混淆文件或信息 350
8.8.3 反防御规避技术 350