基本信息
名称: 0day安全 软件漏洞分析技术(第2版)
作者信息: 作者: 浏览全部评论 [ 中文 pdf ]
简单介绍
王清主编的《Oday安全:软件漏洞分析技术(第2版)》将系统全面地介绍Windows平台软件缓冲区溢出漏洞的发现、检测、分析和利用等方面的知识。 为了保证这些技术能够被读者轻松理解并掌握,本书在叙述中尽量避免枯燥乏味的大段理论阐述和代码粘贴。书中所有概念和方法都会在紧随其后的调试实验中被再次解释,实验和案例是本书的精髓所在。从为了阐述概念而精心自制的漏洞程序调试实验到现实中已经造成很大影响的著名漏洞分析,每一个调试实验都有着不同的技术侧重点,每一个漏洞利用都有自己的独到之处。 我将带领您一步一步地完成调试的每一步,并在这个过程中逐步解释漏洞分析思路。不管您是网络安全从业人员、黑客技术发烧友、网络安全专业的研究生或本科生,如果您能够完成这些分析实验,相信您的软件调试技术、对操作系统底层的理解等计算机能力一定会得到一次质的飞跃,并能够对安全技术有一个比较深入的认识。
目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347
| 目 录 第1篇 漏洞利用原理(初级) 第1章 基础知识 2 1.1 漏洞概述 2 1.1.1 bug与漏洞 2 1.1.2 几个令人困惑的安全问题 2 1.1.3 漏洞挖掘、漏洞分析、漏洞利用 3 1.1.4 漏洞的公布与0 day响应 5 1.2 二进制文件概述 5 1.2.1 PE文件格式 5 1.2.2 虚拟内存 6 1.2.3 PE文件与虚拟内存之间的映射 7 1.3 必备工具 11 1.3.1 OllyDbg简介 11 1.3.2 SoftICE简介 11 1.3.3 WinDbg简介 16 1.3.4 IDA Pro简介 18 1.3.5 二进制编辑器 20 1.3.6 VMware简介 21 1.3.7 Python编程环境 28 1.4 Crack小实验 29 第2章 栈溢出原理与实践 38 2.1 系统栈的工作原理 38 2.1.1 内存的不同用途 38 2.1.2 栈与系统栈 39 2.1.3 函数调用时发生了什么 40 2.1.4 寄存器与函数栈帧 43 2.1.5 函数调用约定与相关指令 44 2.2 修改邻接变量 47 2.2.1 修改邻接变量的原理 47 2.2.2 突破密码验证程序 49 2.3 修改函数返回地址 53 2.3.1 返回地址与程序流程 53 2.3.2 控制程序的执行流程 57 2.4 代码植入 62 2.4.1 代码植入的原理 62 2.4.2 向进程中植入代码 62 第3章 开发shellcode的艺术 71 3.1 shellcode概述 71 3.1.1 shellcode与exploit 71 3.1.2 shellcode需要解决的问题 72 3.2 定位shellcode 73 3.2.1 栈帧移位与jmp esp 73 3.2.2 获取“跳板”的地址 76 3.2.3 使用“跳板”定位的exploit 78 3.3 缓冲区的组织 81 3.3.1 缓冲区的组成 81 3.3.2 抬高栈顶保护shellcode 83 3.3.3 使用其他跳转指令 83 3.3.4 不使用跳转指令 84 3.3.5 函数返回地址移位 85 3.4 开发通用的shellcode 87 3.4.1 定位API的原理 87 3.4.2 shellcode的加载与调试 88 3.4.3 动态定位API地址的shellcode 89 3.5 shellcode编码技术 98 3.5.1 为什么要对shellcode编码 98 3.5.2 会“变形”的shellcode 99 3.6 为shellcode“减肥” 103 3.6.1 shellcode瘦身大法 103 3.6.2 选择恰当的hash算法 105 3.6.3 191个字节的bindshell 107 第4章 用MetaSploit开发Exploit 119 4.1 漏洞测试平台MSF 简介 119 4.2 入侵Windows系统 121 4.2.1 漏洞简介 121 4.2.2 图形界面的漏洞测试 121 4.2.3 console界面的漏洞测试 125 4.3 利用MSF制作shellcode 126 4.4 用MSF扫描“跳板” 128 4.5 Ruby语言简介 129 4.6 “傻瓜式”Exploit开发 134 4.7 用MSF发布POC 140 第5章 堆溢出利用 144 5.1 堆的工作原理 144 5.1.1 Windows堆的历史 144 5.1.2 堆与栈的区别 145 5.1.3 堆的数据结构与管理策略 146 5.2 在堆中漫游 151 5.2.1 堆分配函数之间的调用关系 151 5.2.2 堆的调试方法 152 5.2.3 识别堆表 155 5.2.4 堆块的分配 158 5.2.5 堆块的释放 159 5.2.6 堆块的合并 159 5.2.7 快表的使用 161 5.3 堆溢出利用(上)——DWORD SHOOT 163 5.3.1 链表“拆卸”中的问题 163 5.3.2 在调试中体会“DWORD SHOOT” 165 5.4 堆溢出利用(下)——代码植入 169 5.4.1 DWORD SHOOT的利用方法 169 5.4.2 狙击P.E.B中RtlEnterCritical-Section()的函数指针 170 5.4.3 堆溢出利用的注意事项 175 第6章 形形色色的内存攻击技术 178 6.1 狙击Windows异常处理机制 178 6.1.1 S.E.H概述 178 6.1.2 在栈溢出中利用S.E.H 180 6.1.3 在堆溢出中利用S.E.H 184 6.1.4 深入挖掘Windows异常处理 187 6.1.5 其他异常处理机制的利用思路 192 6.2 “off by one”的利用 196 6.3 攻击C++的虚函数 198 6.4 Heap Spray:堆与栈的协同攻击 201 第7章 手机里的缓冲区溢出 204 7.1 Windows Mobile简介 204 7.1.1 Windows Mobile前世今生 204 7.1.2 Windows Mobile架构概述 205 7.1.3 Windows Mobile的内存管理 209 7.2 ARM简介 212 7.2.1 ARM是什么 212 7.2.2 ARM寄存器结构 212 7.2.3 ARM汇编指令结构 215 7.2.4 ARM指令寻址方式 220 7.2.5 ARM的函数调用与返回 222 7.3 Windows Mobile上的HelloWorld 223 7.4 远程调试工具简介 227 7.4.1 远程信息查看管理套件 227 7.4.2 手机上的调试——Microsoft Visual Studio 231 7.4.3 手机上的调试——IDA 233 7.5 手机上的exploit me 237 第8章 其他类型的软件漏洞 243 8.1 格式化串漏洞 243 8.1.1 printf中的缺陷 243 8.1.2 用printf读取内存数据 244 8.1.3 用printf向内存写数据 245 8.1.4 格式化串漏洞的检测与防范 246 8.2 SQL注入攻击 247 8.2.1 SQL注入原理 247 8.2.2 攻击PHP+MySQL网站 248 8.2.3 攻击ASP+SQL Server网站 250 8.2.4 注入攻击的检测与防范 252 8.3 其他注入方式 253 8.3.1 Cookie注入,绕过马其诺防线 253 8.3.2 XPath注入,XML的阿喀琉斯之踵 254 8.4 XSS攻击 255 8.4.1 脚本能够“跨站”的原因 255 8.4.2 XSS Reflection攻击场景 256 8.4.3 Stored XSS攻击场景 258 8.4.4 攻击案例回顾:XSS蠕虫 258 8.4.5 XSS的检测与防范 259 8.5 路径回溯漏洞 260 8.5.1 路径回溯的基本原理 260 8.5.2 范式化与路径回溯 261 第2篇 漏洞利用原理(高级) 第9章 Windows安全机制概述 264 第10章 栈中的守护天使:GS 267 10.1 GS安全编译选项的保护原理 267 10.2 利用未被保护的内存突破GS 271 10.3 覆盖虚函数突破GS 273 10.4 攻击异常处理突破GS 276 10.5 同时替换栈中和.data中的Cookie突破GS 280 第11章 亡羊补牢:SafeSEH 284 11.1 SafeSEH对异常处理的保护原理 284 11.2 攻击返回地址绕过SafeSEH 288 11.3 利用虚函数绕过SafeSEH 288 11.4 从堆中绕过SafeSEH 288 11.5 利用未启用SafeSEH模块绕过SafeSEH 292 11.6 利用加载模块之外的地址绕过SafeSEH 299 11.7 利用Adobe Flash Player ActiveX控件绕过SafeSEH 305 第12章 数据与程序的分水岭:DEP 313 12.1 DEP机制的保护原理 313 12.2 攻击未启用DEP的程序 316 12.3 利用Ret2Libc挑战DEP 317 12.3.1 Ret2Libc实战之利用ZwSetInformationProcess 318 12.3.2 Ret2Libc实战之利用VirtualProtect 330 12.3.3 Ret2Libc实战之利用VirtualAlloc 339 12.4 利用可执行内存挑战DEP 348 12.5 利用.NET挑战DEP 352 12.6 利用Java applet挑战DEP 359 第13章 在内存中躲猫猫:ASLR 363 13.1 内存随机化保护机制的原理 363 13.2 攻击未启用ASLR的模块 367 13.3 利用部分覆盖进行定位内存地址 372 13.4 利用Heap spray技术定位内存地址 376 13.5 利用Java applet heap spray技术定位内存地址 379 13.6 为.NET控件禁用ASLR 382 第14章 S.E.H终极防护:SEHOP 386 14.1 SEHOP的原理 386 14.2 攻击返回地址 388 14.3 攻击虚函数 388 14.4 利用未启用SEHOP的模块 388 14.5 伪造S.E.H链表 390 第15章 重重保护下的堆 396 15.1 堆保护机制的原理 396 15.2 攻击堆中存储的变量 397 15.3 利用chunk重设大小攻击堆 398 15.4 利用Lookaside表进行堆溢出 407 第3篇 漏洞挖掘技术 第16章 漏洞挖掘技术简介 414 16.1 漏洞挖掘概述 414 16.2 动态测试技术 415 16.2.1 SPIKE简介 415 16.2.2 beSTORM简介 421 16.3 静态代码审计 429 第17章 文件类型漏洞挖掘 与Smart Fuzz 431 17.1 Smart Fuzz概述 431 17.1.1 文件格式Fuzz的基本方法 431 17.1.2 Blind Fuzz和Smart Fuzz 432 17.2 用Peach挖掘文件漏洞 433 17.2.1 Peach介绍及安装 433 17.2.2 XML介绍 434 17.2.3 定义简单的 Peach Pit 436 17.2.4 定义数据之间的依存关系 440 17.2.5 用Peach Fuzz PNG文件 441 17.3 010脚本,复杂文件解析的瑞士军刀 446 17.3.1 010 Editor简介 446 17.3.2 010脚本编写入门 447 17.3.3 010脚本编写提高——PNG文件解析 449 17.3.4 深入解析,深入挖掘——PPT文件解析 452 第18章 FTP的漏洞挖掘 457 18.1 FTP协议简介 457 18.2 漏洞挖掘手记1:DOS 457 18.3 漏洞挖掘手记2:访问权限 466 18.4 漏洞挖掘手记3:缓冲区溢出 468 18.5 漏洞挖掘手记4:Fuzz DIY 472 第19章 E-Mail的漏洞挖掘 477 19.1 挖掘SMTP漏洞 477 19.1.1 SMTP协议简介 477 19.1.2 SMTP漏洞挖掘手记 478 19.2 挖掘POP3漏洞 480 19.2.1 POP3协议简介 480 19.2.2 POP3漏洞挖掘手记 481 19.3 挖掘IMAP4漏洞 489 19.3.1 IMAP4协议简介 489 19.3.2 IMAP4漏洞挖掘手记 490 19.4 其他E-mail漏洞 491 19.4.1 URL中的路径回溯 491 19.4.2 内存中的路径回溯 494 19.4.3 邮件中的XSS 500 第20章 ActiveX控件的漏洞挖掘 502 20.1 ActiveX控件简介 502 20.1.1 浏览器与ActiveX控件的关系 502 20.1.2 控件的属性 503 20.2 手工测试ActiveX控件 504 20.2.1 建立测试模板 504 20.2.2 获取控件的接口信息 505 20.3 用工具测试ActiveX控件:COMRaider 509 20.4 挖掘ActiveX漏洞 516 20.4.1 ActiveX漏洞的分类 516 20.4.2 漏洞挖掘手记1:超星阅读器溢出 517 20.4.3 漏洞挖掘手记2:目录操作权限 521 20.4.4 漏洞挖掘手记3:文件读权限 523 20.4.5 漏洞挖掘手记3:文件删除权限 525 第4篇 操作系统内核安全 第21章 探索ring0 528 21.1 内核基础知识介绍 528 21.1.1 内核概述 528 21.1.2 驱动编写之Hello World 528 21.1.3 派遣例程与IRP结构 533 21.1.4 Ring3打开驱动设备 537 21.1.5 DeviceIoControl函数与IoControlCode 538 21.1.6 Ring3/Ring0的四种通信方式 539 21.2 内核调试入门 541 21.2.1 创建内核调试环境 541 21.2.2 蓝屏分析 549 21.3 内核漏洞概述 551 21.3.1 内核漏洞的分类 551 21.3.2 内核漏洞的研究过程 553 21.4 编写安全的驱动程序 555 21.4.1 输入输出检查 555 21.4.2 验证驱动的调用者 556 21.4.3 白名单机制的挑战 556 第22章 内核漏洞利用技术 557 22.1 利用实验之exploitme.sys 557 22.2 内核漏洞利用思路 559 22.3 内核漏洞利用方法 560 22.4 内核漏洞利用实战与编程 565 22.5 Ring0 Shellcode的编写 570 第23章 FUZZ驱动程序 579 23.1 内核FUZZ思路 579 23.2 内核FUZZ工具介绍 581 23.3 内核FUZZ工具DIY 583 23.3.1 Fuzz对象、Fuzz策略、Fuzz项 583 23.3.2 IoControl MITM Fuzz 583 23.3.3 IoControl Driver Fuzz 585 23.3.4 MyIoControl Fuzzer界面 586 23.4 内核漏洞挖掘实战 588 23.4.1 超级巡警ASTDriver.sys本地提权漏洞 588 23.4.2 东方微点mp110013.sys本地提权漏洞 594 23.4.3 瑞星HookCont.sys驱动本地拒绝服务漏洞 601 第24章 内核漏洞案例分析 605 24.1 远程拒绝服务内核漏洞 605 24.2 本地拒绝服务内核漏洞 611 24.3 缓冲区溢出内核漏洞 614 24.4 任意地址写任意数据内核漏洞 619 24.5 任意地址写固定数据内核漏洞 622 第5篇 漏洞分析案例 第25章 漏洞分析技术概述 628 25.1 漏洞分析的方法 628 25.2运动中寻求突破:调试技术 629 25.2.1 断点技巧 630 25.2.2 回溯思路 644 25.3 用“白眉”在PE中漫步 647 25.3.1 指令追踪技术与Paimei 647 25.3.2 Paimei的安装 648 25.3.3 使用PE Stalker 649 25.3.4 迅速定位特定功能对应的代码 652 25.4 补丁比较 654 第26章 RPC入侵:MS06-040 与MS08-067 658 26.1 RPC漏洞 658 26.1.1 RPC漏洞简介 658 26.1.2 RPC编程简介 658 26.2 MS06-040 659 26.2.1 MS06-040简介 659 26.2.2 动态调试 660 26.2.3 静态分析 667 26.2.4 实现远程exploit 670 26.3 Windows XP环境下的MS06-040 exploit 677 26.3.1 静态分析 677 26.3.2 蠕虫样本的exploit方法 682 26.3.3 实践跨平台exploit 684 26.4 MS08-067 690 26.4.1 MS08-067简介 690 26.4.2 认识Legacy Folder 693 26.4.3 “移经”测试 694 26.4.4 “移经”风险 695 26.4.5 POC的构造 696 26.5 魔波、Conficker与蠕虫病毒 703 第27章 MS06-055分析:实战Heap Spray 705 27.1 MS06-055简介 705 27.1.1 矢量标记语言(VML)简介 705 27.1.2 0 day安全响应纪实 706 27.2 漏洞分析 707 27.3 漏洞利用 710 第28章 MS09-032分析:一个“&”引发的血案 713 28.1 MS09-032简介 713 28.2 漏洞原理及利用分析 713 第29章 Yahoo!Messenger栈 溢出漏洞 719 29.1 漏洞介绍 719 29.2 漏洞分析 719 29.3 漏洞利用 723 第30章 CVE-2009-0927:PDF中的JS 725 30.1 CVE-2009-0927简介 725 30.2 PDF文档格式简介 725 30.3 漏洞原理及利用分析 727 第31章 坝之蚁穴:超长URL溢出漏洞 731 31.1 漏洞简介 731 31.3 漏洞原理及利用分析 731 第32章 暴风影音M3U文件解析漏洞 737 32.1 漏洞简介 737 32.2 M3U文件简介 737 32.3 漏洞原理及利用分析 738 第33章 LNK快捷方式文件漏洞 744 33.1 漏洞简介 744 33.2 漏洞原理及利用分析 744 附录A 已公布的内核程序漏洞列表 750 参考文献 753
|
亚马逊链接