從0到1:CTFer 成長之路

Nu1L戰隊

買這商品的人也買了...

商品描述

本書主要面向CTF入門者,融入了CTF比賽的方方面面,讓讀者可以進行系統性的學習。
本書包括13章的內容,技術介紹分為線上賽和線下賽兩部分。
線上賽包括10章,涵蓋Web、PWN、Reverse、APK、Misc、Crypto、區塊鏈、代碼審計。
線下賽包括2章,分別為AWD和靶場滲透。
第13章通過Nu1L戰隊成員的故事和聯合戰隊管理等內容來分享CTF戰隊組建和管理、運營的經驗。

目錄大綱

目 錄 CTF之線上賽 
第1章 Web入門 3 
1.1 舉足輕重的信息收集 3 
1.1.1 信息搜集的重要性 3 
1.1.2 信息搜集的分類 3 
1.1.2.1 敏感目錄泄露 4 
1.1.2.2 敏感備份文件 7 
1.1.2.3 Banner識別 9 
1.1.3 從信息搜集到題目解決 9 
1.2 CTF中的SQL註入 12 
1.2.1 SQL註入基礎 12 
1.2.1.1 數字型註入和UNION註入 12 
1.2.1.2 字符型註入和布爾盲註 17 
1.2.1.3 報錯註入 22 
1.2.2 註入點 24 
1.2.2.1 SELECT註入 24 
1.2.2.2 INSERT註入 26 
1.2.2.3 UPDATE註入 27 
1.2.2.4 DELETE註入 28 
1.2.3 註入和防禦 29 
1.2.3.1 字符替換 29
1.2.3.2 逃逸引號 31 1.2.4 註入的功效 33 
1.2.5 SQL註入小結 34 
1.3 任意文件讀取漏洞 34 
1.3.1 文件讀取漏洞常見觸發點 35 
1.3.1.1 Web語言 35 
1.4.1.2 中間件/服務器相關 37 
1.4.1.3 客戶端相關 39 
1.3.2 文件讀取漏洞常見讀取路徑 39 
1.3.2.1 Linux 39 
1.3.2.2 Windows 41 
1.3.3 文件讀取漏洞例題 41 
1.3.3.1 兵者多詭(HCTF 2016) 42 
1.3.3.2 PWNHUB - Classroom 43 
1.3.3.3 Show me the shell I(TCTF/0CTF 2018 FINAL) 45 
1.3.3.4 BabyIntranet I(SCTF 2018) 47 
1.3.3.5 SimpleVN(BCTF2018) 48
1.3.3.6 Translate(Google CTF 2018) 50 
1.3.3.7 看番就能拿Flag(PWNHUB) 51 
1.3.3.8 2013那年(PWNhub) 52 
1.3.3.9 Comment(網鼎杯2018線上賽) 57 
1.3.3.10 方舟計劃(CISCN 2017) 58 
1.3.3.11 PrintMD(RealWorldCTF 2018線上賽) 60
1.3.3.12 粗心的佳佳(PWNHUB) 62 
1.3.3.13 教育機構(強網杯2018線上賽) 64 
1.3.3.14 Magic Tunnel(RealworldCTF 2018線下賽) 65 
1.3.3.15 Can you find me?(WHUCTF2019,武漢大學校賽) 67 
小結 68 

第2章 Web進階 69
 2.1 SSRF漏洞 69 
2.1.1 SSRF的原理解析 69 
2.1.2 SSRF漏洞的尋找和測試 71 
2.1.3 SSRF漏洞攻擊方式 72 
2.1.3.1 內部服務資產探測 72 
2.1.3.2 使用Gopher協議擴展攻擊面 72 
2.1.3.3 自動組裝Gopher 80 
2.1.4 SSRF的繞過 80 
2.1.4.1 IP的限制 80 
2.1.4.2 302跳轉 82 
2.1.4.3 URL的解析問題 83 
2.1.4.4 DNS Rebinding 86 
2.1.5 CTF中的SSRF 88 
2.2 命令執行漏洞 92 
2.2.1 命令執行的原理和測試方法 92 
2.2.1.1 命令執行原理 93 
2.2.1.2 命令執行基礎 93 
2.2.1.3 命令執行的基本測試 95 
2.2.2 命令執行的繞過和技巧 95 
2.2.2.1 缺少空格 95 
2.2.2.2 黑名單關鍵字 97 
2.2.2.3 執行無回顯 98 
2.2.3 命令執行真題講解 100 
2.2.3.1 2015 HITCON Babyfirst 100 
2.2.3.2 2017 HITCON BabyFirst Revenge 101 
2.2.3.3 2017 HITCON BabyFirst Revenge v2 103
2.3 XSS的魔力 104 
2.3.1 XSS漏洞類型 104 
2.3.2 XSS的tricks 108 
2.3.3 XSS過濾和繞過 111 
2.3.4 XSS繞過案例 117 
2.4 Web文件上傳漏洞 121 
2.4.1 基礎文件上傳漏洞 121 
2.4.2 截斷繞過上傳限制 122 
2.4.2.1 00截斷 122 
2.4.2.2 轉換字符集造成的截斷 125 
2.4.3 文件後綴黑名單校驗繞過 126 
2.4.3.1 上傳文件重命名 126 
2.4.3.2 上傳文件不重命名 127 
2.4.4 文件後綴白名單校驗繞過 130 
2.4.4.1 Web服務器解析漏洞 130 
2.4.4.2 APACHE解析漏洞 131 
2.4.5 文件禁止訪問繞過 132 
2.4.5.1 .htaccess禁止腳本文件執行繞過 133 
2.4.5.2 文件上傳到OSS 134 
2.4.5.3 配合文件包含繞過 134 
2.4.5.4 一些可被繞過的Web配置 135 
2.4.6 繞過圖片驗證實現代碼執行 137 
2.4.7 上傳生成的臨時文件利用 140 
2.4.8 使用file_put_contents實現文件上傳 142 
2.4.9 ZIP上傳帶來的上傳問題 147 
小結 156 

第3章 Web拓展 157 
3.1 反序列化漏洞 157 
3.1.1 PHP反序列化 157 
3.1.1.1 常見反序列化 158 
3.1.1.2 原生類利用 160 
3.1.1.3 Phar反序列化 163 
3.1.1.4 小技巧 165 
3.1.2 經典案例分析 170 
3.2 Python的安全問題 172 
3.2.1 沙箱逃逸 172 
3.2.1.1 關鍵詞過濾 172
3.2.1.2 花樣import 173 
3.2.1.3 使用繼承等尋找對象 174 
3.2.1.4 eval類的代碼執行 174 
3.2.2 格式化字符串 175 
3.2.2.1 最原始的% 175 
3.2.2.2 format方法相關 175 
3.2.2.3 Python 3.6中的f字符串 176 
3.2.3 Python模板註入 176 
3.2.4 urllib和SSRF 177 
3.2.4.1 CVE-2016-5699 177 
3.2.4.2 CVE-2019-9740 178 
3.2.5 Python反序列化 179 
3.2.6 Python XXE 180 
3.2.7 sys.audit 182 
3.2.8 CTF Python案例 182 
3.2.8.1 皇家線上賭場(SWPU 2018) 182 
3.2.8.2 mmmmy(2018網鼎杯) 183 
3.3 密碼學和逆向知識 185 
3.3.1 密碼學知識 186 
3.3.1.1 分組加密 186 
3.3.1.2 加密方式的識別 186 
3.3.1.3 ECB模式 186
3.3.1.4 CBC模式 188 
3.3.1.5 Padding Oracle Attack 191 
3.3.1.6 Hash Length Extension 197 
3.3.1.7 偽隨機數 200 
3.3.1.8 密碼學小結 202 
3.3.2 Web中的逆向工程 202 
3.3.2.1 Python 202 
3.3.2.2 PHP 203 
3.3.2.3 JavaScript 206 
3.4 邏輯漏洞 207 
3.4.1 常見的邏輯漏洞 207 
3.4.2 CTF中的邏輯漏洞 211 
3.4.3 邏輯漏洞小結 212 
小結 212 

第4章 APK 213
 4.1 Android開發基礎 213 
4.1.1 Android四大組件 213 
4.1.2 APK文件結構 214 
4.1.3 DEX文件格式 214 
4.1.4 Android API 215 
4.1.5 Android示例代碼 216 
4.2 APK逆向工具 217 
4.2.1 JEB 217 
4.2.2 IDA 219
4.2.3 Xposed Hook 220 
4.2.4 Frida Hook 222 
4.3 APK逆向之反調試 224 
4.4 APK逆向之脫殼 224 
4.4.1 註入進程Dump內存 224 
4.4.2 修改源碼脫殼 225 
4.4.3 類重載和DEX重組 227 
4.5 APK真題解析 227 
4.5.1 Ollvm混淆Native App逆向(NJCTF 2017) 227 
4.5.2 反調試及虛擬機檢測(XDCTF 2016) 230 
小結 232 

第5章 逆向工程 233 
5.1 逆向工程基礎 233 
5.1.1 逆向工程概述 233 
5.1.2 可執行文件 233 
5.1.3 匯編語言基本知識 234 
5.1.4 常用工具介紹 239 
5.2 靜態分析 243 
5.2.1 IDA使用入門 243 
5.2.2 HexRays反編譯器入門 249 
5.2.3 IDA和HexRays進階 254 
5.3 動態調試和分析 258 
5.3.1 調試的基本原理 258 
5.3.2 OllyDBG和x64DBG調試 258 
5.3.3 GDB調試 264 
5.3.4 IDA調試器 265 
5.4 常見算法識別 273 
5.4.1 特徵值識別 273 
5.4.2 特徵運算識別 274 
5.4.3 第三方庫識別 274 
5.5 二進制代碼保護和混淆 276 
5.5.1 抵禦靜態分析 277 
5.5.2 加密 280 
5.5.3 反調試 289 
5.5.4 淺談ollvm 296 
5.6 高級語言逆向 297 
5.6.1 Rust和Go 298 
5.6.2 C#和Python 301 
5.6.3 C++ MFC 302 
5.7 現代逆向工程技巧 303 
5.7.1 符號執行 303 
5.7.1.1 符號執行概述 303 
5.7.1.2 angr 304 
5.7.1.3 angr小結 313 
5.7.2 二進制插樁 313 
5.7.3 Pin 314 
5.7.3.1 環境配置 314 
5.7.3.2 Pintool使用 317 
5.7.3.3 Pintool基本框架 317 
5.7.3.4 CTF實戰:記錄執行指令數 319 
5.7.3.5 CTF實戰:記錄指令軌跡 322 
5.7.3.6 CTF實戰:記錄指令執行信息與修改內存 325 
5.7.3.7 Pin小結 330 
5.8 逆向中的技巧 331 
5.8.1 Hook 331 
5.8.2 巧妙利用程序已有代碼 331 
5.8.3 Dump內存 332 
小結 333 

第6章 PWN 335 
6.1 PWN基礎 335 
6.1.1 什麽是PWN 335 
6.1.2 如何學習PWN 335 
6.1.3 Linux基礎知識 336 
6.1.3.1 Linux中的系統與函數調用 336 
6.1.3.2 ELF文件結構 337 
6.1.3.3 Linux下的漏洞緩解措施 338 
6.1.3.4 GOT和PLT的作用 339 
6.2 整數溢出 340 
6.2.1 整數的運算 340 
6.2.2 整數溢出如何利用 341 
6.3 棧溢出 341 6.4 返回導向編程 346 
6.5 格式化字符串漏洞 350 
6.5.1 格式化字符串漏洞基本原理 350 
6.5.2 格式化字符串漏洞基本利用方式 352 
6.5.3 格式化字符串不在棧上的利用方式 354 
6.5.4 格式化字符串的一些特殊用法 357 
6.5.5 格式化字符串小結 358 
6.6 堆利用 358 
6.6.1 什麽是堆 358 
6.6.2 簡單的堆溢出 359 
6.6.3 堆內存破壞漏洞利用 360 
6.6.3.1 Glibc調試環境搭建 360 
6.3.6.2 Fast Bin Attack 361 
6.6.3.3 Unsorted Bin List 367 
6.6.3.4 Unlink攻擊 371 
6.6.3.5 Large Bin Attack(0CTF heapstormII) 375 
6.6.3.6 Make Life Easier:tcache 379 
6.6.3.7 Glibc 2.29的tcache 380 
6.7 Linux內核PWN 381 
6.7.1 運行一個內核 381 
6.7.2 網絡配置 381 
6.7.3 文件系統 382 
6.7.4 初始化腳本 382 
6.7.5 內核調試 383 
6.7.6 分析程序 383 
6.7.7 漏洞利用 384 
6.7.8 PWN Linux小結 387 
6.7.9 Linux內核PWN源代碼 387 
6.8 Windows系統的PWN 389 
6.8.1 Windows的權限管理 390 
6.8.2 Windows的調用約定 390 
6.8.3 Windows的漏洞緩解機制 391 
6.8.4 Windows的PWN技巧 393 
6.9 Windows內核PWN 394 
6.9.1 關於Windows操作系統 394 
6.9.1.1 80386和保護模式 394 
6.9.1.2 Windows操作系統尋址 395 
6.9.1.3 Windows操作系統架構 403 
6.9.1.4 Windows內核調試環境 404 
6.9.2 Windows內核漏洞 407 
6.9.2.1 簡單的Windows驅動開發入門 408 
6.9.2.2 編寫棧溢出示例 411 
6.9.2.3 編寫任意地址寫示例 413 
6.9.2.4 加載內核驅動程序 414 
6.9.2.5 Windows 7內核漏洞利用 416 
6.9.2.6 內核緩解措施與讀寫原語 426 
6.9.3 參考與引用 431 
6.10 從CTF到現實世界的PWN 431 
小結 433 

第7章 Crypto 435 
7.1 編碼 435 
7.1.1 編碼的概念 435
7.1.2 Base編碼 436 
7.1.3 其他編碼 437
7.1.4 編碼小結 438 
7.2 古典密碼 438 
7.2.1 線性映射 438
7.2.2 固定替換 439 
7.2.3 移位密碼 440 
7.2.4 古典密碼小結 440 
7.3 分組密碼 441 
7.3.1 分組密碼常見工作模式 441 
7.3.1.1 ECB 441 
7.3.1.2 CBC 441 
7.3.1.3 OFB 442 
7.3.1.4 CFB 443 
7.3.1.5 CTR 443 
7.3.2 費斯妥密碼和DES 444 
7.3.2.1 費斯妥密碼 444 
7.3.2.2 DES 445 
7.3.2.3 例題 447 
7.3.3 AES 449 
7.3.3.1 有限域 449 7.3.3.2 Rijndael密鑰生成 451 
7.3.3.3 AES步驟 452 
7.3.3.4 常見攻擊 453 7.4 流密碼 457 
7.4.1 線性同餘生成器(LCG) 457
7.4.1.1 由已知序列破譯LCG 458 
7.4.1.2 攻破Linux Glibc的rand()函數-1 460 
7.4.2 線性反饋移位寄存器(LFSR) 460 
7.4.2.1 由已知序列破譯LFSR 461
7.4.2.2 攻破Linux glibc的rand()函數-2 461 
7.4.3 RC4 463 7.5 公鑰密碼 464 
7.5.1 公鑰密碼簡介 464
7.5.2 RSA 464 
7.5.2.1 RSA簡介 464 
7.5.2.2 RSA的常見攻擊 465 
7.5.3 離散對數相關密碼學 470 
7.5.3.1 ElGamal和ECC 470 
7.5.3.2 離散對數的計算 470 
7.6 其他常見密碼學應用 472 
7.6.1 Diffie-Hellman密鑰交換 472 
7.6.2 Hash長度擴展攻擊 473 
7.6.3 Shamir門限方案 474 
小結 475 

第8章 智能合約 476 8.1 智能合約概述 476 
8.1.1 智能合約介紹 476 8.1.2 環境和工具 476 
8.2 以太坊智能合約題目實例 477 
8.2.1 “薅羊毛” 477 
8.2.2 Remix的使用 482 
8.2.3 深入理解以太坊區塊鏈 484 
小結 488 

第9章 Misc 489 
9.1 隱寫術 490 
9.1.1 直接附加 490 
9.1.2 EXIF 492 
9.1.3 LSB 494 
9.1.4 盲水印 497 
9.1.5 隱寫術小結 498 
9.2 壓縮包加密 498 
9.3 取證技術 499 
9.3.1 流量分析 500 
9.3.1.1 Wireshark和Tshark 500 
9.3.1.2 流量分析常見操作 501 
9.3.1.3 特殊種類的流量包分析 504 
9.3.1.4 流量包分析小結 505 
9.3.2 內存鏡像取證 505 
9.3.2.1 內存取證介紹 505 
9.3.2.2 內存取證常見操作 505 
9.3.2.3 內存取證小結 507 
9.3.3 磁盤鏡像取證 507 
9.3.3.1 磁盤鏡像介紹 507 
9.3.3.2 磁盤取證常見操作 507 
9.3.3.3 磁盤取證小結 509 
小結 509 

第10章 代碼審計 510 
10.1 PHP代碼審計 510 
10.1.1 環境搭建 510 
10.1.2 審計流程 517 
10.1.3 案例 527 
10.2 Java代碼審計 536
10.2.1 學習經驗 536 
10.2.2 環境搭建 538 
10.2.3 反編譯工具 540
10.2.4 Servlet簡介 541 
10.2.5 Serializable簡介 542 
10.2.6 反序列化漏洞 545
10.2.6.1 漏洞概述 545 
10.2.6.2 漏洞利用形式 546 
10.2.7 表達式註入 552 
10.2.7.1 表達式註入概述 552
10.2.7.2 表達式註入漏洞特徵 552 
10.2.7.3 表達式結構概述 553 
10.2.7.5 S2-045簡要分析 555 
10.2.7.6 表達式註入小結 558 
10.2.8 Java Web漏洞利用方式 558
10.2.8.1 JNDI註入 558
10.2.8.2 反序列化利用工具ysoserial/marshalsec 563 
10.2.8.3 Java Web漏洞利用方式小結 566 
小結 566 CTF之線下賽 

第11章 AWD 571 
11.1 比賽前期準備 571 
11.2 比賽技巧 573 
11.2.1 如何快速反應 573
 11.2.2 如何優雅、持續地拿flag 574 
11.2.3 優勢和劣勢 577 
11.3 流量分析 578 
11.4 漏洞修復 578 
小結 579 

第12章 靶場滲透 580 
12.1 打造滲透環境 580 
12.1.1 Linux下Metasploit的安裝和使用 580
 12.1.2 Linux下Nmap的安裝和使用 584
 12.1.3 Linux下Proxychains的安裝和使用 586 
12.1.4 Linux下Hydra的安裝和使用 587
 12.1.5 Windows下PentestBox的安裝 588 
12.1.6 Windows下Proxifier的安裝 588 
12.2 埠轉發和代理 589 
12.2.1 埠轉發 592
12.2.2 Socks代理 597
12.3 常見漏洞利用方式 598
12.3.1 ms08-067 598
12.3.2 ms14-068 599 
12.3.3 ms17-010 600 
12.4 獲取認證憑證 601 
12.4.1 獲取明文身份憑證 602 
12.4.1.1 LSA Secrets 602 
12.4.1.2 LSASS Process 604 
12.4.1.3 LSASS Protection bypass 605 
12.4.1.4 Credential Manager 606 
12.4.1.5 在用戶文件中尋找身份憑證Lazange 607
 12.4.2 獲取Hash身份憑證 607 
12.4.2.1 通過SAM數據庫獲取本地用戶Hash憑證 607 
12.4.2.2 通過域控制器的NTDS.dit文件 609 
12.5 橫向移動 611 12.5.1 Hash傳遞 611 
12.5.2 票據傳遞 613 
12.5.2.1 Kerberos認證 613
12.5.2.2 金票據 614 
12.5.2.3 銀票據 615 
12.6 靶場滲透案例 618 
12.6.1 第13屆CUIT校賽滲透題目 618 
12.6.2 Defcon China靶場題 625 
12.6.3 PWNHUB深入敵後 632 
小結 636 CTF之團隊建設 

第13章 我們的戰隊 641 
13.1 無中生有,有生無窮 641 
13.2 上下而求索 642 
13.3 多面發展的Nu1L戰隊 643
13.3.1 承辦比賽 643 
13.3.2 空指針社區 643 
13.3.3 安全會議演講 644 
13.4 人生的選擇 644
13.5 戰隊隊長的話 646 
小結 647