第1章 走近Nmap 1
1.1 Nmap简介 2
1.2 Nmap的下载与安装 3
1.2.1 在Windows系统下安装与下载Nmap 3
1.2.2 在Linux系统下安装Nmap 6
1.3 Nmap的基本操作 6
1.4 扫描范围的确定 7
1.4.1 对连续范围内的主机进行扫描 7
1.4.2 对整个子网进行扫描 8
1.4.3 对多个不连续的主机进行扫描 8
1.4.4 在扫描的时候排除指定的目标 9
1.4.5 对一个文本文件中的地址列表进行扫描 9
1.4.6 随机确定扫描目标 10
小结 10
第2章 活跃主机发现技术 11
2.1 活跃主机发现技术简介 12
2.2 网络协议与主机发现技术 12
2.3 基于ARP协议的活跃主机发现技术 14
2.3.1 ARP协议解析 14
2.3.2 在Nmap中使用ARP协议进行主机发现 16
2.4 基于ICMP协议的活跃主机发现技术 18
2.4.1 ICMP协议解析 18
2.4.2 使用ICMP协议进行主机发现 19
2.5 基于TCP协议的活跃主机发现技术 22
2.5.1 TCP协议解析 22
2.5.2 使用TCP协议进行主机发现 23
2.6 基于UDP协议的活跃主机发现技术 29
2.6.1 UDP协议解析 29
2.6.2 使用UDP协议进行主机发现 30
2.7 基于SCTP协议的活跃主机发现技术 31
2.7.1 SCTP协议解析 31
2.7.2 使用SCTP协议进行主机发现 31
2.8 使用IP协议进行主机地址发现 32
2.9 Nmap活跃主机发现中与DNS协议相关的选项 33
2.9.1 DNS协议解析 33
2.9.2 Nmap中的DNS选项 34
2.10 主机发现技术的分析 36
小结 38
第3章 端口扫描技术 39
3.1 端口的概念 39
3.2 端口的分类 40
3.3 Nmap中对端口状态的定义 41
3.4 Nmap中的各种端口扫描技术 41
3.4.1 SYN扫描 42
3.4.2 Connect扫描 43
3.4.3 UDP扫描 43
3.4.4 TCP FIN扫描 44
3.4.5 NULL扫描 44
3.4.6 Xmas Tree扫描 45
3.4.7 idle扫描 45
3.5 指定扫描的端口 46
小结 48
第4章 远程操作系统与服务检测技术 49
4.1 远程操作系统检测简介 50
4.2 操作系统指纹简介 51
4.3 操作系统指纹扫描作为管理工具 52
4.4 为什么要进行服务发现 57
4.5 如何使用Nmap进行服务发现 60
小结 62
第5章 Nmap的图形化操作工具——Zenmap 63
5.1 Zenmap简介 63
5.2 启动Zenmap 64
5.3 Zenmap扫描操作 68
5.4 使用Zenmap的命令向导来创建命令 69
5.5 对Zenmap的配置进行管理 75
5.6 对Zenmap扫描的结果进行管理和比较 76
5.7 Zenmap中的拓扑功能 82
小结 83
第6章 Nmap的高级技术与防御措施 84
6.1 Nmap的伪装技术 84
6.2 TCP Connect扫描的检测 93
6.3 操作系统扫描的防范 96
6.4 Nmap的格式化输出 96
小结 100
第7章 NSE的基础部分 101
7.1 NSE脚本的运行 102
7.1.1 NSE中脚本的分类 102
7.1.2 NSE脚本的选择 103
7.2 如何向NSE脚本传递参数 105
7.2.1 NSE中传递参数的方式 105
7.2.2 从文件中载入脚本的参数 106
7.2.3 NSE脚本调试 107
7.4 NSE常见脚本的应用 109
7.4.1 信息收集类脚本 109
7.4.2 高级主机发现类脚本 111
7.4.3 密码审计类脚本 112
7.4.4 漏洞扫描类脚本 114
小结 116
第8章 NSE的编写基础 117
8.1 NSE脚本的基本格式 117
8.2 NSE脚本的规则 118
8.3 NSE开发环境的设置 119
8.4 编写简单的NSE脚本 123
8.5 实例应用:垃圾邮件木马的检测 127
小结 128
第9章 Lua语言 129
9.1 Lua的编程环境 130
9.1.1 在Windows系统上安装Lua编程环境 130
9.1.2 在Linux系统上安装Lua编程环境 130
9.2 第一个Lua程序 131
9.3 Lua流程控制 132
9.4 Lua中的循环结构 133
9.5 Lua数据类型 135
9.6 Lua字符串 136
9.7 Lua文件I/O操作 142
9.8 Lua协同程序 144
9.8.1 什么是协同程序 144
9.8.2 线程和协同程序的区别 144
9.8.3 coroutine基本语法 144
9.9 Lua语言中的注释和虚变量 145
9.9.1 Lua语言中的注释说明 145
9.9.2 Lua语言中的虚变量 145
小结 146
第10章 NSE中的API 147
10.1 Nmap API 147
10.1.1 host table 148
10.1.2 port table 154
10.2 NSE中的异常处理 157
10.3 NSE中的注册表 159
小结 159
第11章 NSE中的库文件 160
11.1 NSE库文件的编写 161
11.2 扩展一个现有NSE库文件的功能 163
11.3 使用C/C++编写的NSE模块 168
11.4 常见的NSE库文件 170
11.4.1 shortport 170
11.4.2 http 173
11.4.3 stdNSE 176
11.4.4 OpenSSL 176
11.4.5 target 177
11.4.6 creds 177
11.4.7 vluns 177
小结 178
第12章 对服务发现功能进行增强 179
12.1 NSE中的服务发现模式 179
12.1.1 服务发现的过程 180
12.1.2 调整版本扫描的级别 180
12.1.3 更新版本侦测探针数据库 181
12.1.4 从版本检测中排除指定端口 181
12.1.5 post-processors简介 182
12.2 自定义版本检测脚本 182
12.2.1 将脚本的分类定义为version检测 182
12.2.2 定义版本检测脚本的portrule 182
12.2.3 更新端口服务版本信息 183
12.3 服务发现脚本的实例 184
12.3.1 modbus-discover 184
12.3.2 ventrilo-info 185
12.3.3 rpc-grind 187
小结 188
第13章 NSE中的数据文件 189
13.1 Nmap中数据文件所在的位置 190
13.2 Nmap中选择数据文件的顺序 190
13.3 暴力穷举时所使用的用户名和密码列表数据文件 190
13.3.1 用户名数据文件 190
13.3.2 密码数据文件 191
13.4 Web应用审计数据文件 191
13.4.1 http-fingerprints.lua 191
13.4.2 http-sql-errors.lst 192
13.4.3 http-web-files-extensions.lst 192
13.4.4 http-devframework-fingerprints.lua 193
13.4.5 http-folders.txt 193
13.4.6 vhosts-default.lst 194
13.4.7 wp-plugins.lst 194
13.5 DBMS-auditing数据文件 195
13.5.1 mysql-cis.audit 195
13.5.2 oracle-default-accounts.lst 196
13.5.3 oracle-sids 196
小结 197
第14章 密码审计脚本的开发 198
14.1 使用NSE库进行工作 199
14.1.1 NSE中brute模式的设定 199
14.1.2 NSE中Driver类的实现 200
14.1.3 NSE中库文件和用户选项的传递 202
14.1.4 NSE中通过Account对象返回有效的账户 203
14.1.5 NSE中使用Error类来处理异常 204
14.2 使用unpwdb NSE库读取用户名和密码信息 204
14.3 对扫描中得到的用户凭证进行管理 205
14.4 针对FTP的密码审计脚本 205
14.5 针对Mikro Tik RouterOS API的密码审计脚本 208
小结 212
第15章 漏洞审计与渗透脚本的编写 213
15.1 Nmap中的漏洞扫描功能 213
15.2 NSE中的exploit脚本 215
15.3 RealVNC的渗透脚本 217
15.4 Windows系统漏洞的检测 218
15.5 对heartbleed漏洞进行渗透 220
15.6 vulns库中的漏洞功能 224
小结 227
第16章 NSE的并发执行 228
16.1 Nmap中的并发执行 228
16.2 Nmap中的时序模式 229
16.3 Lua中的并发执行 230
16.4 NSE中的并发执行 235
16.4.1 NSE中的线程 236
16.4.2 NSE中的条件变量 236
16.4.3 NSE中的互斥变量 238
小结 239