關(guān)于我們
書單推薦
新書推薦
|
Go黑帽子 滲透測試編程之道 學(xué)習(xí)內(nèi)容: 如何開發(fā)用于你自己安全項(xiàng)目的高性能工具。 如何創(chuàng)建與遠(yuǎn)程API交互的可用工具。 如何抓取任意HTML數(shù)據(jù)。 如何使用Go的標(biāo)準(zhǔn)包net/http構(gòu)建HTTP服務(wù)器。 如何編寫自己的DNS服務(wù)器和代理。 如何使用DNS隧道建立一個(gè)C2通道以突破限制性網(wǎng)絡(luò)。 如何創(chuàng)建漏洞模糊器(fuzzer)以發(fā)現(xiàn)應(yīng)用程序的安全漏洞。 如何使用插件和擴(kuò)展使產(chǎn)品可以面向未來。 如何構(gòu)建RC2對稱密鑰暴力破解工具。 如何在(PNG)圖像中植入數(shù)據(jù)。 準(zhǔn)備好擴(kuò)展你的安全工具庫了嗎? 那我們出發(fā)(Go)吧! 《Go黑帽子 滲透測試編程之道》探索了Go的陰暗面,Go是一種因?yàn)楹唵、高效和可靠而受到黑客推崇的流行編程語言。本書從安全從業(yè)者和黑客的角度出發(fā),提供了一系列實(shí)用的策略,以幫助你使用Go的功能來測試系統(tǒng)、構(gòu)建和自動(dòng)化工具以滿足你的需求,并提高你的進(jìn)攻性安全技能。 前 言大約6 年來,我們3 個(gè)人領(lǐng)導(dǎo)了北美專用滲透測試咨詢。作為首席顧問,我們代表客戶執(zhí)行了項(xiàng)目的相關(guān)技術(shù)工作,包括網(wǎng)絡(luò)滲透測試;我們還率先開發(fā)出了更好的工具、流程和方法。在某些時(shí)候,我們采用Go 作為我們的主要開發(fā)語言之一。 Go 提供了很好的語言特性,在性能、安全性和易用性之間取得了平衡。我們在開發(fā)工具時(shí)將其作為我們的默認(rèn)語言。終,我們心甘情愿地成為這種語言的倡導(dǎo)者,將其推薦給我們在安全行業(yè)的其他同事。這是因?yàn)槲覀冇X得Go 這種優(yōu)秀的語言應(yīng)該進(jìn)入更多人的視野。 在本書中,我們將帶你從安全從業(yè)人員和黑客的角度出發(fā),全面了解Go 編程語言。 與其他黑客類圖書不同的是,我們將不僅向你展示如何自動(dòng)化第三方或商業(yè)工具(盡管我們會稍微討論一下),而且將深入探討各種具有實(shí)用價(jià)值的主題,這些主題涉及對于對抗有用的特定問題、協(xié)議或策略。此外,還將介紹TCP、HTTP 和DNS 協(xié)議,以及與Metasploit和Shodan 交互、搜索文件系統(tǒng)和數(shù)據(jù)庫、從其他語言到Go 的漏洞移植、編寫SMB 客戶端的核心函數(shù)、攻擊Windows、交叉編譯二進(jìn)制文件、加密相關(guān)的內(nèi)容、調(diào)用C 庫、與Windows API 交互等。 本書的適用對象 本書適用于所有想要學(xué)習(xí)如何使用Go 開發(fā)自己的黑客工具的人。在我們的整個(gè)職業(yè)生涯中,尤其是作為顧問,我們一直提倡將編程作為滲透測試人員和安全從業(yè)人員必須具備的基本技能。特別值得一提的是,編碼能力可以增強(qiáng)你對軟件工作原理及其會遭到怎樣的攻擊的理解。此外,如果你已經(jīng)是軟件程序員,則將會對他們在保護(hù)軟件方面面臨的挑戰(zhàn)有更全面的了解,因而可以更好地利用個(gè)人經(jīng)驗(yàn)來提出破解方法,消除誤報(bào)并找出隱蔽的漏洞。編寫代碼通常會迫使你與第三方庫以及各種應(yīng)用程序棧和框架進(jìn)行 交互。對很多人(包括我們)來說,親自操作和不斷修改才能使個(gè)人得到的發(fā)展。 為充分利用本書,我們鼓勵(lì)你復(fù)制本書的官方代碼庫,這樣你就擁有了我們將要討論的所有示例(請通過https://github.com/blackhat-go/bhg/查找和下載)。 本書的不同之處 本書不是一般意義上的Go 編程介紹,而是關(guān)于使用Go 開發(fā)安全工具的介紹。我們首先是黑客,然后才是程序員。我們中沒有一個(gè)人曾經(jīng)是軟件工程師。因此,作為黑客,我們更看重功能性而不是優(yōu)雅性。在很多情況下,我們都選擇像黑客一樣編寫代碼,而忽略了軟件設(shè)計(jì)的一些習(xí)慣用法或?qū)嵺`。對于顧問來說,時(shí)間就是金錢,而開發(fā)的代碼越簡單,用時(shí)就越少。因此,在功能性與優(yōu)雅性之間,我們選擇了前者。當(dāng)你需要快速創(chuàng)建一個(gè)問題的解決方案時(shí),樣式風(fēng)格則是次要的。 這必然會激怒Go 純粹主義者,他們可能會在推特上對我們說,你們沒有優(yōu)雅地處理所有的錯(cuò)誤情況,你們的示例可以被優(yōu)化,或者有更好的構(gòu)造或方法來產(chǎn)生期望的結(jié)果。大多數(shù)情況下,我們并不關(guān)心教給你的是不是好的、雅的或者百分之百理想的解決方案,當(dāng)然前提是這樣做不會對終結(jié)果造成什么影響。盡管我們將簡要介紹語言語法,但這樣做純粹是為了構(gòu)建我們可以奠定的基線基礎(chǔ)。事實(shí)上,我們這里想要教會你的不是如何用Go 優(yōu)雅地進(jìn)行編程,而是如何使用Go 開發(fā)黑客工具。 為什么要使用Go 進(jìn)行黑客攻擊 在Go 問世之前,你可能會使用某種動(dòng)態(tài)類型語言(如Python、Ruby 或PHP)。這里你優(yōu)先考慮的是其易用性,而很少會考慮其性能和安全性。另外,你還可以選擇某種靜態(tài)類型語言(例如C 或C ),這類語言以高性能和安全見長,但易用性不太好。Go 擺脫了其主要祖先C 的許多缺點(diǎn),使開發(fā)更具人性化。同時(shí),它是一種靜態(tài)類型語言,在編譯時(shí)會產(chǎn)生語法錯(cuò)誤,從而極大地保障了代碼在實(shí)際運(yùn)行過程中的安全。與解釋型語言相比,它的性能更好,且在設(shè)計(jì)時(shí)考慮了多核計(jì)算,讓并發(fā)編程成為小兒科。 Go 的以上優(yōu)點(diǎn)并沒有讓它得到安全從業(yè)者的垂青。然而,該語言的許多功能卻給黑客和攻擊者帶來了福音。
Go 將許多關(guān)鍵函數(shù)和庫作為語言標(biāo)準(zhǔn)打包的一部分,從而減少了正確設(shè)置開發(fā)環(huán)境或調(diào)用函數(shù)所需的工作量。
為什么你可能不喜歡Go 同時(shí),我們也認(rèn)識到Go 并不能完美地解決所有問題。以下是該語言的一些缺點(diǎn)。
章節(jié)內(nèi)容概覽 本書的第1 章概述了Go 的基本語法和原理。接下來,我們開始探索可用于工具開發(fā)的示例,包括各種常見的網(wǎng)絡(luò)協(xié)議,例如HTTP、DNS 和SMB。然后,我們深入研究滲透測試人員遇到的各種手段和問題,解決包括數(shù)據(jù)竊取、數(shù)據(jù)包嗅探和漏洞利用開發(fā)在內(nèi)的主題。后,我們簡短討論了如何創(chuàng)建動(dòng)態(tài)的、可插入的工具,并且深入研究加密技術(shù)以及如何攻擊Microsoft Windows 和實(shí)現(xiàn)隱寫術(shù)。 許多情況下,你都有機(jī)會擴(kuò)展我們展示給你的工具以實(shí)現(xiàn)特定目的。盡管我們始終提供可靠的示例,但我們的真正目的是為你提供知識和基礎(chǔ),而你則可以此為基礎(chǔ)來擴(kuò)展或重新開發(fā)示例以實(shí)現(xiàn)你的目標(biāo)。授之以魚,不如授之以漁這就是我們的追求。 在繼續(xù)閱讀本書接下來的內(nèi)容之前,請務(wù)必牢記這一點(diǎn):我們(作者和出版商)創(chuàng)作的內(nèi)容僅供合法使用。我們不會為你選擇實(shí)施的邪惡或非法行為承擔(dān)任何責(zé)任。這里的所有內(nèi)容僅用于教育目的;未經(jīng)授權(quán),請勿對系統(tǒng)或應(yīng)用程序進(jìn)行任何形式的滲透測試。 以下是對每一章內(nèi)容的概述。 第1 章:Go 語言基礎(chǔ) 該章介紹Go 編程語言的基礎(chǔ)知識,以幫助你理解本書中的概念。這包括對Go 的基本語法和習(xí)慣用法的簡要介紹。除此之外,我們還將討論Go 生態(tài)系統(tǒng),包括支持工具、IDE、依賴管理等。對編程語言不熟悉的讀者可以在學(xué)習(xí)了Go 的一些基本知識后,更好地理解、實(shí)現(xiàn)和擴(kuò)展后續(xù)章節(jié)中的示例。 第2 章:TCP、掃描器和代理 該章介紹Go 的基本概念、并發(fā)基礎(chǔ)和模式、輸入/輸出(I/O)以及如何通過實(shí)際TCP應(yīng)用程序使用接口。我們將首先引導(dǎo)你創(chuàng)建一個(gè)簡單的TCP 端口掃描器,它使用解析的命令行選項(xiàng)掃描列表中的端口。這能讓你直觀地感受到Go 代碼相較其他語言的簡單性,并且有助于你理解基本類型、用戶輸入和錯(cuò)誤處理。接下來,我們將討論如何通過引入并發(fā)功能來提高此端口掃描器的效率和速度。然后,我們將通過構(gòu)建一個(gè)TCP 代理(一個(gè)端口轉(zhuǎn)發(fā)器)引入I/O 的相關(guān)知識:從基本示例開始,通過改進(jìn)代碼創(chuàng)建一種更可靠的解決方案。后,我們將在Go 中重新創(chuàng)建Netcat 的安全巨洞功能,教你如何在操作stdin 和stdout 以及通過TCP 重定向它們時(shí)運(yùn)行操作系統(tǒng)命令。 第3 章:HTTP 客戶端以及與工具的遠(yuǎn)程交互 HTTP 客戶端是與現(xiàn)代Web 服務(wù)器架構(gòu)交互的關(guān)鍵組件。該章將向你展示如何創(chuàng)建執(zhí)行各種常見Web 交互所需的HTTP 客戶端。你將使用多種格式與Shodan 和Metasploit進(jìn)行交互。此外,我們還將演示如何使用搜索引擎,以及使用它們來獲取和解析文檔元數(shù)據(jù),以便提取對組織分析活動(dòng)有用的信息。 第4 章:HTTP 服務(wù)器、路由和中間件 該章介紹創(chuàng)建HTTP 服務(wù)器所需的概念和約定。我們將討論常見的路由、中間件和模板樣式,利用這些知識創(chuàng)建憑證收割服務(wù)器和鍵盤記錄器。后,我們將演示如何通過構(gòu)建反向HTTP 代理來復(fù)用C2 連接。 第5 章:DNS 利用 該章將介紹DNS 的基本概念。首先,將執(zhí)行客戶端操作,包括如何查找特定的域記錄。然后將向你展示如何編寫一個(gè)自定義的DNS 服務(wù)器和DNS 代理,這兩個(gè)都對C2操作很有用。 第6 章:與SMB 和NTLM 交互 我們將探索SMB 和NTLM 協(xié)議并以此為基礎(chǔ)討論在Go 中的協(xié)議實(shí)現(xiàn)。我們將使用SMB 協(xié)議的部分實(shí)現(xiàn)討論數(shù)據(jù)的編組和解組、自定義字段標(biāo)簽的使用等。此外,我們還將討論并演示如何使用SMB 協(xié)議的部分實(shí)現(xiàn)檢索SMB 簽名策略以及進(jìn)行密碼猜測攻擊。 第7 章:濫用數(shù)據(jù)庫和文件系統(tǒng) 掠奪數(shù)據(jù)是對抗測試的一個(gè)關(guān)鍵方面。數(shù)據(jù)存在于眾多資源(包括數(shù)據(jù)庫和文件系統(tǒng))中。該章介紹了在各種常見的SQL 和NoSQL 平臺上進(jìn)行連接和與數(shù)據(jù)庫交互的基本方法。你將學(xué)習(xí)連接到SQL 數(shù)據(jù)庫和運(yùn)行查詢的基本知識。我們將向你展示如何在數(shù)據(jù)庫和表中搜索敏感信息,這是在后滲透階段使用的一種常見技術(shù)。我們還將演示如何遍歷文件系統(tǒng)和檢查文件中的敏感信息。 第8 章:原始數(shù)據(jù)包處理 我們將向你展示如何使用基于libpcap 的gopacket 庫來嗅探和處理網(wǎng)絡(luò)數(shù)據(jù)包。你將學(xué)習(xí)如何識別可用的網(wǎng)絡(luò)設(shè)備、如何使用數(shù)據(jù)包過濾器以及如何處理這些數(shù)據(jù)包。然后我們將開發(fā)一個(gè)端口掃描程序,它可以通過各種保護(hù)機(jī)制(包括syn-flood 和syn-cookies)可靠地進(jìn)行掃描,但這些機(jī)制會導(dǎo)致正常的端口掃描出現(xiàn)過多的誤報(bào)。 第9 章:編寫和移植利用代碼 該章幾乎只關(guān)注漏洞利用。首先創(chuàng)建一個(gè)模糊器來發(fā)現(xiàn)不同類型的漏洞。該章的后半部分將討論如何從其他語言移植現(xiàn)有的漏洞利用到Go 中。要討論的內(nèi)容包括如何移植Java 反序列化利用和臟牛(Dirty COW)提權(quán)利用。我們將在該章結(jié)束時(shí)討論如何創(chuàng)建和轉(zhuǎn)換shellcode 以便用在Go 程序中。 第10 章:Go 插件和可擴(kuò)展工具 我們將介紹兩種不同的創(chuàng)建可擴(kuò)展工具的方法。Go 1.8 版中引入的種方法是使用Go 的本地插件機(jī)制。我們將討論這種方法的用例并討論另外一種利用Lua 創(chuàng)建可擴(kuò)展工具的方法。我們將演示一些實(shí)例,以闡釋如何選擇合適的方法來執(zhí)行一個(gè)常見的安全任務(wù)。 第11 章:針對密碼學(xué)的攻擊和實(shí)現(xiàn) 該章將介紹有關(guān)如何使用Go 進(jìn)行對稱和非對稱加密的基本知識,使得你能夠通過標(biāo)準(zhǔn)Go 包來使用和理解加密技術(shù)。Go 是少數(shù)幾種不使用第三方庫進(jìn)行加密而是在語言中使用本地實(shí)現(xiàn)的語言之一。這使得代碼易于導(dǎo)航、修改和理解。 我們將通過檢查常見用例和創(chuàng)建工具來探索標(biāo)準(zhǔn)庫。該章將向你展示如何執(zhí)行散列、消息驗(yàn)證和加密。后,我們將演示如何對RC2 加密密文進(jìn)行暴力破解。 第12 章:Windows 系統(tǒng)交互與分析 在有關(guān)攻擊Windows 的討論中,我們將演示與Windows 本地API 交互的方法,探索syscall 包以執(zhí)行進(jìn)程注入,并且學(xué)習(xí)如何構(gòu)建可移植可執(zhí)行(Portable Executable,PE)二進(jìn)制解析器。該章后將討論如何通過Go 的C 互操作機(jī)制調(diào)用本地C 庫。 第13 章:使用隱寫術(shù)隱藏?cái)?shù)據(jù) 隱寫術(shù)是將信息或文件隱藏在另一個(gè)文件中。該章介紹隱寫術(shù)的一種變體:在PNG圖像文件的內(nèi)容中隱藏任意數(shù)據(jù)。這些技術(shù)對于過濾信息、創(chuàng)建混淆的C2 消息以及繞過檢測或預(yù)防性的控制非常有用。 第14 章:構(gòu)建一個(gè)C2 遠(yuǎn)控木馬 后一章將討論Go 語言中C2 植入程序和服務(wù)器的實(shí)際實(shí)現(xiàn)。我們將利用前面章節(jié)所學(xué)的知識來構(gòu)建C2 通道。C2 客戶機(jī)/服務(wù)器實(shí)現(xiàn)由于其定制性質(zhì),將規(guī)避基于簽名的安全控制,并且試圖繞過啟發(fā)式和基于網(wǎng)絡(luò)的出口控制。 Tom Steele、Chris Patten和Dan Kottmann分享了他們30多年的滲透測試和進(jìn)攻性俺安全經(jīng)驗(yàn),并舉辦了多次Go培訓(xùn)和開發(fā)課程(有關(guān)詳細(xì)信息,請參閱書中內(nèi)容)。 第1 章 Go 語言基礎(chǔ)1 1.1 設(shè)置開發(fā)環(huán)境 1 1.1.1 下載和安裝Go 1 1.1.2 設(shè)置GOROOT 以定義二進(jìn)制文件的位置 2 1.1.3 設(shè)置GOPATH 以確定Go工作區(qū)的位置 2 1.1.4 選擇一個(gè)集成開發(fā)環(huán)境 3 1.1.5 常用的Go 工具命令 6 1.2 理解Go 的語法 9 1.2.1 數(shù)據(jù)類型10 1.2.2 控制結(jié)構(gòu)13 1.2.3 并發(fā)15 1.2.4 錯(cuò)誤處理17 1.2.5 處理結(jié)構(gòu)化數(shù)據(jù)18 1.3 小結(jié)19 第2 章 TCP、掃描器和代理 21 2.1 理解TCP 的握手機(jī)制21 2.2 通過端口轉(zhuǎn)發(fā)繞過防火墻22 2.3 編寫一個(gè)TCP 掃描器23 2.3.1 測試端口可用性23 2.3.2 執(zhí)行非并發(fā)掃描24 2.3.3 執(zhí)行并發(fā)掃描26 2.4 構(gòu)造TCP 代理31 2.4.1 使用io.Reader 和io.Writer 32 2.4.2 創(chuàng)建回顯服務(wù)器 35 2.4.3 通過創(chuàng)建帶緩沖的監(jiān)聽器來改進(jìn)代碼 37 2.4.4 代理一個(gè)TCP 客戶端 39 2.4.5 復(fù)現(xiàn)Netcat 命令執(zhí)行 41 2.5 小結(jié) 44 第3 章 HTTP 客戶端以及與工具的遠(yuǎn)程交互 45 3.1 Go 的HTTP 基礎(chǔ)知識 45 3.1.1 調(diào)用HTTP API 46 3.1.2 生成一個(gè)請求 47 3.1.3 使用結(jié)構(gòu)化響應(yīng)解析 48 3.2 構(gòu)建與Shodan 交互的HTTP 客戶端 51 3.2.1 回顧構(gòu)建API 客戶端的步驟 51 3.2.2 設(shè)計(jì)項(xiàng)目結(jié)構(gòu) 52 3.2.3 清理API 調(diào)用 52 3.2.4 查詢Shodan 訂閱情況 53 3.2.5 創(chuàng)建一個(gè)客戶端 58 3.3 與Metasploit 交互 59 3.3.1 配置環(huán)境 59 3.3.2 定義目標(biāo) 61 3.3.3 獲取有效令牌 62 3.3.4 定義請求和響應(yīng)方法 63 3.3.5 創(chuàng)建配置結(jié)構(gòu)體和RPC方法64 3.3.6 執(zhí)行遠(yuǎn)程調(diào)用65 3.3.7 創(chuàng)建實(shí)用程序67 3.4 使用Bing Scraping 解析文檔元數(shù)據(jù)69 3.4.1 配置環(huán)境和規(guī)劃69 3.4.2 定義元數(shù)據(jù)包71 3.4.3 把數(shù)據(jù)映射到結(jié)構(gòu)體72 3.4.4 使用Bing 搜索和接收文件.73 3.5 小結(jié)77 第4 章 HTTP 服務(wù)器、路由和中間件79 4.1 HTTP 服務(wù)器基礎(chǔ)79 4.1.1 構(gòu)建一個(gè)簡單的服務(wù)器80 4.1.2 構(gòu)建一個(gè)簡單的路由器81 4.1.3 構(gòu)建簡單的中間件82 4.1.4 使用gorilla/mux 包進(jìn)行路由84 4.1.5 使用negroni 包構(gòu)建中間件.85 4.1.6 使用negroni 包添加身份驗(yàn)證88 4.1.7 使用模板生成HTML 響應(yīng).90 4.2 憑證收割92 4.3 使用WebSocket API 實(shí)現(xiàn)按鍵記錄.96 4.4 多路命令與控制100 4.5 小結(jié).104 第5 章 DNS 利用 105 5.1 編寫DNS 客戶端105 5.1.1 檢索A 記錄106 5.1.2 使用Msg 結(jié)構(gòu)體處理應(yīng)答.107 5.1.3 枚舉子域.109 5.1.4 查詢A 記錄和CNAME記錄110 5.1.5 工人函數(shù)113 5.1.6 使用bufio 包創(chuàng)建一個(gè)文本掃描器.114 5.1.7 收集和顯示結(jié)果.115 5.2 編寫DNS 服務(wù)器120 5.2.1 實(shí)驗(yàn)環(huán)境搭建和服務(wù)器介紹120 5.2.2 創(chuàng)建DNS 服務(wù)器和代理123 5.3 小結(jié).132 第6 章 與SMB 和NTLM 交互.133 6.1 SMB 包133 6.2 理解SMB .134 6.2.1 理解SMB 安全令牌135 6.2.2 創(chuàng)建一個(gè)SMB 會話135 6.2.3 使用結(jié)構(gòu)域的混合編碼.136 6.2.4 了解元數(shù)據(jù)和引用字段.139 6.2.5 理解SMB 實(shí)現(xiàn).140 6.3 使用SMB 包猜測密碼147 6.4 通過pass-the-hash 技術(shù)重用密碼.149 6.5 恢復(fù)NTLM 密碼.151 6.5.1 計(jì)算散列值151 6.5.2 恢復(fù)NTLM 散列值152 6.6 小結(jié).153 第7 章 濫用數(shù)據(jù)庫和文件系統(tǒng).155 7.1 使用Docker 設(shè)置數(shù)據(jù)庫156 7.1.1 安裝MongoDB 數(shù)據(jù)庫并寫入數(shù)據(jù).156 7.1.2 安裝PostgreSQL 和MySQL數(shù)據(jù)庫并寫入數(shù)據(jù).158 7.1.3 安裝Microsoft SQL Server數(shù)據(jù)庫并寫入數(shù)據(jù).159 7.2 在Go 中連接和查詢數(shù)據(jù)庫 160 7.2.1 查詢MongoDB 數(shù)據(jù)庫 160 7.2.2 查詢SQL 數(shù)據(jù)庫 162 7.3 構(gòu)建數(shù)據(jù)庫礦工 163 7.3.1 實(shí)現(xiàn)一個(gè)MongoDB數(shù)據(jù)庫礦工 166 7.3.2 實(shí)現(xiàn)一個(gè)MySQL數(shù)據(jù)庫礦工 169 7.4 掠奪文件系統(tǒng) 172 7.5 小結(jié) 174 第8 章 原始數(shù)據(jù)包處理 175 8.1 配置環(huán)境 175 8.2 使用pcap 子包識別設(shè)備 176 8.3 實(shí)時(shí)捕獲和結(jié)果過濾 177 8.4 嗅探和顯示明文用戶憑證 180 8.5 通過SYN 泛洪保護(hù)進(jìn)行端口掃描 182 8.5.1 檢查TCP 標(biāo)志位 183 8.5.2 構(gòu)建BPF 過濾器 183 8.5.3 編寫端口掃描器 184 8.6 小結(jié) 187 第9 章 編寫和移植利用代碼 189 9.1 創(chuàng)建一個(gè)模糊測試器 189 9.1.1 緩沖區(qū)溢出模糊測試 190 9.1.2 SQL 注入模糊測試 193 9.2 將漏洞利用移植到Go 198 9.2.1 從Python 移植漏洞利用 199 9.2.2 從C 移植漏洞利用 202 9.3 在Go 中構(gòu)建shellcode 215 9.3.1 C 轉(zhuǎn)換 216 9.3.2 十六進(jìn)制轉(zhuǎn)換 216 9.3.3 num 轉(zhuǎn)換 217 9.3.4 raw 轉(zhuǎn)換 217 9.3.5 Base64 編碼 218 9.3.6 一個(gè)關(guān)于匯編的注意事項(xiàng).219 9.4 小結(jié).219 第10 章 Go 插件和可擴(kuò)展工具221 10.1 使用Go 的原生插件系統(tǒng)222 10.1.1 創(chuàng)建主程序.223 10.1.2 構(gòu)建一個(gè)密碼猜測插件226 10.1.3 運(yùn)行掃描器.228 10.2 基于Lua 構(gòu)建插件.229 10.2.1 創(chuàng)建head() HTTP 函數(shù)230 10.2.2 創(chuàng)建函數(shù)get() 231 10.2.3 向Lua VM 注冊函數(shù).233 10.2.4 編寫函數(shù)main().233 10.2.5 創(chuàng)建插件腳本.234 10.2.6 測試Lua 插件.235 10.3 小結(jié)236 第11 章 針對密碼學(xué)的攻擊和實(shí)現(xiàn).237 11.1 回顧基本密碼學(xué)概念.237 11.2 理解標(biāo)準(zhǔn)的Crypto 庫.238 11.3 探索散列.239 11.3.1 破解MD5 和SHA-512散列值.239 11.3.2 實(shí)現(xiàn)bcrypt241 11.4 驗(yàn)證消息.243 11.5 加密數(shù)據(jù).245 11.5.1 對稱密鑰加密.245 11.5.2 非對稱加密.248 11.6 暴力破解RC2.255 11.6.1 準(zhǔn)備工作.256 11.6.2 生產(chǎn)工作.258 11.6.3 執(zhí)行工作和解密數(shù)據(jù).260 11.6.4 編寫函數(shù)main() .261 11.6.5 運(yùn)行程序.263 11.7 小結(jié).264 第12 章 Windows 系統(tǒng)交互與分析 265 12.1 Windows API 的函數(shù)OpenProcess()265 12.2 unsafe.Pointer 和uintptr類型268 12.3 使用syscall 包執(zhí)行進(jìn)程注入270 12.3.1 定義Windows DLL并給變量賦值272 12.3.2 使用OpenProcess Windows API 獲取進(jìn)程令牌.273 12.3.3 使用VirtualAllocEx Windows API 操作內(nèi)存.276 12.3.4 使用WriteProcessMemory Windows API 寫入內(nèi)存.276 12.3.5 使用GetProcessAddress Windows API 查找LoadLibraryA .277 12.3.6 使用CreateRemoteThread Windows API 執(zhí)行惡意DLL.278 12.3.7 使用WaitforSingleObject Windows API 驗(yàn)證注入.279 12.3.8 使用VirtualFreeEx Windows API 進(jìn)行清理.280 12.3.9 附加練習(xí).281 12.4 可移植的可執(zhí)行文件281 12.4.1 理解PE 文件格式282 12.4.2 編寫一個(gè)PE 解析器282 12.4.3 附加練習(xí).293 12.5 在Go 中使用C293 12.5.1 安裝C Windows 工具鏈293 12.5.2 使用C 和Windows API創(chuàng)建一個(gè)消息框294 12.5.3 在C 程序中嵌入Go代碼.295 12.6 小結(jié).297 第13 章 使用隱寫術(shù)隱藏?cái)?shù)據(jù).299 13.1 探索PNG 格式.299 13.1.1 文件頭.300 13.1.2 塊序列.300 13.2 讀取圖像字節(jié)數(shù)據(jù).301 13.2.1 讀取頭數(shù)據(jù).302 13.2.2 讀取塊序列.303 13.3 寫入圖像字節(jié)數(shù)據(jù)以植入載荷.306 13.3.1 查找塊偏移量.306 13.3.2 使用方法ProcessImage()寫入字節(jié).306 13.4 使用XOR 編碼和解碼圖像字節(jié)數(shù)據(jù).311 13.5 小結(jié).316 13.6 附加練習(xí).316 第14 章 構(gòu)建一個(gè)C2 遠(yuǎn)控木馬.319 14.1 入門.319 14.1.1 安裝用于定義gRPC API的Protocol Buffers .320 14.1.2 創(chuàng)建項(xiàng)目工作區(qū).320 14.2 定義和構(gòu)建gRPC API 321 14.3 創(chuàng)建服務(wù)器323 14.3.1 實(shí)現(xiàn)協(xié)議接口.323 14.3.2 編寫函數(shù)main() .325 14.4 創(chuàng)建客戶端植入程序.327 14.5 構(gòu)建管理組件.329 14.6 運(yùn)行RAT330 14.7 改進(jìn)RAT330 14.7.1 加密通信.331 14.7.2 處理連接中斷.331 14.7.3 注冊植入程序 331 14.7.4 添加數(shù)據(jù)庫持久 332 14.7.5 支持多個(gè)植入程序 332 14.7.6 添加植入程序功能 332 14.7.7 鏈接操作系統(tǒng)命令 333 14.7.8 增強(qiáng)植入程序的真實(shí)性并實(shí)踐良好的運(yùn)營安全333 14.7.9 添加ASCII Art .333 14.8 小結(jié)334
你還可能感興趣
我要評論
|