- Go语言安全工具开发入门难:从Go语法基础讲起,帮助安全从业者快速掌握用Go编写渗透测试工具的能力。
- 网络协议编程不熟悉:深入讲解TCP、HTTP、DNS、SMB等常见网络协议的Go语言实现与利用方式。
- 渗透测试工具定制化需求:教会读者根据自身需求构建和自动化渗透测试工具,而非依赖现成工具。
- 缺乏攻防实战编程经验:通过端口扫描器、TCP代理、凭证收割、命令控制等实战项目积累攻防编程经验。
- 安全工具开发效率低:利用Go的并发特性和标准库,高效开发可靠、可移植的安全测试工具。
★★★
中级
入门初级中级进阶高级
- 渗透测试工程师:希望使用Go语言开发定制化安全工具,提升工作效率和攻击能力的从业者。
- 红队成员:需要构建命令与控制框架、开发后渗透工具的红队安全人员。
- 安全开发工程师:从事安全产品开发,需要了解攻击者视角和攻防技术的开发人员。
- Go语言开发者:已掌握Go基础,对网络安全和渗透测试感兴趣想拓展技能方向的技术人员。
- 网络安全专业学生:学习网络安全方向,需要一本将编程与安全实战结合的进阶教材的学生。
- 先夯实Go基础:第1章务必认真阅读并动手实践,确保Go语法和并发模型理解到位再进入后续章节。
- 按协议顺序学习:第2至6章按TCP、HTTP、DNS、SMB协议递进,建议按顺序阅读以建立完整的协议编程能力。
- 边读边写工具:每章的工具代码都要亲自编写和调试,在合法授权环境中测试,积累实战经验。
- 重点关注并发编程:Go的并发特性是安全工具高效运行的关键,建议重点理解goroutine和channel的使用。
- 合法合规使用:所有技术仅用于授权测试和安全研究,切勿用于未授权的渗透行为。
- Go安全编程能力:熟练使用Go语言开发各类渗透测试工具,包括扫描器、代理、C2框架等。
- 网络协议攻防技能:深入理解TCP、HTTP、DNS、SMB等协议的攻防原理和编程实现。
- 工具定制化能力:根据实际渗透测试需求,独立构建和自动化安全工具链。
- 攻防实战经验:通过端口扫描、凭证收割、命令控制等实战项目积累攻防编程经验。
- 安全工具开发思维:掌握从攻击者视角设计工具的方法论,提升进攻性安全技能。
- Go并发编程实战:深入掌握Go的并发模型在安全工具开发中的高效应用。
📖 书籍简介
作 者:[美]汤姆·斯蒂尔 (Tom Steele) 克里斯·帕顿(Chris Patten) 丹·科特曼(Dan Kottmann) 著 贾玉彬 朱钱杭 译 著
定 价:99
出 版 社:清华大学出版社
出版日期:2021年09月01日
页 数:356
装 帧:平装
ISBN:9787302588245
"《Go黑帽子 渗透测试编程之道》探索了Go的“阴暗面”,Go是一种因为简单、高效和可靠而受到黑客推崇的流行编程语言。本书从安全从业者和黑客的角度出发,提供了一系列实用的策略,以帮助你使用Go的功能来测试系统、构建和自动化工具以满足你的需求,并提高你的进攻性安全技能。
我们将从Go的语法和原理的基本概述开始你的学习之旅,探索可用于工具开发的示例,包括HTTP、DNS和SMB等常见网络协议。然后,我们将深入研究渗透测试人员会使等
● 章 Go 语言基础1
1.1 设置开发环境 1
1.1.1 下载和安装Go 1
1.1.2 设置GOROOT 以定义二进制文件的位置 2
1.1.3 设置GOPATH 以确定Go工作区的位置 2
1.1.4 选择一个集成开发环境 3
1.1.5 常用的Go 工具命令 6
1.2 理解Go 的语法 9
1.2.1 数据类型10
1.2.2 控制结构13
1.2.3 并发15
1.2.4 错误处理17
1.2.5 处理结构化数据18
1.3 小结19
第2 章 TCP、扫描器和代理 21
2.1 理解TCP 的握手机制21
2.2 通过端口转发绕过防火墙22
2.3 编写一个TCP 扫描器23
2.3.1 测试端口可用性23
2.3.2 执行非并发扫描24
2.3.3 执行并发扫描26
2.4 构造TCP 代理31
2.4.1 使用io.Reader 和io.Writer 32
2.4.2 创建回显服务器 35
2.4.3 通过创建带缓冲的监听器来改进代码 37
2.4.4 代理一个TCP 客户端 39
2.4.5 复现Netcat 命令执行 41
2.5 小结 44
第3 章 HTTP 客户端以及与工具的远程交互 45
3.1 Go 的HTTP 基础知识 45
3.1.1 调用HTTP API 46
3.1.2 生成一个请求 47
3.1.3 使用结构化响应解析 48
3.2 构建与Shodan 交互的HTTP
客户端 51
3.2.1 回顾构建API 客户端的步骤 51
3.2.2 设计项目结构 52
3.2.3 清理API 调用 52
3.2.4 查询Shodan 订阅情况 53
3.2.5 创建一个客户端 58
3.3 与Metasploit 交互 59
3.3.1 配置环境 59
3.3.2 定义目标 61
3.3.3 获取有效令牌 62
3.3.4 定义请求和响应方法 63
3.3.5 创建配置结构体和RPC方法
3.3.6 执行远程调用65
3.3.7 创建实用程序67
3.4 使用Bing Scraping 解析文档元数据69
3.4.1 配置环境和规划69
3.4.2 定义元数据包71
3.4.3 把数据映射到结构体72
3.4.4 使用Bing 搜索和接收文件.73
3.5 小结77
第4 章 HTTP 服务器、路由和中间件79
4.1 HTTP 服务器基础79
4.1.1 构建一个简单的服务器80
4.1.2 构建一个简单的路由器81
4.1.3 构建简单的中间件82
4.1.4 使用gorilla/x 包进行路由84
4.1.5 使用negroni 包构建中间件.85
4.1.6 使用negroni 包添加身份验证88
4.1.7 使用模板生成HTML 响应.90
4.2 凭证收割92
4.3 使用WebSocket API 实现按键记录.9.4 多路命令与控制100
4.5 小结.104
第5 章 DNS 利用 105
5.1 编写DNS 客户端105
5.1.1 检索A 记录106
5.1.2 使用Msg 结构体处理应答.107
5.1.3 枚举子域.109
5.1.4 查询A 记录和CNAME记录110
5.1.5 工人函数113
5.1.6 使用bufio 包创建一个文本扫描器.114
5.1.7 收集和显示结果.115
5.2 编写DNS 服务器120
5.2.1 实验环境搭建和服务器介绍120
5.2.2 创建DNS 服务器和代理123
5.3 小结.132
第6 章 与SMB 和NTLM 交互.133
6.1 SMB 包133
6.2 理解SMB .134
6.2.1 理解SMB 安全令牌135
6.2.2 创建一个SMB 会话135
6.2.3 使用结构域的混合编码.136
6.2.4 了解元数据和引用字段.139
6.2.5 理解SMB 实现.140
6.3 使用SMB 包猜测密码147
通过pass-the-hash 技术重用密码.149
6.5 恢复NTLM 密码.151
6.5.1 计算散列值151
6.5.2 恢复NTLM 散列值152
6.6 小结.153
第7 章 滥用数据库和文件系统.155
7.1 使用Docker 设置数据库156
7.1.1 安装MongoDB 数据库并写入数据.156
7.1.2 安装tgreSQL 和MySQL数据库并写入数据.158
7.1.3 安装Microsoft SQL Server数据库并写入数据.159
7.2 在Go 中连接和查询数据库 160
7.2.1 查询MongoDB 数据库 160
7.2.2 查询SQL 数据库 162
7.3 构建数据库矿工 163
7.3.1 实现一个MongoDB数据库矿工 166
7.3.2 实现一个MySQL数据库矿工 169
7.4 掠夺文件系统 172
7.5 小结 174
第8 章 原始数据包处理 175
8.1 配置环境 175
8.2 使用pcap 子包识别设备 176
8.3 实时捕获和结果过滤 177
8.4 和显示明文用户凭证 180
8.5 通过SYN 泛洪保护进行端口扫描 182
8.5.1 检查TCP 标志位 183
8.5.2 构建BPF 过滤器 183
8.5.3 编写端口扫描器 184
8.6 小结 187
第9 章 编写和移植利用代码 189
9.1 创建一个模糊测试器 189
9.1.1 缓冲区溢出模糊测试 190
9.1.2 SQL 注入模糊测试 193
9.2 将漏洞利用移植到Go 198
9.2.1 从Python 移植漏洞利用 199
9.2.2 从C 移植漏洞利用 202
9.3 在Go 中构建shellcode 215
9.3.1 C 转换 216
9.3.2 十六进制转换 216
9.3.3 num 转换 217
9.3.4 raw 转换 217
9.3.5 Base 编码 218
9.3.6 一个关于汇编的注意事项.219
9.4 小结.219
0 章 Go 插件和可扩展工具221
10.1 使用Go 的原生插件系统222
10.1.1 创建主程序.223
10.1.2 构建一个密码猜测插件226
10.1.3 运行扫描器.228
10.2 基于Lua 构建插件.229
10.2.1 创建head() HTTP 函数230
10.2.2 创建函数get() 231
10.2.3 向Lua VM 注册函数.233
10.2.4 编写函数main().233
10.2.5 创建插件脚本.234
10.2.6 测试Lua 插件.235
10.3 小结236
1 章 针对密码学的攻击和实现.237
11.1 回顾基本密码学概念.237
11.2 理解标准的Crypto 库.238
11.3 探索散列.239
11.3.1 破解MD5 和SH12散列值.239
11.3.2 实现bcrypt241
11.4 验证消息.243
11.5 加密数据.245
11.5.1 对称密钥加密.245
11.5.2 非对称加密.248
11.6 暴力破解RC2.255
11.6.1 准备工作.256
11.6.2 生产工作.258
11.6.3 执行工作和解密数据.260
11. 编写函数main() .261
11.6.5 运行程序.263
11.7 小结.2
2 章 Windows 系统交互与分析 265
12.1 Windows API 的函数OpenProcess()265
12.2 unsafe.Pointer 和uintptr类型268
12.3 使用syscall 包执行进程注入270
12.3.1 定义Windows DLL并给变量赋值272
12.3.2 使用OpenProcess Windows API 获取进程令牌.273
12.3.3 使用VirtualAllocEx Windows API 操作内存.276
12.3.4 使用WriteProcessMemory Windows API 写入内存.276
12.3.5 使用GetProcessAddress Windows API 查找LoadLibraryA .277
12.3.6 使用CreateRemoteThread Windows API 执行恶意DLL.278
12.3.7 使用WaitforSingleObject Windows API 验证注入.279
12.3.8 使用VirtualFreeEx Windows API 进行清理.280
12.3.9 附加练习.281
12.4 可移植的可执行文件281
12.4.1 理解PE 文件格式282
12.4.2 编写一个PE 解析器282
12.4.3 附加练习.293
12.5 在Go 中使用C293
12.5.1 安装C Windows 工具链293
12.5.2 使用C 和Windows API创建一个消息框294
12.5.3 在C 程序中嵌入Go代码.295
12.6 小结.297
3 章 使用隐写术隐藏数据.299
13.1 探索PNG 格式.299
13.1.1 文件头.300
13.1.2 块序列.300
13.2 读取图像字节数据.301
13.2.1 读取头数据.302
13.2.2 读取块序列.303
13.3 写入图像字节数据以植入载荷.306
13.3.1 查找块偏移量.306
13.3.2 使用方法ProcessImage()写入字节.306
13.4 使用XOR 编码和解码图像字节数据.311
13.5 小结.316
13.6 附加练习.31 章 构建一个C2 远控木马.319
14.1 入门.319
14.1.1 安装用于定义gRPC API的Protocol Buffers .320
14.1.2 创建项目工作区.320
14.2 定义和构建gRPC API 321
14.3 创建服务器323
14.3.1 实现协议接口.323
14.3.2 编写函数main() .325
14.4 创建客户端植入程序.327
14.5 构建管理组件.329
14.6 运行RAT330
14.7 改进RAT330
14.7.1 加密通信.331
14.7.2 处理连接中断.331
14.7.3 注册植入程序 331
14.7.4 添加数据库持久 332
14.7.5 支持多个植入程序 332
14.7.6 添加植入程序功能 332
14.7.7 链接操作系统命令 333
14.7.8 增强植入程序的真实性并实践良好的运营安全333
14.7.9 添加ASCII Art .333
14.8 小结334
学习内容:
如何开发用于你自己安全项目的高性能工具。
如何创建与远程API交互的可用工具。
如何抓取任意HTML数据。
如何使用Go的标准包net/http构建HTTP服务器。
如何编写自己的DNS服务器和代理。
如何使用DNS隧道建立一个C2通道以突破性网络。
如何创建漏洞模糊器(fuzzer)以发现应用程序的安全漏洞。
如何使用插件和扩展使产品可以面向未来。
如何构建RC2对称密钥暴力破解工具。
如何在(PNG)图像中植入数据。
准备好扩展你的安全工具库了 那我们出发(Go)吧!
📑 章节目录
- Go语言基础与开发环境搭建
- TCP协议、端口扫描器与代理开发
- HTTP客户端与远程工具交互
- HTTP服务器、路由与中间件
- DNS利用:客户端与服务器编程
- SMB与NTLM协议交互
- 数据库与文件系统渗透技术
- 漏洞扫描与利用工具开发
- 命令与控制(C2)框架实现
- 后渗透阶段工具开发
- 安全工具的打包与分发
- 综合实战:构建完整渗透测试工具链