《网络渗透测试的艺术》对典型内部网络渗透测试(Internal Network Penetration Test,INPT)进行了完整介绍。本书循序渐进地介绍了进行网络渗透测试的方法,作者曾用这个方法为各种规模的公司进行了数百次INPT。这本书并不是理论和思想的概念介绍,而更像是一本手册,可以指导经验很少或没有经验的读者来完成整个INPT工作。
谁应该读这本书
本书主要为潜在的渗透测试人员及相关技术人员,即从事网络系统、应用程序和基础设施的设计、开发或实现工作的人员而编写。
本书的结构框架:内容导读
本书共分为四个阶段,每一阶段都与进行典型INPT 四个阶段中的一个阶段相关联。本书应按照顺序进行阅读,因为INPT 工作流的每个阶段都建立在前一阶段输出的基础上。
第1阶段解释INPT 的信息收集,该阶段会让你详细理解目标的攻击面:
第2章介绍发现指定IP地址范围内网络主机的过程。
第3章说明如何进一步列举在前一章中发现的主机上监听的网络服务。
第4章涵盖在网络服务中识别身份验证、配置和修补漏洞的几种技术。
第2阶段为集中渗透阶段,你的目标是通过使用前一阶段识别的安全弱点或漏洞,获得对受破坏的目标未经授权的访问:
第5章展示如何攻击多个易受攻击的 Web应用程序,特别是Jenkins和 ApacheTomcat。
第6章描述如何攻击和渗透易受攻击的数据库服务器,并从非交互式 Shell中检索敏感文件。
第7章探索如何利用 Microsoft安全更新的缺失和使用开源的 Metasploit meter- preter攻击载荷。
第3阶段是后漏洞利用和权限提升阶段,这是攻击者在攻击易受攻击的目标后需要做的事情。本阶段介绍三个主要概念维护可靠的重新访问权、获取凭证以及横向移动到近可访问的(二级)系统:
第8章涵盖基于 Windows系统的后漏洞利用。
第9章讨论针对 Linux/UNIX目标的各种后漏洞利用技术。
第10章介绍提升域管理员权限的过程和从 Windows域控制器中安全提取王冠的过程。
第4阶段包括INPT 的清理和文档部分:
第11章展示如何返回并从任务测试活动中删除不必要的、潜在有害的工件。
第12章讨论对于渗透测试,一个稳定的可交付成果是由哪8个部分组成的。
有经验的渗透测试人员可能更喜欢跳转到他们感兴趣的特定部分进行阅读,例如Linux/UNIX后渗透测试或攻击易受攻击的数据库服务器。但是,如果你是网络渗透测试新手,则更应从头到尾依次阅读这些章节。
关于代码
本书包含大量的命令行输出,包括编号清单和正常文本。在这两种情况下,源代码都采用固定宽度字体格式,以将其与普通文本分开。
本书示例代码可从 Manning网站https://www.manning.com/books/the-art-of-network-penetration-testing下 载,也 可 从 GitHub网站https://github.com/R3dy/capsulecorp-pentest下载。
livebook论坛
购买《网络渗透测试的艺术》这本书后,可以免费访问 Manning出版物运营的私人网络论坛,在论坛里你可以对该书发表评论、询问技术问题并从作者和其他用户那里获得帮 助。论 坛 网 址:https://livebook.manning.com/#!/book/the-art-of-network-penetration-testing/discussion;也可以在https://livebook.manning.com/#!/dis-cussion上了解更多关于 Manning论坛和行为准则的信息。
我叫 Royce Davis,是一名职业黑客、红方人员、渗透测试人员、进攻安全员我们在这个行业有很多名称。在过去的十几年里,我一直在为各行各业的客户提供专业的对抗模拟服务,这些客户几乎遍及你能够想到的任何一个行业。在这段时间内,我一直非常清楚哪些服务公司对雇用专业黑客管理公司感兴趣。当然,我所说的服务是指内部网络渗透测试(Internal Network Penetration Test,INPT)。
INPT 是一项复杂的企业工作,用几句话概括来说,就是攻击者通过使用大量非常可信的技术设法获得进入公司办公室的物理入口,不过这些技术并不在本书讨论的范围之内。攻击是如何进行的呢? 攻击者只配备了一台装有黑客工具的笔记本电脑,而且对公司的网络基础设施一无所知,因此他需要尽可能地渗透到公司的企业环境中。攻击的目标因工作与公司的不同而有所不同。不过,通常情况下,攻击者获得对网络完全控制的全局控制场景大多是进行INPT 的主要目标。在我的职业生涯中,我为数百家公司做过数百次这样的工作,这些公司包括只有一个IT 人员的小型企业,也包括在各大洲都设有办事处的《财富》十强企业集团。
在工作中,让我惊讶的是,无论这家公司规模或行业类别如何,从内部接管公司网络都是一个非常简单的过程。不管目标是南达科他州的银行、加利福尼亚州的电子游戏公司、新加坡的化工厂,还是伦敦的客户服务中心,所有网络配置的方法大多有相似之处。虽然,各个组织之间的个人技术、硬件和应用程序完全不同,但是应用案例相同。
企业员工使用设备访问集中式服务器,这些服务器承载着内部文档和应用程序,员工使用凭证处理请求、交易、票据和信息等工作,终帮助运营公司并为公司赚取利润。作为攻击者,无论我的目标是什么,是识别网络主机、列举网络主机的监听服务(它们的攻击面),还是发现在这些系统的身份验证、配置和补丁机制中的安全漏洞,我使用的方法都不会随着工作内容的改变而改变。
经历多年的INPT 工作之后,我决定记录下执行INPT 的方法,并提供一整套可操作的指导方针,让那些刚刚接触渗透测试的人可以循序渐进地进行适当的渗透测试。我个人认为,这样的资料市面上还没有,或者至少在我写这本书的时候还不存在。
现在有许多专业培训机构和认证项目可以为学生提供各种各样有价值的INPT 技巧。我曾经雇用、培训过许多这样的学生,但即使经历严格、权威的培训,许多学生仍然不知道如何进行渗透测试。也就是说,我不能对他们说:好,下星期一你可以去为客户工作了,这是工作要求。因为我如果这样做了,学生们就只会呆呆地看着我。
这本书给你的承诺很简单:如果有人给你任务,需要你针对具有成百上千计算机网络渗透测试的艺术系统的真实网络执行渗透测试,而工作范围多少都与典型INPT 的事例(后边会讲)一致,那么,即使你从未做过渗透测试,按照本书展示的步骤,也能够完成任务的需求。
如果你是一名黑客,读本书纯粹是出于对这个主题的兴趣,那么肯定会问这样的问题:无线攻击怎么办?你怎么不介绍反病毒旁路?缓冲区、溢出区在哪里?等问题。然而,我想告诉你的是,在对抗模拟服务的专业领域中,公司雇用个人来执行任务时,这种听起来让人兴奋的、无约束限制的方法很少会被使用。
这是一本从开始到结束完整指导进行INPT 的手册。在这本书中,包含了所有职业渗透测试领域中常见的任务类型。
当你读完本书并完成实验练习后,将会拥有一项技能很多公司为具有该技能的初级员工支付六位数的薪水。我个人认为,这一领域的其他主题涵盖的范围太广,所以每个主题只能用一章来描述。在本书中,你将高度专注于单一的任务:接管企业网络。我希望你已经准备好,因为你将学到很多东西。我认为,当你读到后一章末尾时,你会惊讶于自己的能力。祝好运!
Royce Davis
ROYCE DAVIS是一名专业的网络安全专家,专门从事网络渗透测试和企业对抗性攻击仿真。十多年来,他一直在帮助客户保护他们的网络工作环境,并在美国各地的安全会议上介绍了研究、技术和工具。他为开源安全测试工具和框架做出了许多贡献,同时是一个道德黑客培训和教育在线资源网站PentestGeek的联合创始人。
第1章 网络渗透测试 1
1.1 企业数据泄露 2
1.2 黑客如何侵入2
1.2.1 防御者角色 2
1.2.2 攻击者角色 3
1.3 对抗攻击模拟:渗透测试 3
1.4 何时渗透测试无效 5
1.4.1 容易实现的目标 5
1.4.2 公司什么时候真正需要渗透测试 6
1.5 执行网络渗透测试 6
1.5.1 第1阶段:信息收集 7
1.5.2 第2阶段:集中渗透 8
1.5.3 第3阶段:漏洞利用和权限提升9
1.5.4 第4阶段:文档 10
1.6 设置实验室环境 11
1.7 构建自己的虚拟渗透测试平台11
1.7.1 从 Linux开始 11
1.7.2 Ubuntu项目 12
1.7.3 为什么不使用渗透测试发行版 12
1.8 总 结 13
第1阶段 信息收集
第2章 发现网络主机 17
2.1 了解工作范围 19
2.1.1 黑盒、白盒和灰盒测试范围 19
2.1.2 Capsulecorp 20
2.1.3 设置 CapsulecorpPentest环境21
2.2 互联网控制消息协议 21
2.2.1 使用ping命令 22
2.2.2 使用bashpingsweep扫描网络范围 24
2.2.3 使用ping命令的限制 26
2.3 使用 Nmap发现主机 26
2.3.1 主要输出格式 28
2.3.2 使用远程管理接口端口29
2.3.3 提高 Nmap扫描性能 31
2.4 其他主机发现方法 32
2.4.1 DNS暴力破解 32
2.4.2 数据包捕获和分析33
2.4.3 寻找子网 33
2.5 总 结 35
第3章 发现网络服务 36
3.1 从攻击者的角度了解网络服务 36
3.1.1 了解网络服务通信 38
3.1.2 识别监听网络服务 39
3.1.3 网络服务横幅 39
3.2 使用 Nmap端口扫描 40
3.2.1 常用端口 41
3.2.2 扫描所有的65536个TCP端口 44
3.2.3 对 NSE脚本输出进行分类 45
3.3 用 Ruby解析 XML输出 49
3.4 总 结 56
第4章 发现网络漏洞 57
4.1 了解漏洞发现 58
4.2 发现补丁漏洞 59
4.3 发现身份验证漏洞 62
4.3.1 创建一个客户专用的密码列表 63
4.3.2 暴力破解本地 Windows账户密码 65
4.3.3 暴力破解 MSSQL和 MySQL数据库密码 67
4.3.4 暴力破解 VNC密码 70
4.4 发现配置漏洞 72
4.4.1 设置 Webshot 73
4.4.2 分析 Webshot的输出 74
4.4.3 手动猜测 Web服务器密码 76
4.4.4 准备集中渗透 78
4.5 总 结 78
第2阶段 集中渗透
第5章 攻击易受攻击的 Web服务 81
5.1 理解第2阶段:集中渗透 82
5.1.1 部署后门 WebShell 82
5.1.2 访问远程管理服务 83
5.1.3 利用缺少的软件补丁 83
5.2 获得一个初步立足点 83
5.3 破坏一个易受攻击的 Tomcat服务器 84
5.3.1 创建一个恶意的 WAR文件 85
5.3.2 部署 WAR文件 86
5.3.3 从浏览器访问 WebShell 87
5.4 交互式Shell与非交互式Shell的对比88
5.5 提升到交互式Shell 89
5.5.1 备份sethc.exe 90
5.5.2 使用cacls.exe修改文件ACL 91
5.5.3 通过 RDP启动粘滞键 92
5.6 破坏易受攻击的Jenkins服务器 93
5.7 总 结 95
第6章 攻击易受攻击的数据库服务 96
6.1 破坏 Microsoft SQL服务器 96
6.1.1 MSSQL存储过程 98
6.1.2 使用 Metasploit枚举 MSSQL服务器 98
6.1.3 启用xp_cmdshell 100
6.1.4 使用xp_cmdshell运行操作系统命令 102
6.2 窃取 Windows账户哈希密码104
6.2.1 使用reg.exe复制注册表hive105
6.2.2 下载注册表 hive副本 107
6.3 使用creddump提取哈希密码 109
6.4 总 结 111
第7章 攻击未打补丁的服务 112
7.1 理解软件漏洞利用 113
7.2 理解典型的漏洞利用生命周期 113
7.3 使用 Metasploit破坏 MS17-010 114
7.3.1 验证缺少补丁 115
7.3.2 使用 ms17_010_psexecexploit模块 117
7.4 MeterpreterShell负载 118
7.5 关于公共漏洞利用数据库的注意事项 124
7.6 总 结 126
第3阶段 后漏洞利用和权限提升
第8章 Windows后漏洞利用 129
8.1 基本的后漏洞利用目标 129
8.1.1 维护可靠的重新访问权 130
8.1.2 获取凭证 130
8.1.3 横向移动 130
8.2 使用 Meterpreter维护可靠的重新访问权 131
8.3 使用 Mimikatz获取凭证 134
8.4 获取域缓存凭证 136
8.4.1 使用 MeterpreterPost模块 137
8.4.2 使用JohntheRipper破解缓存凭证 138
8.4.3 与JohntheRipper一起使用字典文件 140
8.5 从文件系统中获取凭证 141
8.6 使用哈希传递攻击进行横向移动 143
8.6.1 使用 Metasploitsmb_login模块 144
8.6.2 使用 CrackMapExec进行哈希传递攻击 146
8.7 总 结 148
第9章 Linux或 UNIX后漏洞利用 149
9.1 使用定时命令维护可靠的重新访问权 150
9.1.1 创建SSH 密钥对 151
9.1.2 启用公钥身份验证 152
9.1.3 通过SSH 建立隧道 154
9.1.4 使用定时任务自动建立SSH 隧道 156
9.2 获取凭证 157
9.2.1 从bash历史记录中获取凭证 158
9.2.2 获取哈希密码 159
9.3 使用SUID二进制文件提升权限 160
9.3.1 使用find命令查找SUID二进制文件 161
9.3.2 在/etc/passwd中插入一个新用户 163
9.4 传递SSH 密钥 165
9.4.1 从受破坏的主机中窃取密钥 165
9.4.2 使用 Metasploit扫描多个目标 166
9.5 总 结 168
第10章 控制整个网络 169
10.1 识别域管理员用户账号 171
10.1.1 使用net命令查询活动目录组171
10.1.2 查找已登录的域管理员用户 172
10.2 获得域管理员权限 173
10.2.1 使用Incognito模拟登录的用户 175
10.2.2 使用 Mimikatz获取明文凭证 176
10.3 ntds.dit文件和王国之钥 177
10.3.1 绕过 VSS的限制 178
10.3.2 使用secretsdump.py提取所有哈希值 182
10.4 总 结 183
第4阶段 INPT的清理和文档
第11章 后期清理 187
11.1 终止活动的Shell连接 188
11.2 禁用本地用户账户 189
11.3 从文件系统中删除残留文件190
11.3.1 删除 Windows注册表hive的副本 191
11.3.2 删除SSH 密钥对 191
11.3.3 删除ntds.dit文件的副本 192
11.4 反转配置更改 193
5网络渗透测试的艺术
11.4.1 禁用 MSSQL存储过程 193
11.4.2 禁用匿名文件共享 194
11.4.3 删除定时任务条目 195
11.5 关闭后门 196
11.5.1 从 ApacheTomcat中取消部署 WAR文件 196
11.5.2 关闭粘滞键后门 197
11.5.3 卸载持久的 Meterpreter回调 198
11.6 总 结 199
第12章 撰写一个稳定的渗透测试可交付成果 200
12.1 稳定的渗透测试可交付成果的8个部分 200
12.2 执行摘要 202
12.3 工作方法 202
12.4 攻击叙述 203
12.5 技术观察 203
12.6 附 录 206
12.6.1 严重程度定义 206
12.6.2 主机和服务 207
12.6.3 工具列表 207
12.6.4 其他参考文献 208
12.7 收尾工作 208
12.8 现在怎么办 209
12.9 总 结 210
附录 A 构建一个虚拟的渗透测试平台 211
A.1 创建 Ubuntu虚拟机 211
A.2 其他操作系统依赖项 212
A.2.1 使用apt管理 Ubuntu包 212
A.2.2 安装 CrackMapExec 213
A.2.3 自定义终端界面外观 213
A.3 安装 Nmap 213
A.3.1 NSE:Nmap脚本引擎 214
A.3.2 操作系统依赖项 215
A.3.3 从源代码编译和安装 216
A.3.4 探索文档 217
A.4 Ruby脚本语言 218
A.4.1 安装 Ruby版本管理器 218
A.4.2 编写必需的 Helloworld示例 219
A.5 Metasploit框架 222
A.5.1 操作系统依赖项 222
A.5.2 必要的 Rubygem 223
A.5.3 为 Metasploit安装 PostgreSQL 224
A.5.4 浏览 msfconsole 226
附录 B Linux基本命令 230
B.1 CLI命令 230
B.1.1 $cat 230
B.1.2 $cut 231
B.1.3 $grep 232
B.1.4 $sort和 wc 233
B.2 tmux … 234
B.2.1 使用tmux命令 235
B.2.2 保存tmux会话 235
附录 C 创建 CapsulecorpPentest实验室网络 237
C.1 硬件和软件要求 238
C.2 创建 Windows主服务器 240
C.2.1 Goku.capsulecorp.local 240
C.2.2 Gohan.capsulecorp.local 241
C.2.3 Vegeta.capsulecorp.local 241
C.2.4 Trunks.capsulecorp.local 241
C.2.5 Nappa.capsulecorp.local和 Tien.capsulecorp.local 242
C.2.6 Yamcha.capsulecorp.local和 Krillin.capsulecorp.local 242
C.3 创建 Linux服务器 242
附录 D Capsulecorp内部网络渗透测试报告 243
D.1 执行摘要 243
D.1.1 工作范围 243
D.1.2 观察总结 243
D.2 工作方法 244
7网络渗透测试的艺术
D.2.1 信息收集 244
D.2.2 集中渗透 244
D.2.3 后漏洞利用和权限提升 244
D.2.4 文档和清理 245
D.3 攻击叙述 245
D.4 技术观察 245
D.5 附录1:严重程度定义 249
D.5.1 关 键 249
D.5.2 高 级 249
D.5.3 中 级 249
D.5.4 低 级 250
D.6 附录2:主机和服务 250
D.7 附录3:工具列表 254
D.8 附录4:其他参考文献 255
附录 E 练习答案 256