-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
5/31 新書到! 4/20 新書到! 4/13 新書到!3/21 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

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

( 簡體 字)
作者:[美]湯姆·斯蒂爾 (Tom Steele) 克里斯·帕頓(Chris Patten) 丹·科特曼(Dan Kottmann) 著 賈玉彬 朱錢杭 譯類別:1. -> 安全 -> 網路安全 -> 駭客攻擊與入侵
譯者:
出版社:清華大學出版社Go黑帽子 滲透測試編程之道 3dWoo書號: 55182
詢問書籍請說出此書號!

有庫存
NT售價: 495

出版日:9/1/2021
頁數:334
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787302588245
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

大約6 年來,我們3 個人領導了北美專用滲透測試咨詢。作為首席顧問,我們代表客戶執行了項目的相關技術工作,包括網絡滲透測試;我們還率先開發出了更好的工具、流程和方法。在某些時候,我們采用Go 作為我們的主要開發語言之一。
Go 提供了很好的語言特性,在性能、安全性和易用性之間取得了平衡。我們在開發工具時將其作為我們的默認語言。最終,我們心甘情愿地成為這種語言的倡導者,將其推薦給我們在安全行業的其他同事。這是因為我們覺得Go 這種優秀的語言應該進入更多人的視野。
在本書中,我們將帶你從安全從業人員和黑客的角度出發,全面了解Go 編程語言。
與其他黑客類圖書不同的是,我們將不僅向你展示如何自動化第三方或商業工具(盡管我們會稍微討論一下),而且將深入探討各種具有實用價值的主題,這些主題涉及對于對抗有用的特定問題、協議或策略。此外,還將介紹TCP、HTTP 和DNS 協議,以及與Metasploit和Shodan 交互、搜索文件系統和數據庫、從其他語言到Go 的漏洞移植、編寫SMB 客戶端的核心函數、攻擊Windows、交叉編譯二進制文件、加密相關的內容、調用C 庫、與Windows API 交互等。
本書的適用對象
本書適用于所有想要學習如何使用Go 開發自己的黑客工具的人。在我們的整個職業生涯中,尤其是作為顧問,我們一直提倡將編程作為滲透測試人員和安全從業人員必須具備的基本技能。特別值得一提的是,編碼能力可以增強你對軟件工作原理及其會遭到怎樣的攻擊的理解。此外,如果你已經是軟件程序員,則將會對他們在保護軟件方面面臨的挑戰有更全面的了解,因而可以更好地利用個人經驗來提出破解方法,消除誤報并找出隱蔽的漏洞。編寫代碼通常會迫使你與第三方庫以及各種應用程序棧和框架進行
交互。對很多人(包括我們)來說,親自操作和不斷修改才能使個人得到最大的發展。
為充分利用本書,我們鼓勵你復制本書的官方代碼庫,這樣你就擁有了我們將要討論的所有示例(請通過https://github.com/blackhat-go/bhg/查找和下載)。
本書的不同之處
本書不是一般意義上的Go 編程介紹,而是關于使用Go 開發安全工具的介紹。我們首先是黑客,然后才是程序員。我們中沒有一個人曾經是軟件工程師。因此,作為黑客,我們更看重功能性而不是優雅性。在很多情況下,我們都選擇像黑客一樣編寫代碼,而忽略了軟件設計的一些習慣用法或最佳實踐。對于顧問來說,時間就是金錢,而開發的代碼越簡單,用時就越少。因此,在功能性與優雅性之間,我們選擇了前者。當你需要快速創建一個問題的解決方案時,樣式風格則是次要的。
這必然會激怒Go 純粹主義者,他們可能會在推特上對我們說,你們沒有優雅地處理所有的錯誤情況,你們的示例可以被優化,或者有更好的構造或方法來產生期望的結果。大多數情況下,我們并不關心教給你的是不是最好的、最優雅的或者百分之百理想的解決方案,當然前提是這樣做不會對最終結果造成什么影響。盡管我們將簡要介紹語言語法,但這樣做純粹是為了構建我們可以奠定的基線基礎。事實上,我們這里想要教會你的不是如何用Go 優雅地進行編程,而是如何使用Go 開發黑客工具。
為什么要使用Go 進行黑客攻擊
在Go 問世之前,你可能會使用某種動態類型語言(如Python、Ruby 或PHP)。這里你優先考慮的是其易用性,而很少會考慮其性能和安全性。另外,你還可以選擇某種靜態類型語言(例如C 或C++),這類語言以高性能和安全見長,但易用性不太好。Go 擺脫了其主要祖先C 的許多缺點,使開發更具人性化。同時,它是一種靜態類型語言,在編譯時會產生語法錯誤,從而極大地保障了代碼在實際運行過程中的安全。與解釋型語言相比,它的性能更好,且在設計時考慮了多核計算,讓并發編程成為小兒科。
Go 的以上優點并沒有讓它得到安全從業者的垂青。然而,該語言的許多功能卻給黑客和攻擊者帶來了“福音”。
● 整潔的包管理系統。Go 的包管理解決方案非常優雅,可以直接與Go 的工具集成。通過使用Go 二進制文件,可以輕松地下載、編譯和安裝包與依賴項,這樣第三方庫使用起來非常簡單,且通常不會發生沖突。
● 交叉編譯。Go 最好的特性之一是它能夠交叉編譯可執行文件。只要代碼不與原始C 交互,你就可以很輕松地在Linux 或Mac 系統上編寫代碼,且以Windows友好的、可移植的可執行格式編譯代碼。
● 豐富的標準庫。如果對開發其他語言所花費的時間有所了解,你就能更直觀地感受到Go 標準庫的豐富程度。許多現代語言缺乏執行一些常見任務所需的標準庫,如加密、網絡通信、數據庫連接和數據編碼(JSON、XML、Base64、hex)。
Go 將許多關鍵函數和庫作為語言標準打包的一部分,從而減少了正確設置開發環境或調用函數所需的工作量。
● 并發。與已經存在很長時間的語言不同,Go 發布的時間和最初的主流多核技術上市的時間差不多。因此,Go 的并發模式和性能優化專門針對這個模型進行了調整。
為什么你可能不喜歡Go
同時,我們也認識到Go 并不能完美地解決所有問題。以下是該語言的一些缺點。
● 二進制文件大小。當在Go 中編譯二進制文件時,二進制文件的大小可能為數兆字節。當然,你可以剝離調試符號并使用打包程序以減小體積,但要想完成這些步驟,你必須有專注力。這可能是一個缺點,特別是對于那些需要將二進制文件附加到電子郵件、托管在共享文件系統上或通過網絡傳輸的安全從業人員而言。
● 冗長。盡管Go 沒有C#、Java 甚至C/C++語言那么冗長,但你仍可能會發現,簡單的語言構造會迫使你過度使用列表(在Go 中稱為切片)、處理、循環或錯誤處理等內容。Python 的單行代碼很容易在Go 中變成3 行代碼。
章節內容概覽
本書的第1 章概述了Go 的基本語法和原理。接下來,我們開始探索可用于工具開發的示例,包括各種常見的網絡協議,例如HTTP、DNS 和SMB。然后,我們深入研究滲透測試人員遇到的各種手段和問題,解決包括數據竊取、數據包嗅探和漏洞利用開發在內的主題。最后,我們簡短討論了如何創建動態的、可插入的工具,并且深入研究加密技術以及如何攻擊Microsoft Windows 和實現隱寫術。
許多情況下,你都有機會擴展我們展示給你的工具以實現特定目的。盡管我們始終提供可靠的示例,但我們的真正目的是為你提供知識和基礎,而你則可以此為基礎來擴展或重新開發示例以實現你的目標。授之以魚,不如授之以漁——這就是我們的追求。
在繼續閱讀本書接下來的內容之前,請務必牢記這一點:我們(作者和出版商)創作的內容僅供合法使用。我們不會為你選擇實施的邪惡或非法行為承擔任何責任。這里的所有內容僅用于教育目的;未經授權,請勿對系統或應用程序進行任何形式的滲透測試。
以下是對每一章內容的概述。
第1 章:Go 語言基礎
該章介紹Go 編程語言的基礎知識,以幫助你理解本書中的概念。這包括對Go 的基本語法和習慣用法的簡要介紹。除此之外,我們還將討論Go 生態系統,包括支持工具、IDE、依賴管理等。對編程語言不熟悉的讀者可以在學習了Go 的一些基本知識后,更好地理解、實現和擴展后續章節中的示例。
第2 章:TCP、掃描器和代理
該章介紹Go 的基本概念、并發基礎和模式、輸入/輸出(I/O)以及如何通過實際TCP應用程序使用接口。我們將首先引導你創建一個簡單的TCP 端口掃描器,它使用解析的命令行選項掃描列表中的端口。這能讓你直觀地感受到Go 代碼相較其他語言的簡單性,并且有助于你理解基本類型、用戶輸入和錯誤處理。接下來,我們將討論如何通過引入并發功能來提高此端口掃描器的效率和速度。然后,我們將通過構建一個TCP 代理(一個端口轉發器)引入I/O 的相關知識:從基本示例開始,通過改進代碼創建一種更可靠的解決方案。最后,我們將在Go 中重新創建Netcat 的“安全巨洞”功能,教你如何在操作stdin 和stdout 以及通過TCP 重定向它們時運行操作系統命令。
第3 章:HTTP 客戶端以及與工具的遠程交互
HTTP 客戶端是與現代Web 服務器架構交互的關鍵組件。該章將向你展示如何創建執行各種常見Web 交互所需的HTTP 客戶端。你將使用多種格式與Shodan 和Metasploit進行交互。此外,我們還將演示如何使用搜索引擎,以及使用它們來獲取和解析文檔元數據,以便提取對組織分析活動有用的信息。
第4 章:HTTP 服務器、路由和中間件
該章介紹創建HTTP 服務器所需的概念和約定。我們將討論常見的路由、中間件和模板樣式,利用這些知識創建憑證收割服務器和鍵盤記錄器。最后,我們將演示如何通過構建反向HTTP 代理來復用C2 連接。
第5 章:DNS 利用
該章將介紹DNS 的基本概念。首先,將執行客戶端操作,包括如何查找特定的域記錄。然后將向你展示如何編寫一個自定義的DNS 服務器和DNS 代理,這兩個都對C2操作很有用。
第6 章:與SMB 和NTLM 交互
我們將探索SMB 和NTLM 協議并以此為基礎討論在Go 中的協議實現。我們將使用SMB 協議的部分實現討論數據的編組和解組、自定義字段標簽的使用等。此外,我們還將討論并演示如何使用SMB 協議的部分實現檢索SMB 簽名策略以及進行密碼猜測攻擊。
第7 章:濫用數據庫和文件系統
掠奪數據是對抗測試的一個關鍵方面。數據存在于眾多資源(包括數據庫和文件系統)中。該章介紹了在各種常見的SQL 和NoSQL 平臺上進行連接和與數據庫交互的基本方法。你將學習連接到SQL 數據庫和運行查詢的基本知識。我們將向你展示如何在數據庫和表中搜索敏感信息,這是在后滲透階段使用的一種常見技術。我們還將演示如何遍歷文件系統和檢查文件中的敏感信息。
第8 章:原始數據包處理
我們將向你展示如何使用基于libpcap 的gopacket 庫來嗅探和處理網絡數據包。你將學習如何識別可用的網絡設備、如何使用數據包過濾器以及如何處理這些數據包。然后我們將開發一個端口掃描程序,它可以通過各種保護機制(包括syn-flood 和syn-cookies)可靠地進行掃描,但這些機制會導致正常的端口掃描出現過多的誤報。
第9 章:編寫和移植利用代碼
該章幾乎只關注漏洞利用。首先創建一個模糊器來發現不同類型的漏洞。該章的后半部分將討論如何從其他語言移植現有的漏洞利用到Go 中。要討論的內容包括如何移植Java 反序列化利用和臟牛(Dirty COW)提權利用。我們將在該章結束時討論如何創建和轉換shellcode 以便用在Go 程序中。
第10 章:Go 插件和可擴展工具
我們將介紹兩種不同的創建可擴展工具的方法。Go 1.8 版中引入的第一種方法是使用Go 的本地插件機制。我們將討論這種方法的用例并討論另外一種利用Lua 創建可擴展工具的方法。我們將演示一些實例,以闡釋如何選擇合適的方法來執行一個常見的安全任務。
第11 章:針對密碼學的攻擊和實現
該章將介紹有關如何使用Go 進行對稱和非對稱加密的基本知識,使得你能夠通過標準Go 包來使用和理解加密技術。Go 是少數幾種不使用第三方庫進行加密而是在語言中使用本地實現的語言之一。這使得代碼易于導航、修改和理解。
我們將通過檢查常見用例和創建工具來探索標準庫。該章將向你展示如何執行散列、消息驗證和加密。最后,我們將演示如何對RC2 加密密文進行暴力破解。
第12 章:Windows 系統交互與分析
在有關攻擊Windows 的討論中,我們將演示與Windows 本地API 交互的方法,探索syscall 包以執行進程注入,并且學習如何構建可移植可執行(Portable Executable,PE)二進制解析器。該章最后將討論如何通過Go 的C 互操作機制調用本地C 庫。
第13 章:使用隱寫術隱藏數據
隱寫術是將信息或文件隱藏在另一個文件中。該章介紹隱寫術的一種變體:在PNG圖像文件的內容中隱藏任意數據。這些技術對于過濾信息、創建混淆的C2 消息以及繞過檢測或預防性的控制非常有用。
第14 章:構建一個C2 遠控木馬
最后一章將討論Go 語言中C2 植入程序和服務器的實際實現。我們將利用前面章節所學的知識來構建C2 通道。C2 客戶機/服務器實現由于其定制性質,將規避基于簽名的安全控制,并且試圖繞過啟發式和基于網絡的出口控制。
內容簡介:

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

第1章Go語言基礎1
1.1設置開發環境1
1.1.1下載和安裝Go1
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.Writer32
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.1Go的HTTP基礎知識45
3.1.1調用HTTPAPI46
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使用BingScraping解析文檔元數據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.1HTTP服務器基礎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使用WebSocketAPI實現按鍵記錄.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.1SMB包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安裝MicrosoftSQLServer數據庫并寫入數據.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.2SQL注入模糊測試193
9.2將漏洞利用移植到Go198
9.2.1從Python移植漏洞利用199
9.2.2從C移植漏洞利用202
9.3在Go中構建shellcode215
9.3.1C轉換216
9.3.2十六進制轉換216
9.3.3num轉換217
9.3.4raw轉換217
9.3.5Base64編碼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向LuaVM注冊函數.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.1WindowsAPI的函數OpenProcess()265
12.2unsafe.Pointer和uintptr類型268
12.3使用syscall包執行進程注入270
12.3.1定義WindowsDLL并給變量賦值272
12.3.2使用OpenProcessWindowsAPI獲取進程令牌.273
12.3.3使用VirtualAllocExWindowsAPI操作內存.276
12.3.4使用WriteProcessMemoryWindowsAPI寫入內存.276
12.3.5使用GetProcessAddressWindowsAPI查找LoadLibraryA.277
12.3.6使用CreateRemoteThreadWindowsAPI執行惡意DLL.278
12.3.7使用WaitforSingleObjectWindowsAPI驗證注入.279
12.3.8使用VirtualFreeExWindowsAPI進行清理.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安裝CWindows工具鏈293
12.5.2使用C和WindowsAPI創建一個消息框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安裝用于定義gRPCAPI的ProtocolBuffers.320
14.1.2創建項目工作區.320
14.2定義和構建gRPCAPI321
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添加ASCIIArt.333
14.8小結334
序: