- 黑客攻防技術寶典:Web實戰篇(第2版)
- (英)Dafydd Stuttard Marcus Pinto
- 8288字
- 2020-05-06 16:49:27
前言
本書是發現并利用Web應用程序安全漏洞的實用指南。這里的“Web應用程序”是指通過使用Web瀏覽器與Web服務器進行通信,從而加以訪問的應用程序。本書不僅分析了大量各種各樣的技術,如數據庫、文件系統與Web服務器,而且討論了它們在Web應用程序中的使用情況。
如果你想了解如何運行端口掃描、攻擊防火墻或以其他方式對服務器進行滲透測試,我們建議你閱讀其他圖書。但是,如果你希望了解滲透測試員如何攻擊Web應用程序、竊取敏感數據、執行未授權操作,那么本書可以滿足你的需要。本書將就以上主題展開全面而翔實的討論。
本書概述
本書極其注重實用性。雖然我們提供了足夠的背景信息與理論知識,以幫助讀者了解Web應用程序中包含的漏洞;但是,滲透測試員在攻擊Web應用程序時所需要實施的步驟及采用的技巧,才是我們討論的重點所在。本書詳細闡述了探查每一種漏洞所需采用的特定步驟,以及如何利用它執行未授權操作。我們還根據多年的工作經驗,列出大量實例,說明在當今Web應用程序中存在的各種安全漏洞。
另一方面,安全意識就像一把雙刃劍。開發者能夠從了解攻擊者所使用的方法中受益;相反,黑客也可以通過了解應用程序的防御機制而窺探它的受攻擊面。除介紹安全漏洞與攻擊技巧外,我們還將詳細介紹應用程序為抵御攻擊者而采取的應對措施。同時,Web應用程序滲透測試員還可以從本書中獲得大量實用的建議,以幫助應用程序所有者強化他們的應用程序。
本書目標讀者
本書的目標讀者是Web應用程序滲透測試員,以及負責開發和管理Web應用程序的人,因為了解你的敵人有助于對他們進行有效防御。
我們希望讀者熟悉核心安全概念,如登錄和訪問控制;并希望讀者掌握基本的核心Web技術,如瀏覽器、Web服務器和HTTP。通過閱讀本書提供的解釋說明或其他參考資料,可以迅速彌補當前讀者在這些領域的知識欠缺。
在介紹各種安全漏洞的過程中,我們將提供代碼片斷,說明應用程序為何易受攻擊。這些示例都非常簡單,不需要事先了解編寫代碼的語言就能夠理解它們,但是,具備閱讀或編寫代碼的基礎知識就再好不過了。
本書結構
總體而言,本書根據不同主題之間的依賴關系將內容組織在一起。如果你還不了解黑客是如何攻擊Web應用程序的,應該從頭至尾讀完本書,以了解在后續有關章節中需要用到的背景信息和技巧。如果你在這方面已經擁有一定的經驗,可以直接跳到特別感興趣的任何章節或部分。必要時,我們將提供其他章節的交叉參考,以幫助你彌補理解上的欠缺。
本書前3章介紹一些背景信息,描述當前Web應用程序的安全狀況,說明它將來的發展趨勢。然后將介紹影響Web應用程序的核心安全問題,以及應用程序為解決這些問題所采取的防御機制。同時還將介紹當前Web應用程序所使用的關鍵技術。
本書的主要部分重點討論核心主題——滲透測試員在攻擊Web應用程序時使用的技巧。我們根據實施全面攻擊所需要完成的關鍵任務組織材料,這些任務依次為:解析應用程序的功能,檢查和攻擊它的核心防御機制,探查特殊類型的安全漏洞。
最后3章對本書涵蓋的各種主題進行簡要總結:描述如何在應用程序源代碼中查找漏洞;回顧能夠幫助滲透測試員攻擊Web應用程序的工具;詳細介紹攻擊方法論,說明滲透測試員如何對一個目標應用程序實施全面而深入的攻擊。
第1章描述當前在因特網上運行的Web應用程序的安全狀況。盡管軟件商常常保證Web應用程序是安全的,但絕大多數的應用程序并不真正安全,只要掌握一些技巧,就能夠攻破它們。Web應用程序中的漏洞源于一個核心問題:用戶可提交任意輸入。這一章將分析造成當今應用程序安全狀況不佳的關鍵因素,并說明Web應用程序中存在的缺陷如何導致組織龐大的技術基礎架構非常易于受到攻擊。
第2章描述Web應用程序為解決“所有用戶輸入都不可信”這個基本問題而采用的核心安全機制。應用程序通過這些機制管理用戶訪問、控制用戶輸入、抵御攻擊者。這些機制還為管理員提供各種功能,幫助他們管理和監控應用程序自身。應用程序的核心安全機制還是它的主要受攻擊面,在對它們實施有效攻擊前,滲透測試員必須了解這些機制的工作原理。
第3章簡要介紹滲透測試員在攻擊Web應用程序時可能遇到的關鍵技術,包括相關HTTP協議、客戶端與服務器端常用的技術以及各種數據編碼方案。已經熟悉主要Web技術的讀者可以跳過本章。
第4章描述滲透測試員在攻擊一個新的應用程序時所需采取的第一步,即盡可能多地收集與應用程序有關的信息,以確定它的受攻擊面,制訂攻擊計劃。滲透測試員需要搜索并探查應用程序,枚舉它的全部內容與功能,確定所有用戶輸入進入點并查明它所使用的技術。
第5章描述了存在漏洞的第一個區域。如果一個應用程序依靠在客戶端實現的控件來保護它的安全,就可能造成這種漏洞。這種保護應用程序的方法往往存在缺陷,因為攻擊者可輕易避開任何客戶端控件。應用程序易于受到攻擊的原因有兩個:(1) 通過客戶端傳送數據,認為這些數據不會被修改;(2) 依賴客戶端對用戶輸入進行檢查。這一章將介紹一系列有用的技術,包括HTML、HTTP與JavaScript所采用的輕量級控件,以及使用Java applet、ActiveX控件、Silverlight和Flash對象的重量級控件。
第6~8章將主要介紹Web應用程序中最重要的防御機制——負責控制用戶訪問的機制。第6章描述應用程序確認用戶身份的各種功能,包括主登錄功能和更加外圍的與驗證有關的功能,如用戶注冊、密碼修改和賬戶恢復功能。驗證機制在設計和執行方面都包含大量漏洞,攻擊者能夠利用它們獲得未授權訪問。這些漏洞包括明顯的缺陷,如保密性不強的密碼和易于受到蠻力攻擊,以及驗證邏輯中存在的更微妙的問題。這一章還將詳細分析許多安全性至關重要的應用程序所采用的多階段登錄機制,并描述這些機制中頻繁出現的新型漏洞。
第7章介紹會話管理機制。大多數應用程序通過有狀態會話這個概念補充無狀態的HTTP協議,幫助它們在不同的請求中確定每個用戶的身份。當Web應用程序受攻擊時,這個機制是一個主要的攻擊目標;因為如果能夠攻破它,就能夠有效避開登錄機制,偽裝成其他用戶,而不必知道他們的證書。這一章還將分析生成和傳送會話令牌過程中存在的各種常見漏洞,并描述發現和利用這些漏洞所需采取的步驟。
第8章說明應用程序如何實施訪問控制。應用程序主要依靠驗證與會話管理機制來完成這項任務。本章將介紹各種破壞訪問控制的技巧,以及探查和利用這些弱點的方法。
第9章和第10章介紹大量相關漏洞。如果應用程序以不安全的方式在解釋型代碼中插入用戶輸入,就會造成這些漏洞。第9章首先詳細介紹SQL注入漏洞,討論各種攻擊方法,從最明顯、最簡單的方法到一系列高級攻擊技巧(如帶外通道、推斷和時間延遲)。對于每一種漏洞和攻擊技巧,我們將描述3種常用數據庫(MS-SQL、Oracle和MySQL)之間的相關差異,然后介紹一系列針對其他數據存儲(包括NoSQL、XPath和LDAP)的類似攻擊。
第10章介紹幾種其他類型的注入漏洞,包括注入操作系統命令,注入Web腳本語言,文件路徑遍歷攻擊,文件包含漏洞,注入XML、SOAP、后端HTTP請求和電子郵件服務。
第11章將介紹應用程序受攻擊面的一個重要的、常被人們忽略的區域——實現其功能的內部邏輯。應用程序邏輯中的漏洞各不相同,它們比SQL注入與跨站點腳本之類的常見漏洞更難以辨別。為此,我們將列舉一系列實例,其中存在的邏輯缺陷導致應用程序易于受到攻擊,借此說明應用程序設計者與開發者所做出的各種錯誤假設。根據這些各不相同的缺陷,我們將進行一系列特殊測試,以確定許多常常難以探測的邏輯缺陷。
第12章和第13章介紹一類廣泛存在且廣受關注的相關漏洞,即應用程序的惡意用戶利用Web應用程序中的缺陷攻擊其他用戶,并以各種方式攻破這些用戶。第12章介紹這中最主要的漏洞——一種影響因特網上的絕大多數Web應用程序的廣泛存在的漏洞。我們將詳細分析各種類型的XSS漏洞,并介紹檢測和利用即使是最難以察覺的XSS漏洞的有效方法。
第13章介紹針對其他用戶的幾種其他類型的攻擊,包括通過請求偽造和UI偽裝誘使用戶執行操作、使用各種客戶端技術跨域獲取數據、各種針對同源策略的攻擊、HTTP消息頭注入、cookie注入和會話固定、開放式重定向、客戶端SQL注入、本地隱私攻擊以及利用ActiveX控件中的漏洞。最后,我們將討論一系列不依賴任何特定Web應用程序中的漏洞、但可以通過任何惡意Web站點或處于適當位置的攻擊者實施的針對用戶的攻擊。
第14章并不介紹任何新的漏洞,而是描述一種滲透測試員攻擊Web應用程序時需要掌握的技巧。由于每種應用程序都各不相同,大多數攻擊都經過某種方式的定制(或自定義),以針對應用程序的特殊行為,以及發現對攻擊有利的操縱方法。這些攻擊還要求提出大量相似的請求,并監控應用程序的響應。手動執行這些請求非常費力,而且容易出錯。要成為真正熟練的Web應用程序黑客,必須盡可能自動實施攻擊步驟,使定制攻擊更加簡單、快捷而高效。本章將詳細描述一種行之有效的方法,以完成這項任務。我們還將討論在使用自動化技巧時遇到的各種障礙,包括防御性的會話處理機制和CAPTCHA控件。此外,我們還將介紹可用于克服這些障礙的工具和技巧。
第15章分析應用程序如何在遭受攻擊時泄露信息。當實施本書描述的其他各種攻擊時,滲透測試員應該始終監控應用程序,以確定其他可供利用的信息泄露來源。我們將介紹如何分析應用程序的反常行為與錯誤消息,以深入了解應用程序的內部工作機制,并細化攻擊。我們還將介紹如何利用存在缺陷的錯誤處理機制,從應用程序中獲取敏感信息。
第16章介紹在以C和C++等本地代碼語言編寫的應用程序中存在的一些重要漏洞。這些漏洞包括緩沖區溢出、整數漏洞和格式化字符串漏洞。這個主題涉及的內容非常廣泛,我們將重點討論如何在Web應用程序中探查這些漏洞,并分析一些實例,了解造成這些漏洞的原因,以及如何對它們加以利用。
第17章介紹一個常被忽略的Web應用程序安全領域。許多應用程序采用一種分層架構,無法恰當地隔離這些層面可能會導致應用程序易于受到攻擊,導致攻擊者能夠利用在其中一個組件中發現的漏洞迅速攻破整個應用程序。共享托管環境帶來另外一些嚴重的威脅,有時,攻擊者可以利用一個應用程序中存在的缺陷或惡意代碼攻破整個環境及其中運行的其他應用程序。本章還會介紹一種眾所周知的共享托管環境“云計算”中出現的各種威脅。
第18章描述各種攻擊技巧,說明如何通過攻擊Web服務器進而攻擊其中運行的Web應用程序。Web服務器中存在的漏洞主要包括服務器配置方面的漏洞以及Web服務器軟件中的安全漏洞。這個主題屬于本書的討論范圍,因為嚴格來講,Web服務器是技術棧的另一個組件。但是,大多數Web服務器都與在它們之中運行的Web應用程序關系密切。因此,本書介紹針對Web服務器的攻擊,因為攻擊者常常可以利用它們直接攻破一個應用程序,而不是首先間接攻破基礎主機,然后再攻擊Web應用程序。
第19章描述另外一種查找安全漏洞的方法。這種方法與本書其他章節討論的方法截然不同。許多時候,我們都可以對應用程序的源代碼進行審查,并且不必得到應用程序所有者的協助。通常,審查應用程序的源代碼可以迅速確定一些漏洞,但在運行的應用程序中探查這些漏洞可能極其困難,或者需要耗費許多時間。我們將介紹一種代碼審查方法,并簡要說明如何對以各種語言編寫的代碼進行審查,以幫助讀者在編程經驗不足的情況下進行有效的代碼審查。
第20章詳細介紹本書描述的各種工具。筆者在攻擊真實的Web應用程序時使用的就是這些工具。我們將分析這些工具的主要功能,并詳細描述充分運用這些工具的工作流類型。另外,討論一些全自動工具能否有效地發現Web應用程序中存在的漏洞,并提供一些提示和建議,說明如何充分利用工具包。
第21章綜合介紹本書描述的所有攻擊步驟與技巧。我們將根據滲透測試員在實施攻擊時所需完成的任務之間的邏輯依賴關系來組織這些步驟與技巧,并對它們進行排序。如果你已經閱讀并理解書中描述的各種漏洞和攻擊技巧,就可以把這個方法當作一個完整的清單和工作計劃,對Web應用程序實施滲透測試。
新增內容簡介
第1版出版4年以來,許多事情發生了改變,而許多事情仍保持原狀。當然,新技術繼續高速發展,這引發了各種新型漏洞和攻擊。同時,黑客們還開發出了新的攻擊技術,設計了利用舊有漏洞的新方法。但是,這些技術或人為因素都不可能引發革命。今天應用程序采用的技術早在許多年前就已經確立,現今的先進攻擊技術所蘊涵的基本概念也早在高效應用這些技術的許多研究人員出生之前就已經成形。Web應用程序安全是一個動態且充滿活力的研究領域,但多年來,人類積累的智慧也在緩慢進化,因此,當前的技術狀況與10年或更久以前的情況截然不同。
第2版并不是對第1版的徹底改寫,第1版的大部分內容,現在仍然適用。第2版約30%的內容為新增內容或改動很大,剩余70%的內容僅有小幅改動或未作任何修改。如果讀者購買了本書,但對這些改動感到失望,請不要放棄。如果你已經掌握了第1版中介紹的所有技巧,說明你已經學會所需的絕大部分技能和知識。這樣的話,你就可以集中精力學習本書的新增內容,迅速了解Web應用程序安全領域近年來的發展變化情況。
第2版的一個顯著特點是,在整本書中提供了所介紹的幾乎所有漏洞的真實示例。讀者可以使用“嘗試訪問”鏈接以交互方式在線運行書中討論的示例,以確認可以發現并利用其中包含的漏洞。書中提供了幾百個“示例實驗室”,讀者可以根據自己閱讀本書的進度逐個訪問這些“實驗室”。訪問這些在線“實驗室”需要支付一定的訂閱費用,這些費用主要用于管理和維護相關基礎設施。
如果讀者希望集中精力學習第2版中的新增內容,以下是對新增或改寫內容的匯總。
第1章僅部分內容有所改動,將介紹Web應用程序的新應用、技術領域的一些顯著趨勢,以及組織的典型安全邊界將如何繼續發展變化。
第2章僅有小幅改動,新增內容將介紹幾個用于避開輸入確認防御的常規技巧示例。
第3章增加了幾節新內容,主要介紹各種新技術及已在第1版中簡要介紹的技術。新增的主題包括REST、Ruby on Rails、SQL、XML、Web服務、CSS、VBScript、文檔對象模型、Ajax、JSON、同源策略和HTML5。
第4章僅有少量更新,以反映用于解析內容和功能的技術的發展趨勢。
第5章進行了大幅改動。具體來說,基本上重新編寫了有關瀏覽器擴展技術的幾節內容,詳細介紹了反編譯和調試字節碼的常規方法、如何處理常規格式的序列化數據,以及如何處理滲透測試過程中遇到的常見問題,包括不支持代理的客戶端和SSL問題。本章還將介紹Silverlight技術。
第6章內容與現今情況保持一致,僅有小幅改動。
第7章新增內容主要介紹自動測試令牌隨機性的新工具。本章還包含有關攻擊加密令牌的新內容,包括如何在不了解所使用的加密算法或加密密鑰的情況下篡改令牌的實用技巧。
第8章將介紹一些訪問控制漏洞,包括由直接訪問服務器端方法以及平臺配置不當(將基于HTTP的方法用于執行訪問控制)導致的漏洞。本章還將介紹一些新工具和技巧,可在一定程度上自動完成測試訪問控制的繁瑣任務。
第9章和第10章的內容經過重組,因而變得更易于管理,其章節安排也更符合邏輯。第9章主要介紹針對其他數據存儲技術的SQL注入和其他類似攻擊。由于SQL注入漏洞已廣為人知,并且在很大程度上得到了解決,因此,本章將著重介紹現在仍然可以發現SQL注入漏洞的實際情形。本章的其他內容也有小幅改動,將介紹當前的技術和攻擊方法。同時,本章還新增了一節內容,用于說明如何使用自動化工具來利用SQL注入漏洞。有關LDAP注入的內容經過大幅改動,以更詳細地介紹特定技術(Microsoft Active Directory和OpenLDAP),以及利用常見漏洞的新技巧。此外,本章還將介紹針對NoSQL的攻擊。
第10章討論以前在第1版第9章中介紹的其他類型的服務器端注入漏洞。新增內容主要介紹XML外部實體注入和注入后端HTTP請求,包括HTTP參數注入/污染和注入URL改寫方案。
第11章將提供更多常見輸入確認功能邏輯缺陷的示例。由于越來越多的應用程序采用加密來保護靜態數據,本章還將介紹如何確定并利用加密提示來解密加密數據的示例。
第1版的第12章主要介紹針對其他應用程序用戶的攻擊。第2版將這一章內容放到了兩章中,因為這些內容過于繁雜,不易管理。第12章主要討論XSS,相關內容經過大幅改動。有關如何避開防御過濾以插入腳本代碼的內容已完全重寫,主要介紹一些新技術和新技巧,包括在當前瀏覽器中執行腳本代碼的各種鮮為人知的方法。同時,本章還將更詳細地介紹如何對腳本代碼進行模糊處理,以避開常用的輸入過濾的方法。本章還將介紹一些現實中新出現的XSS攻擊示例。新增一節內容介紹了如何在充滿挑戰的情況下實施有效的XSS攻擊,涵蓋如何將攻擊擴散到所有應用程序頁面、如何通過cookie和Referer消息頭利用XSS,以及如何在XML等非標準請求和響應內容中利用XSS。此外,本章還將分析瀏覽器的內置XSS過濾器,以及如何避開這些過濾器來實施攻擊。新增幾節還將討論在Web郵件應用程序和上傳文件中利用XSS的特定技巧。本章最后介紹可用于阻止XSS攻擊的各種新的防御措施。
第13章為新增的一章,介紹“攻擊用戶”這一涉及廣泛的主題的其他內容。有關跨站點請求偽造的主題經過更新,將介紹針對登錄功能的攻擊、反CSRF防御中的常見缺陷、UI偽裝攻擊,以及破壞框架防御中的常見缺陷。跨域捕獲數據一節(13.2節)將介紹如何通過注入包含非腳本HTML和CSS的文本來竊取數據的技巧,以及各種使用JavaScript和E4X跨域捕獲數據的技巧。新增一節更詳細地介紹同源策略,包括其在不同瀏覽器擴展技術中的實施情況、HTML5帶來的改變,以及通過代理服務應用程序跨域操作的方法。另設新增節介紹客戶端cookie注入、SQL注入和HTTP請求污染。有關客戶端隱私攻擊的內容經過擴充,將介紹瀏覽器擴展技術和HTML5提供的存儲機制。最后,另一個新增節將集中介紹不依賴任何特殊應用程序中的漏洞、針對Web用戶的攻擊。這些攻擊可以由任何惡意或已被攻破的Web站點,或位于網絡中的適當位置的攻擊者實施。
第14章新增部分內容介紹自動化攻擊過程中遇到的常見障礙,以及如何克服這些障礙。許多應用程序采用防御性的會話處理機制來終止會話,使用臨時的反CSRF令牌,或使用多階段過程來更新應用程序狀態。本章將介紹一些處理這類機制的新工具,以便于繼續應用自動化測試技巧。新增節將介紹CAPTCHA控件,以及一些通常能夠加以利用來破解這些控件的常見漏洞。
第15章包含有關錯誤消息中的XSS及利用解密提示的新章節。
第16章未進行任何更新。
第17章中的新增節主要介紹基于云的體系架構中的漏洞,并更新了有關如何利用體系架構弱點的示例。
第18章包含在應用程序服務器和平臺中發現的一些有趣的新漏洞示例。這些服務器和平臺包括Jetty、JMX管理控制臺、ASP.NET、Apple iDisk服務器、Ruby WEBrick Web服務器和Java Web服務器。另一個新增節介紹突破Web應用程序防火墻的實用方法。
第19章未進行任何更新。
第20章的更新內容將詳細介紹基于代理的工具套件的最新功能。新增節將介紹如何傳送不支持代理的客戶端的流量,以及如何減少因使用攔截代理服務器而在瀏覽器和其他客戶端中出現的SSL錯誤。本章還將詳細介紹使用基于代理的工具套件進行測試時通常采用的工作流程。此外,本章還將討論各種最新Web漏洞掃描器及在各種情況下使用這些掃描器的最佳方法。
第21章的更新內容將介紹在整本書中描述的新的方法論步驟。
需要的工具
本書著重討論滲透測試員在攻擊Web應用程序時所采用的實用技巧。閱讀本書后,你將了解每項攻擊任務的細節、它們涉及的技術以及它們為什么有助于探查和利用各種漏洞。下載某個工具,使用它攻擊一個目標應用程序,并根據它的輸出結果了解應用程序的安全狀況,這些內容并不是本書討論的重點。
也就是說,當實施我們描述的步驟與技巧時,你會發現一些有用、有時甚至是必不可少的工具。所有這些工具都可以在因特網上找到,建議你下載并試用本書介紹的每一個工具。
同步網站內容
本書的同步網站為http://mdsec.net/wahh,你還可以從www.wiley.com/go/webhackerze鏈接到本書的同步網站,其上提供一些掌握各種攻擊技巧所需要的有用資源,你也可以利用這些資源攻擊真實的應用程序。該網站主要包括以下內容:
? 本書列出的一些腳本的源代碼;
? 本書討論的所有工具和其他資源的鏈接;
? 攻擊一個常見應用程序的步驟列表;
? 每章結束部分提出的問題的答案;
? 本書示例中使用的幾百個互動式漏洞“實驗室”,支付一定費用即可訪問,可幫助你提升和改善攻擊技巧。
其他說明
Web應用程序安全是一個有趣而流行的主題。對我們而言,撰寫本書是一種享受,正如每天對應用程序進行滲透測試。我們希望,在學習本書描述的各種攻擊技巧和了解如何防御這些攻擊手段的過程中,你能夠找到樂趣。
此外,我們在此提出嚴正警告。在許多國家,未經所有者許可而攻擊他們的計算機系統的做法屬非法行為。如果未經他人同意,執行我們描述的絕大多數技巧可能會觸犯法律。
本書作者為專業的滲透測試員,他們代表客戶端對Web應用程序實施攻擊,以幫助強化應用程序的安全。近年來,許多安全專業人士與其他人由于未經許可而嘗試或主動攻擊計算機系統,從而犯罪,其職業生涯也因此結束。我們強烈要求你僅在法律許可的范圍內使用本書提供的信息。
- 云原生安全:攻防實踐與體系構建
- CTF競賽權威指南(Pwn篇)
- Advanced Penetration Testing for Highly:Secured Environments(Second Edition)
- 互聯網企業安全高級指南
- Bug Bounty Hunting Essentials
- Kali Linux高級滲透測試(原書第4版)
- 黑客攻擊與防范實戰從入門到精通
- 黑客攻防從入門到精通:命令版
- 信息系統安全等級化保護原理與實踐
- 網絡安全監控實戰:深入理解事件檢測與響應
- 2010年中國互聯網網絡安全報告
- 計算機網絡安全與應用技術(第2版)
- 網站入侵與腳本技術快速防殺
- 黑客與安全技術指南
- Web應用漏洞掃描產品原理與應用