Go 黑帽子 : 滲透測試編程之道

[美]湯姆·斯蒂爾 (Tom Steele) 克裡斯·帕頓(Chris Patten) 丹·科特曼(Dan Kottmann) 著 賈玉彬 朱錢杭 譯

  • Go 黑帽子 : 滲透測試編程之道-preview-1
  • Go 黑帽子 : 滲透測試編程之道-preview-2
  • Go 黑帽子 : 滲透測試編程之道-preview-3
Go 黑帽子 : 滲透測試編程之道-preview-1

買這商品的人也買了...

商品描述

學習內容: 如何開發用於你自己安全項目的高性能工具。 如何創建與遠程API交互的可用工具。 如何抓取任意HTML數據。 如何使用Go的標準包net/http構建HTTP服務器。 如何編寫自己的DNS服務器和代理。 如何使用DNS隧道建立一個C2通道以突破限制性網絡。 如何創建漏洞模糊器(fuzzer)以發現應用程序的安全漏洞。 如何使用插件和擴展使產品可以面向未來。 如何構建RC2對稱密鑰暴力破解工具。 如何在(PNG)圖像中植入數據。 準備好擴展你的安全工具庫了嗎? 那我們出發(Go)吧!

作者簡介

Tom Steele、Chris Patten和Dan Kottmann分享了他們30多年的滲透測試和進攻性俺安全經驗,並舉辦了多次Go培訓和開發課程(有關詳細信息,請參閱書中內容)。

目錄大綱

第1 章 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方法64
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/mux 包進行路由84
4.1.5 使用negroni 包構建中間件.85
4.1.6 使用negroni 包添加身份驗證88
4.1.7 使用模板生成HTML 響應.90
4.2 憑證收割92
4.3 使用WebSocket API 實現按鍵記錄.96
4.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
6.4 通過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 安裝PostgreSQL 和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 嗅t和顯示明文用戶憑證 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 Base64 編碼 218
9.3.6 一個關於彙編的注意事項.219
9.4 小結.219

第10 章 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

第11 章 針對密碼學的攻擊和實現.237
11.1 回顧基本密碼學概念.237
11.2 理解標準的Crypto 庫.238
11.3 探索散列.239
11.3.1 破解MD5 和SHA-512散列值.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.6.4 編寫函數main() .261
11.6.5 運行程序.263
11.7 小結.264

第12 章 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

第13 章 使用隱寫術隱藏數據.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 附加練習.316

第14 章 構建一個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