本書以Web漏洞基本原理為切入點,將相似的漏洞歸類,由淺入深、逐一陳述。本書共11章,分別為Web安全概述、計算機網(wǎng)絡基礎知識、測試工具與靶場環(huán)境搭建、傳統(tǒng)后端漏洞(上、下)、前端漏洞(上、下)、新后端漏洞(上、下)、邏輯漏洞(上、下),每章以不同的漏洞類型為小節(jié)內容,盡可能涵蓋已發(fā)現(xiàn)和公開的所有重大Web安全漏洞類型。本書配有53個漏洞實戰(zhàn)案例,并附贈所有漏洞實戰(zhàn)案例的完整源碼,方便讀者學習,獲取方式見封底二維碼。
本書可作為代碼審計、滲透測試、應急響應、基線核查、紅藍對抗、防御加固等相關工作從業(yè)人員的參考資料,亦可作為企業(yè)安全管理者開展企業(yè)安全建設的技術指南,還可作為大中專院校及Web安全培訓班的Web安全培訓教材。
這是一本從Web漏洞深度解析到攻防實戰(zhàn)的Web安全技術書籍,是從事Web安全研究和滲透測試工作者的技術指南;作者團隊為信息安全領域的專家,本書集合了各位專家作者多年的實戰(zhàn)經(jīng)驗,是一本難得的安全技術書籍。
Web安全發(fā)展到今天已經(jīng)有20多年的歷史了,每當接受Web安全相關課題的培訓時筆者就會發(fā)現(xiàn),Web安全雖已發(fā)展多年,但仍然鮮有一部著作能將其所有內容系統(tǒng)性地介紹清楚。這也是作者編寫本書的一個初衷。
2019年,由長亭科技楊坤博士提議,應機械工業(yè)出版社邀請編撰本書,到今天已歷時三年。寫書是一個很枯燥的過程,本著對讀者負責任的態(tài)度,很多內容需要經(jīng)過不斷論證。中間也曾遇到過阻力,甚至想過放棄,但還是堅持了下來。借此向曾經(jīng)對本書貢獻內容的小伙伴們致敬。
在編寫本書時,筆者經(jīng)歷了兩種不同的工作狀態(tài):進一步萬丈深淵,退一步云淡風輕。每當提高對本書創(chuàng)作要求時,就會面臨巨大的完成壓力。而假如對知識點不求甚解,只是為了應付篇幅草草了事,則很快就可以完結。筆者最終還是堅定地選擇了前者,因此,書中代碼基本上沒有單次引用超過一頁紙的情況,力求每字每句都是有知識點的、有意義的。
本書的創(chuàng)作意圖是總結Web安全20年來經(jīng)典的漏洞,其中主要是漏洞原理,當然也不乏攻防技巧、有趣的小故事等。整體思想是:將相似的漏洞歸類,每個漏洞介紹原理、利用方法、攻防對抗衍生的技術,最后配有實戰(zhàn)練習。本書附贈所有漏洞實戰(zhàn)練習的完整源碼,方便讀者結合本書進行學習,獲取方式見封底二維碼。
當然,想要完成本書,單憑筆者一己之力肯定是不行的,多虧有很多小伙伴不吝筆墨,才使得本書能夠完成。解析漏洞的章節(jié)及大多數(shù)實戰(zhàn)環(huán)境來自于國內知名Web安全研究員phith0n(龔瀟),反序列化漏洞、表達式注入漏洞、JNDI注入漏洞章節(jié)出自于國內知名Web安全研究員Voidfyoo(王子航);XSS漏洞章節(jié)由國內知名XSS漏洞研究員Camaro(陳思濤)執(zhí)筆;SSTI模板注入和實戰(zhàn)分析內容來自白菜(劉聰)和zzkk(朱錕)。更有mi_xia(夏明成)、Noxxx(陳軍先、方軍力)合力把關審閱,在此對他們表示由衷的感謝!更要感謝阿里云先知社區(qū)負責人chybeta(宸毅)和機械工業(yè)出版社的編輯老師們,如果沒有他們,本書難以順利出版。最后,感謝我的父母及妻子曉璐對我這三年創(chuàng)作的支持。
Web安全是一門技術類學科,安全知識的獲取離不開動手練習。紙上得來終覺淺,絕知此事要躬行。從實驗中學是本書十分重要的一個思想。因此,本書的各個章節(jié)基本都配備了一些供讀者動手練習的小實驗,大多數(shù)的實驗讀者只需要擁有一臺計算機,安裝好瀏覽器、下載BurpSuite工具和配置Docker環(huán)境即可完成。本書大部分的實驗環(huán)境來自于Vulhub平臺(https://vulhub.org/),非常感謝Vulhub平臺為我們節(jié)省了大量搭建實驗環(huán)境的時間。
1998年SQL注入漏洞問世,拉開了Web安全戰(zhàn)爭的序幕,此間20余載多少信息安全從業(yè)者前赴后繼,為探索Web安全真諦而斗爭。那么Web安全的真諦是什么呢?直到今天,仍未有定論。但是,從這20年發(fā)展的規(guī)律中可窺知一二,筆者于2009年入行,經(jīng)歷了Web安全最為動蕩的時期,此后又有幸經(jīng)歷了Web安全的后十年,而前十年的精彩故事主要是由前輩口口相傳,又通過網(wǎng)絡材料加以佐證。希望僅以本書記錄我所從事和熱衷的事業(yè),也獻給同樣奮戰(zhàn)在安全攻防一線始終未曾離去的你們。
王 放
王放, do9gy,從事Web安全工作十年,致力于Web攻防與Web漏洞研究。曾任騰訊科技安全平臺部高級安全工程師、長亭科技華南區(qū)安全服務負責人、Web安全課程培訓高級講師。目前任綠盟科技對抗自動化攻防顧問。曾于2016年WooYun沙龍深圳站分享議題《漏洞與鎖》。榮獲2021年騰訊WAF挑戰(zhàn)賽冠軍和2022年騰訊主機安全挑戰(zhàn)賽(獵刃計劃)冠軍。
出版說明
前言
第1章 Web安全概述1
1.1 什么是Web安全1
1.2 Web安全發(fā)展規(guī)律1
1.3 Web安全與Web漏洞2
第2章 計算機網(wǎng)絡基礎知識3
2.1 計算機網(wǎng)絡概述3
2.2 TCP協(xié)議的交互5
2.2.1 TCP建立連接的三次握手5
2.2.2 TCP斷開連接的四次揮手6
2.2.3 TCP協(xié)議的基本結構6
2.3 Wireshark工具的使用7
2.3.1 Wireshark監(jiān)聽網(wǎng)卡7
2.3.2 Wireshark數(shù)據(jù)包分析8
2.3.3 實戰(zhàn)1:使用Wireshark分析TCP三次握手9
2.3.4 實戰(zhàn)2:使用Wireshark分析TCP四次揮手9
2.4 HTTP協(xié)議的結構11
2.4.1 HTTP請求的結構11
2.4.2 HTTP響應的結構13
2.5 HTTP協(xié)議交互14
2.6 HTTP協(xié)議的不同表現(xiàn)形式16
2.6.1 GET方法16
2.6.2 POST方法17
2.6.3 multipart/form-data17
2.6.4 chunked18
2.7 HTTPS協(xié)議19
2.7.1 HTTPS協(xié)議簡介19
2.7.2 心臟滴血漏洞(CVE-2014-0160)20
2.8 信息、進制與編碼21
2.8.1 ASCII編碼21
2.8.2 其他字符編碼22
2.8.3 進制概述22
2.8.4 進制轉換23
2.8.5 URL編碼25
2.8.6 Base64編碼26
第3章 測試工具與靶場環(huán)境搭建28
3.1 黑盒測試與白盒測試28
3.2 PoC、Payload與Exp28
3.3 Netcat工具的使用29
3.3.1 實戰(zhàn)3:使用NC發(fā)送簡單的HTTP請求29
3.3.2 實戰(zhàn)4:使用NC發(fā)送復雜的HTTP請求30
3.4 BurpSuite工具的使用31
3.4.1 實戰(zhàn)5:使用BurpSuite攔截并修改HTTP請求31
3.4.2 實戰(zhàn)6:使用BurpSuite重放HTTP請求33
3.4.3 實戰(zhàn)7:使用BurpSuite捕獲HTTPS請求34
3.5 實戰(zhàn)靶場環(huán)境搭建35
3.5.1 LAMP網(wǎng)站架構簡介36
3.5.2 Docker簡介36
3.5.3 實戰(zhàn)8:使用Docker搭建LAMP環(huán)境37
3.5.4 實戰(zhàn)9:使用Docker Compose搭建實驗環(huán)境38
第4章 傳統(tǒng)后端漏洞(上)40
4.1 SQL注入漏洞(上)40
4.1.1 SQL注入漏洞概述40
4.1.2 SQL與數(shù)據(jù)庫40
4.1.3 SQL注入檢測方法與攻擊方法45
4.1.4 SQL注入點與HTTP協(xié)議56
4.1.5 SQL注入與SQL動詞57
4.1.6 參數(shù)點位置對SQL注入的影響58
4.1.7 閉合符對SQL注入的影響59
4.1.8 不同SQL引擎下的SQL注入60
4.1.9 實戰(zhàn)10:ThinkPHP5 SQL注入漏洞63
4.2 SQL注入漏洞(下)65
4.2.1 SQL注入其他攻擊思路65
4.2.2 萬能密碼70
4.2.3 SQL注入漏洞的對抗71
4.2.4 SQL注入與回顯73
4.2.5 SQLMAP74
4.2.6 SQL注入漏洞防御78
4.2.7 實戰(zhàn)11:Django GIS SQL注入漏洞(CVE-2020-9402)78
4.3 遠程命令執(zhí)行漏洞81
4.3.1 遠程命令執(zhí)行漏洞概述81
4.3.2 反彈Shell82
4.3.3 命令拼接符83
4.3.4 遠程命令執(zhí)行漏洞檢測84
4.3.5 遠程命令執(zhí)行漏洞防御85
4.3.6 實戰(zhàn)12:Shellshock 漏洞(CVE-2014-6271)85
4.4 遠程代碼執(zhí)行漏洞86
4.4.1 遠程代碼執(zhí)行漏洞概述86
4.4.2 PHP遠程代碼執(zhí)行86
4.4.3 白盒審計遠程代碼漏洞挖掘87
4.4.4 文件包含89
4.4.5 PHP文件包含漏洞進階91
4.4.6 其他語言的遠程代碼執(zhí)行漏洞92
4.4.7 遠程代碼執(zhí)行漏洞防御94
4.4.8 實戰(zhàn)13:Mongo-Express 遠程代碼執(zhí)行漏洞(CVE-2019-10758)94
4.5 PUT漏洞95
4.5.1 IIS寫權限漏洞95
4.5.2 Tomcat PUT漏洞97
4.5.3 PUT漏洞防御98
4.5.4 實戰(zhàn)14:IIS寫權限漏洞獲取WebShell98
4.5.5 實戰(zhàn)15:Tomcat PUT方法任意寫文件漏洞(CVE-2017-12615)102
4.6 任意文件讀取漏洞105
4.6.1 任意文件讀取漏洞概述105
4.6.2 目錄穿越攻擊106
4.6.3 任意文件讀取漏洞進階106
4.6.4 任意文件讀取漏洞防御107
4.6.5 實戰(zhàn)16:Apache Flink jobmanager/logs任意文件讀取漏洞(CVE-2020-1751)107
4.6.6 實戰(zhàn)17:Gitlab任意文件讀取漏洞(CVE-2016-9086)107
4.7 任意文件上傳漏洞110
4.7.1 任意文件上傳漏洞概述110
4.7.2 常見的繞過場景110
4.7.3 任意文件上傳漏洞防御112
4.7.4 實戰(zhàn)18:WebLogic任意文件上傳漏洞(CVE-2018-2894)113
4.7.5 實戰(zhàn)19:Apache Flink文件上傳漏洞(CVE-2020-17518)116
第5章 傳統(tǒng)后端漏洞(下)119
5.1 解析漏洞119
5.1.1 解析漏洞概述119
5.1.2 IIS解析漏洞119
5.1.3 Nginx解析漏洞122
5.1.4 Apache解析漏洞127
5.1.5 解析漏洞的防御129
5.1.6 實戰(zhàn)20:Nginx 解析漏洞129
5.1.7 實戰(zhàn)21:Apache HTTPD 換行解析漏洞(CVE-2017-15715)132
5.2 目錄瀏覽漏洞134
5.2.1 目錄瀏覽漏洞概述134
5.2.2 IIS目錄瀏覽漏洞135
5.2.3 Nginx目錄瀏覽漏洞136
5.2.4 Apache目錄瀏覽漏洞136
5.2.5 目錄瀏覽漏洞防御137
5.2.6 實戰(zhàn)22:Nginx目錄瀏覽漏洞138
5.2.7 實戰(zhàn)23:Apache目錄瀏覽漏洞139
5.3 SSI注入漏洞139
5.3.1 SSI漏洞概述139
5.3.2 SSI語法139
5.3.3 SSI漏洞點與測試140
5.3.4 SSI漏洞防御140
5.3.5 實戰(zhàn)24:Apache SSI 遠程命令執(zhí)行漏洞140
5.4