第1章 安全編碼基礎 1
1.1 引言 2
1.2 C/C++ 3
1.2.1 語言特性 3
1.2.2 Hello,World!實例 4
1.2.3 數據類型 5
1.2.4 流程控制 7
1.2.5 函數 8
1.2.6 類 9
1.2.7 案例研究:傅立葉系數
估算 10
1.3 Java 13
1.3.1 語言特性 14
1.3.2 Hello,World!實例 15
1.3.3 數據類型 15
1.3.4 流程控制 16
1.3.5 方法 18
1.3.6 類 18
1.3.7 獲取HTTP報頭 20
1.4 C# 21
1.4.1 移植到C#平臺的商業(yè)
案例 21
1.4.2 語言特性 22
1.4.3 Hello,World!實例 23
1.4.4 數據類型 23
1.4.5 流程控制 25
1.4.6 方法 26
1.4.7 類 26
1.4.8 C#線程 28
1.4.9 案例研究:命令行IP地址
解析 29
1.5 Perl 38
1.5.1 數據類型 39
1.5.2 運算符 40
1.5.3 Perl腳本實例 42
1.5.4 專用變量 44
1.5.5 模式匹配和替換 44
1.5.6 正則表達式修飾符 45
1.5.7 常用的Perl工具 45
1.5.8 I Am a Perl Coder! 46
1.5.9 日志修改工具 47
1.6 Python 52
1.7 本章小結 56
1.8 要點回顧 56
1.9 相關網站鏈接 57
1.10 常見問題 58
第2章 NASL腳本 61
2.1 引言 62
2.1.1 NASL的發(fā)展史 62
2.1.2 NASL的目標 62
2.2 NASL腳本的語法 63
2.2.1 注釋 64
2.2.2 變量 64
2.2.3 運算符 66
2.2.4 控制結構 69
2.3 編寫NASL腳本 72
2.3.1 編寫NASL個人專用工具 73
2.3.2 Nessus框架下的編程 75
2.4 案例研究:經典的
NASL腳本 77
2.5 NASL代碼移植 81
2.6 本章小結 90
2.7 要點回顧 91
2.8 相關網站鏈接 92
2.9 常見問題 92
第3章 BSD套接字 95
3.1 引言 96
3.2 BSD套接字編程簡介 96
3.3 TCP客戶端與服務器 97
3.4 UDP客戶端與服務器 103
3.5 套接字選項 111
3.6 基于UDP套接字的
網絡掃描 113
3.7 基于TCP套接字的
網絡掃描 122
3.8 線程與并行 134
3.9 本章小結 136
3.10 要點回顧 136
3.11 相關網站鏈接 137
3.12 常見問題 137
第4章 Windows套接字 139
4.1 引言 140
4.2 Winsock概述 140
4.3 Winsock 2.0 141
4.3.1 通過Visual Studio 6.0
鏈接 142
4.3.2 通過源代碼鏈接 143
4.4 案例研究:使用WinSock
抓取網頁 146
4.5 編寫客戶端程序 147
4.6 編寫服務器程序 151
4.7 編寫exploit及漏洞
檢測程序 155
4.8 本章小結 163
4.9 要點回顧 164
4.10 常見問題 165
4.11 案例研究:使用Winsock
執(zhí)行Web攻擊 166
4.12 案例研究:使用Winsock
執(zhí)行遠程緩沖區(qū)溢出 168
第5章 Java套接字 173
5.1 引言 174
5.2 TCP/IP概述 174
5.2.1 TCP客戶端 175
5.2.2 IP地址及域名解析 178
5.2.3 基于文本的輸入/輸出:
LineNumberReader類 181
5.2.4 TCP服務器 185
5.2.5 使用瀏覽器連接
TCPServer1 189
5.2.6 處理多重連接 189
5.2.7 WormCatcher 198
5.3 UDP客戶端與服務器 204
5.4 本章小結 211
5.5 要點回顧 211
5.5.1 TCP客戶端 211
5.5.2 TCP服務器 211
5.5.3 UDP客戶端與服務器 211
5.6 常見問題 212
第6章 編寫可移植的代碼 215
6.1 引言 216
6.2 UNIX和Windows移植
指南 216
6.2.1 預編譯指令 216
6.2.2 確定操作系統 218
6.2.3 進程的創(chuàng)建和終止 222
6.2.4 多線程 227
6.2.5 信號 234
6.2.6 文件操作 236
6.2.7 目錄操作 239
6.2.8 庫 242
6.2.9 Daemon/Win32服務編程 247
6.2.10 內存管理 254
6.2.11 命令行參數處理 255
6.2.12 整型數據類型 259
6.3 本章小結 260
6.4 要點回顧 260
6.5 常見問題 261
第7章 可移植的網絡編程 263
7.1 引言 264
7.2 BSD套接字和Winsock 264
7.3 可移植的構件 266
7.3.1 返回值 266
7.3.2 擴展錯誤信息 268
7.3.3 API 270
7.3.4 原始套接字 302
7.3.5 Pcap和WinPcap 313
7.4 本章小結 319
7.5 要點回顧 319
7.6 常見問題 319
第8章 編寫shellcode I 323
8.1 引言 324
8.2 shellcode概述 324
8.2.1 工具 324
8.2.2 匯編程序設計語言 325
8.2.3 Windows和UNIX的
匯編比較 328
8.3 尋址問題 329
8.3.1 方案一:使用call和
jmp指令 329
8.3.2 方案二:將參數值入棧 330
8.4 NULL字節(jié)問題 331
8.5 系統調用的實現 332
8.5.1 系統調用編號 332
8.5.2 系統調用參數 332
8.5.3 系統調用返回值 334
8.6 遠程shellcode 334
8.6.1 端口綁定shellcode 334
8.6.2 套接字描述符重用
shellcode 336
8.7 本地shellcode 337
8.7.1 execve shellcode 338
8.7.2 setuid shellcode 339
8.7.3 chroot shellcode 340
8.7.4 Windows shellcode 344
8.8 本章小結 350
8.9 要點回顧 350
8.10 相關網站鏈接 352
8.11 郵件列表 352
8.12 常見問題 352
第9章 編寫shellcode II 355
9.1 引言 356
9.2 shellcode實例 356
9.2.1 write系統調用 359
9.2.2 execve shellcode 362
9.2.3 端口綁定shellcode 370
9.2.4 socket系統調用 373
9.2.5 bind系統調用 374
9.2.6 listen系統調用 374
9.2.7 accept系統調用 375
9.2.8 dup2系統調用 375
9.2.9 execve系統調用 376
9.2.10 反向連接shellcode 381
9.2.11 重用套接字的shellcode 384
9.2.12 重用文件描述符 386
9.2.13 shellcode編碼 392
9.3 重用程序變量 397
9.4 跨操作系統的shellcode 401
9.5 了解現有的shellcode 402
9.6 本章小結 406
9.7 要點回顧 406
9.8 相關網站鏈接 407
9.9 郵件列表 407
9.10 常見問題 407
第10章 開發(fā)exploit程序I 409
10.1 引言 410
10.2 定位漏洞 410
10.3 遠程與本地exploit程序
的編寫 411
10.4 格式化字符串攻擊 412
10.4.1 格式化字符串 412
10.4.2 格式化字符串漏洞
的修復 414
10.5 案例研究:xlockmore用戶
提供的格式化字符串漏洞
CVE-2000-0763 414
10.6 TCP/IP漏洞 417
10.7 競爭條件 418
10.7.1 文件競爭條件 418
10.7.2 信號競爭條件 419
10.8 案例研究:man輸入驗證
錯誤 419
10.9 本章小結 421
10.10 要點回顧 422
10.11 相關網站鏈接 423
10.12 常見問題 423
第11章 開發(fā)exploit程序II 425
11.1 引言 426
11.2 為exploit編寫套接字和
綁定 426
11.2.1 客戶端套接字編程 426
11.2.2 服務器端套接字編程 428
11.3 棧溢出exploits 429
11.3.1 內存的組織 430
11.3.2 棧溢出 431
11.3.3 尋找開源軟件中可
利用的棧溢出 435
11.4 案例研究:X11R6 4.2
XLOCALEDIR溢出 435
11.5 堆破壞exploits 440
11.6 案例研究: OpenSSL SSLv2
畸形客戶端密鑰遠程緩沖區(qū)
溢出漏洞CAN-2002-0656 444
11.7 整型bug exploits 457
11.7.1 整數環(huán)繞 458
11.7.2 忽略大小檢查 460
11.7.3 其他整型bug 462
11.8 案例研究: OpenSSH質詢
響應整型溢出漏洞
CVE-2002-0639 462
11.9 案例研究:UW POP2 緩沖
區(qū)溢出漏洞CVE-1999
-0920 466
11.10 本章小結 474
11.11 要點回顧 475
11.12 相關網站鏈接 476
11.13 常見問題 476
第12章 開發(fā)exploit程序III 479
12.1 引言 480
12.2 MSF的使用 480
12.3 用Metasploit進行
exploit開發(fā) 485
12.3.1 確定攻擊向量 485
12.3.2 計算偏移量 486
12.3.3 選擇控制向量 491
12.3.4 發(fā)現返回地址 495
12.3.5 使用返回地址 498
12.3.6 確定壞字符 500
12.3.7 確定空間限制 500
12.3.8 空操作指令拖動器 502
12.3.9 選取有效載荷和
編碼器 503
12.4 將exploit集成到MSF中 511
12.4.1 框架 511
12.4.2 分析一個現有的exploit
模塊 512
12.4.3 覆蓋方法 516
12.5 本章小結 517
12.6 要點回顧 517
12.7 相關網站鏈接 518
12.8 常見問題 518
第13章 編寫安全組件 521
13.1 引言 522
13.2 COM 522
13.2.1 COM對象 522
13.2.2 COM接口 522
13.2.3 COM運行時 523
13.2.4 COM對象的實現 524
13.2.5 COM進程內服務器
的實現 526
13.3 ATL 527
13.3.1 C++模板 528
13.3.2 ATL客戶端技術 528
13.3.3 ATL服務器技術 531
13.3.4 ATL屬性 543
13.4 將COM擴展添加到
RPCDump工具中 547
13.4.1 COM EXE服務器
實現 548
13.4.2 控制流 551
13.4.3 應用程序集成例程 552
13.4.4 工具接口定義 555
13.4.5 組件類 557
13.4.6 應用程序集成:
COMSupport.h 563
13.4.7 應用程序集成:
RPCDump.C 564
13.5 本章小結 566
13.6 要點回顧 566
13.7 相關網站鏈接 567
13.8 常見問題 567
第14章 創(chuàng)建Web安全工具 571
14.1 引言 572
14.2 設計 572
14.2.1 攻擊簽名格式 572
14.2.2 簽名 573
14.3 深入分析 573
14.3.1 套接字和執(zhí)行 573
14.3.2 解析器 583
14.3.3 頭文件 595
14.3.4 編譯 599
14.3.5 執(zhí)行 599
14.4 工具輸出 600
14.5 本章小結 600
14.6 要點回顧 601
14.7 相關網站鏈接 601
14.8 常見問題 601
附錄A 詞匯 605
附錄B 安全工具匯編 613
附錄C exploit文檔 619
附錄D 系統調用參考 621
附錄E 數據轉換參考 625