《Java代碼審計 入門篇》由淺入深、系統(tǒng)地介紹了Java代碼審計的流程、Java Web漏洞產(chǎn)生的原理以及實戰(zhàn)講解,并力求語言通俗易懂、舉例簡單明了,便于讀者閱讀領(lǐng)會。同時結(jié)合具體案例進(jìn)行講解,可以讓讀者身臨其境,快速了解和掌握主流的Java代碼安全審計技巧。
閱讀《Java代碼審計 入門篇》不要求讀者具備代碼審計的相關(guān)背景,如有相關(guān)經(jīng)驗,對理解本書內(nèi)容會更有幫助。《Java代碼審計 入門篇》也可作為高等院校信息安全專業(yè)的教材。
1.系統(tǒng)介紹Java代碼安全審計入門技術(shù),助力安全人員剖析Web安全漏洞
2.內(nèi)容結(jié)構(gòu)劃分合理,理論與實踐結(jié)合入門Java代碼審計
3.豐富詳細(xì)案例講解,扎實掌握J(rèn)ava代碼審計知識技能
4.提供腳本源代碼及環(huán)境工具資源下載
徐焱,北京交通大學(xué)安全研究員,MS08067安全實驗室創(chuàng)始人。從2002年開始接觸網(wǎng)絡(luò)安全,有豐富的滲透測試經(jīng)驗,主要研究方向為內(nèi)網(wǎng)滲透測試和APT攻擊。已出版圖書《網(wǎng)絡(luò)攻防實戰(zhàn)研究:漏洞利用與提權(quán)》、《Web安全攻防:滲透測試實戰(zhàn)指南》,在《黑客防線》、《黑客X檔案》、《黑客手冊》、FreeBuf、360安全客、阿里云盾先知、嘶吼等媒體發(fā)表過多篇技術(shù)文章。
第 1章 初識Java代碼審計1
1.1 代碼審計的意義 1
1.2 Java代碼審計所需的基礎(chǔ)能力 3
1.3 代碼審計的常用思路 4
第 2章 代碼審計環(huán)境搭建 5
2.1 JDK的下載與安裝 5
2.1.1 JDK的下載 5
2.1.2 JDK的安裝 6
2.1.3 添加JDK到系統(tǒng)環(huán)境 8
2.2 Docker容器編排 10
2.2.1 Docker基本原理及操作 11
2.2.2 使用Vulhub快速搭建漏洞驗證環(huán)境 21
2.3 遠(yuǎn)程調(diào)試 24
2.3.1 對Jar包進(jìn)行遠(yuǎn)程調(diào)試 24
2.3.2 對Weblogic進(jìn)行遠(yuǎn)程調(diào)試 27
2.3.3 對Tomcat進(jìn)行遠(yuǎn)程調(diào)試 31
2.3.4 VMware虛擬機(jī)搭建遠(yuǎn)程調(diào)試環(huán)境 35
2.4 項目構(gòu)建工具 35
2.4.1 Maven基礎(chǔ)知識及掌握 36
2.4.2 Swagger特點及使用 40
第3章 代碼審計輔助工具簡介 41
3.1 代碼編輯器 41
3.1.1 Sublime 41
3.1.2 IDEA 42
3.1.3 Eclipse 43
3.2 測試工具 43
3.2.1 Burp Suite 43
3.2.2 SwitchyOmega 46
3.2.3 Max HackerBar 47
3.2.4 Postman 48
3.2.5 Postwomen 49
3.2.6 Tamper Data 49
3.2.7 Ysoserial 50
3.2.8 Marshalsec 50
3.2.9 MySQL監(jiān)視工具 51
3.2.10 Beyond Compare 55
3.3 反編譯工具 56
3.3.1 JD-GUI 56
3.3.2 FernFlower 56
3.3.3 CFR 57
3.3.4 IntelliJ IDEA 58
3.4 Java代碼靜態(tài)掃描工具 58
3.4.1 Fortify SCA 58
3.4.2 VCG 59
3.4.3 FindBugs與FindSecBugs插件 60
3.4.4 SpotBugs 60
3.5 公開漏洞查找平臺 61
3.5.1 CVE 61
3.5.2 NVD 62
3.5.3 CNVD 63
3.5.4 CNNVD 63
3.6 小結(jié) 64
第4章 Java EE基礎(chǔ)知識 65
4.1 Java EE分層模型 65
4.1.1 Java EE的核心技術(shù) 66
4.1.2 Java EE分層模型 66
4.2 了解MVC模式與MVC框架 67
4.2.1 Java MVC 模式 68
4.2.2 Java MVC框架 69
4.3 Java Web的核心技術(shù)Servlet 70
4.3.1 Servlet 的配置 70
4.3.2 Servlet的訪問流程 73
4.3.3 Servlet的接口方法 73
4.3.4 Servlet 的生命周期 76
4.4 Java Web過濾器filter 77
4.4.1 filter的配置 77
4.4.2 filter的使用流程及實現(xiàn)方式 79
4.4.3 filter的接口方法 80
4.4.4 filter 的生命周期 82
4.5 Java反射機(jī)制 82
4.5.1 什么是反射 83
4.5.2 反射的用途 83
4.5.3 反射的基本運用 84
4.5.4 不安全的反射 91
4.6 ClassLoader類加載機(jī)制 92
4.6.1 ClassLoader類 92
4.6.2 loadClass()方法的流程 93
4.6.3 自定義的類加載器 94
4.6.4 loadClass()方法與Class.forName的區(qū)別 95
4.6.5 URLClassLoader 96
4.7 Java動態(tài)代理 97
4.7.1 靜態(tài)代理 97
4.7.2 動態(tài)代理 98
4.7.3 CGLib代理 100
4.8 Javassist動態(tài)編程 101
4.9 可用于Java Web的安全開發(fā)框架 103
4.9.1 Spring Security 103
4.9.2 Apache Shiro 104
4.9.3 OAuth 2.0 105
4.9.4 JWT 107
第5章 OWASP Top 10 2017漏洞的代碼審計 109
5.1 注入 110
5.1.1 注入漏洞簡介 110
5.1.2 SQL注入 110
5.1.3 命令注入 117
5.1.4 代碼注入 121
5.1.5 表達(dá)式注入 125
5.1.6 模板注入 130
5.1.7 小結(jié) 133
5.2 失效的身份認(rèn)證 134
5.2.1 失效的身份認(rèn)證漏洞簡介 134
5.2.2 WebGoat8 JWT Token猜解實驗 134
5.2.3 小結(jié) 141
5.3 敏感信息泄露 142
5.3.1 敏感信息泄露簡介 142
5.3.2 TurboMail 5.2.0敏感信息泄露 142
5.3.3 開發(fā)組件敏感信息泄露 146
5.3.4 小結(jié) 146
5.4 XML外部實體注入(XXE) 147
5.4.1 XXE漏洞簡介 147
5.4.2 讀取系統(tǒng)文件 148
5.4.3 DoS攻擊 150
5.4.4 Blind XXE 151
5.4.5 修復(fù)案例 154
5.4.6 小結(jié) 156
5.5 失效的訪問控制 157
5.5.1 失效的訪問控制漏洞簡介 157
5.5.2 橫向越權(quán) 157
5.5.3 縱向越權(quán) 164
5.5.4 小結(jié) 168
5.6 安全配置錯誤 168
5.6.1 安全配置錯誤漏洞簡介 168
5.6.2 Tomcat任意文件寫入(CVE-2017-12615) 169
5.6.3 Tomcat AJP 文件包含漏洞(CVE-2020-1938) 173
5.6.4 Spring Boot遠(yuǎn)程命令執(zhí)行 192
5.6.5 小結(jié) 203
5.7 跨站腳本(XSS) 203
5.7.1 跨站腳本漏洞簡介 203
5.7.2 反射型XSS漏洞 204
5.7.3 存儲型XSS漏洞 206
5.7.4 DOM型XSS漏洞 211
5.7.5 修復(fù)建議 212
5.7.6 小結(jié) 212
5.8 不安全的反序列化 212
5.8.1 不安全的反序列化漏洞簡介 212
5.8.2 反序列化基礎(chǔ) 213
5.8.3 漏洞產(chǎn)生的必要條件 214
5.8.4 反序列化拓展 215
5.8.5 Apache Commons Collections反序列化漏洞 218
5.8.6 FastJson反序列化漏洞 225
5.8.7 小結(jié) 235
5.9 使用含有已知漏洞的組件 235
5.9.1 組件漏洞簡介 235
5.9.2 Weblogic中組件的漏洞 237
5.9.3 富文本編輯器漏洞 238
5.9.4 小結(jié) 241
5.10 不足的日志記錄和監(jiān)控 241
5.10.1 不足的日志記錄和監(jiān)控漏洞簡介 241
5.10.2 CRLF注入漏洞 242
5.10.3 未記錄可審計性事件 243
5.10.4 對日志記錄和監(jiān)控的安全建議 244
5.10.5 小結(jié) 244
第6章 OWASP Top 10 2017之外常見漏洞的代碼審計 245
6.1 CSRF 245
6.1.1 CSRF簡介 245
6.1.2 實際案例及修復(fù)方式 246
6.1.3 小結(jié) 249
6.2 SSRF 249
6.2.1 SSRF簡介 249
6.2.2 實際案例及修復(fù)方式 250
6.2.3 小結(jié) 262
6.3 URL跳轉(zhuǎn) 263
6.3.1 URL跳轉(zhuǎn)漏洞簡介 263
6.3.2 實際案例及修復(fù)方式 264
6.3.3 小結(jié) 267
6.4 文件操作漏洞 267
6.4.1 文件操作漏洞簡介 267
6.4.2 漏洞發(fā)現(xiàn)與修復(fù)案例 268
6.4.3 小結(jié) 286
6.5 Web后門漏洞 287
6.5.1 Web后門漏洞簡介 287
6.5.2 Java Web 后門案例講解 287
6.5.3 小結(jié) 292
6.6 邏輯漏洞 293
6.6.1 邏輯漏洞簡介 293
6.6.2 漏洞發(fā)現(xiàn)與修復(fù)案例 293
6.6.3 小結(jié) 299
6.7 前端配置不當(dāng)漏洞 300
6.7.1 前端配置不當(dāng)漏洞簡介 300
6.7.2 漏洞發(fā)現(xiàn)與修復(fù)案例 300
6.7.3 小結(jié) 305
6.8 拒絕服務(wù)攻擊漏洞 305
6.8.1 拒絕服務(wù)攻擊漏洞簡介 305
6.8.2 漏洞發(fā)現(xiàn)與修復(fù)案例 306
6.8.3 小結(jié) 322
6.9 點擊劫持漏洞 323
6.9.1 點擊劫持漏洞簡介 323
6.9.2 漏洞發(fā)現(xiàn)與修復(fù)案例 324
6.9.3 小結(jié) 327
6.10 HTTP參數(shù)污染漏洞 327
6.10.1 HTTP參數(shù)污染漏洞簡介 327
6.10.2 漏洞發(fā)現(xiàn)與修復(fù)案例 328
6.10.3 小結(jié) 330
第7章 Java EE開發(fā)框架安全審計 331
7.1 開發(fā)框架審計技巧簡介 331
7.1.1 SSM框架審計技巧 331
7.1.2 SSH框架審計技巧 360
7.1.3 Spring Boot框架審計技巧 373
7.2 開發(fā)框架使用不當(dāng)范例(Struts2 遠(yuǎn)程代碼執(zhí)行) 377
7.2.1 OGNL簡介 377
7.2.2 S2-001漏洞原理分析 379
第8章 Jspxcms代碼審計實戰(zhàn) 390
8.1 Jspxcms簡介 390
8.2 Jspxcms的安裝 391
8.2.1 Jspxcms的安裝環(huán)境需求 391
8.2.2 Jspxcms的安裝步驟 391
8.3 目錄結(jié)構(gòu)及功能說明 399
8.3.1 目錄結(jié)構(gòu) 399
8.3.2 功能說明 402
8.4 第三方組件漏洞審計 406
8.5 單點漏洞審計 408
8.5.1 SQL審計 408
8.5.2 XSS 審計 411
8.5.3 SSRF審計 418
8.5.4 RCE審計 431
8.6 本章總結(jié) 440
第9章 小話IAST與RASP 441
9.1 IAST簡介 441
9.2 RASP簡介 443
9.3 單機(jī)版OpenRASP Agent實驗探究 444
9.3.1 實驗環(huán)境 444
9.3.2 實驗過程 444
9.4 OpenRASP Java Agent原理淺析 448
9.5 本章總結(jié) 452
附錄 Java安全編碼規(guī)范索引 453