
| 操作系统是连接计算机硬件与上层软件及用户的桥梁,其安全性至关重要。知己知彼.方能百战不殆,用户只有了解了系统中存在的可被利用的漏洞和攻击者所采用的攻击方法。才能更有效地确保系统安全。 《黑客攻防技术宝典:系统实战篇(第2版)》由4位世界顶级安全技术大师联袂打造.全面介绍了操作系统的安全问题。从最基本的栈、堆、内存布局等方面着手,逐渐深入到操作系统的各个层面。重点阐述如何发现和防范系统的安全漏洞。全书内容均来自作者一线实战经验总结,强调动手实践和探索的重要性,自始至终体现了钻研无止境的黑客精神。 跟世界顶级安全技术大师学习黑客攻防技术 全面分析系统安全漏洞 大量实例和代码片段 |
| Chris Anley,世界知名系统安全专家。具有各种操作系统漏洞挖掘的丰富经验。Next Generation安全软件公司创始人、总监。 John Heasman,世界知名安全专家,尤其擅长于企业级软件安全攻防技术。著有多篇安全方面的颇有影响力的论文。现任Next Generation安全软件公司研发总监。 FeIix“FX”Linder,世界知名安全专家。具有近20年的计算机安全领域工作经验,熟悉各种操作系统特性。目前领导着德国著名安全技术咨询公司SABRE Labs。 Gerardo Richarte,著名安全技术专家。精通漏洞挖掘和逆向工程。他还参与开发了著名的SqueakNOS项目。现为Core安全技术公司技术骨干。 |
| 第一部分 破解入门:x86上的Linux 第1章 写在前面 2 1.1 基本概念 2 1.1.1 内存管理 3 1.1.2 汇编语言 4 1.2 识别汇编指令里的C和C++代码 5 1.3 小结 7 第2章 栈溢出 8 2.1 缓冲区 8 2.2 栈 10 2.3 栈上的缓冲区溢出 13 2.4 有趣的转换 17 2.5 利用漏洞获得根特权 20 2.5.1 地址问题 21 2.5.2 NOP法 26 2.6 战胜不可执行栈 28 2.7 小结 31 第3章 shellcode 32 3.1 理解系统调用 32 3.2 为exit()系统调用写shellcode 34 3.3 可注入的shellcode 37 3.4 派生shell 39 3.5 小结 46 第4章 格式化串漏洞 47 4.1 储备知识 47 4.2 什么是格式化串 47 4.3 什么是格式化串漏洞 49 4.4 利用格式化串漏洞 52 4.4.1 使服务崩溃 53 4.4.2 信息泄露 54 4.5 控制程序执行 59 4.6 为什么会这样 67 4.7 格式化串技术概述 67 4.8 小结 69 第5章 堆溢出 70 5.1 堆是什么 70 5.2 发现堆溢出 71 5.2.1 基本堆溢出 72 5.2.2 中级堆溢出 77 5.2.3 高级堆溢出 83 5.3 小结 84 第二部分 其他平台:Windows、Solaris、OS X和Cisco 第6章 Windows操作系统 86 6.1 Windows和Linux有何不同 86 6.2 堆 88 6.3 DCOM、DCE-RPC的优缺点 90 6.3.1 侦察 91 6.3.2 破解 93 6.3.3 令牌及其冒用 93 6.3.4 Win32平台的异常处理 95 6.4 调试Windows 96 6.4.1 Win32里的bug 96 6.4.2 编写Windows shellcode 97 6.4.3 Win32 API黑客指南 97 6.4.4 黑客眼中的Windows 98 6.5 小结 99 第7章 Windows shellcode 100 7.1 句法和过滤器 100 7.2 创建 101 7.2.1 剖析PEB 102 7.2.2 分析Heapoverflow.c 102 7.3 利用Windows异常处理进行搜索 116 7.4 弹出shell 121 7.5 为什么不应该在Windows上弹出shell 122 7.6 小结 122 第8章 Windows溢出 123 8.1 栈缓冲区溢出 123 8.2 基于帧的异常处理程序 123 8.3 滥用Windows 2003 Server上的基于帧的异常处理 127 8.3.1 滥用已有的处理程序 128 8.3.2 在与模块不相关的地址里寻找代码段,从而返回缓冲区 129 8.3.3 在没有Load Configuration Directory的模块的地址空间里寻找代码段 130 8.3.4 关于改写帧处理程序的最后说明 131 8.4 栈保护与Windows 2003 Server 131 8.5 堆缓冲区溢出 136 8.6 进程堆 136 8.6.1 动态堆 136 8.6.2 与堆共舞 136 8.6.3 堆是如何工作的 137 8.7 破解堆溢出 140 8.7.1 改写PEB里指向RtlEnter CriticalSection的指针 140 8.7.2 改写指向未处理异常过滤器的指针 146 8.7.3 修复堆 152 8.7.4 堆溢出的其他问题 154 8.7.5 有关堆的总结 154 8.8 其他的溢出 154 8.8.1 .data区段溢出 154 8.8.2 TEBPEB溢出 156 8.9 破解缓冲区溢出和不可执行栈 156 8.10 小结 161 第9章 战胜过滤器 162 9.1 为仅接受字母和数字的过滤器写破解代码 162 9.2 为使用Unicode的过滤器写破解代码 165 9.2.1 什么是Unicode 165 9.2.2 从ASCII转为Unicode 166 9.3 破解Unicode漏洞 166 9.4 百叶窗法 168 9.5 译码器和译码 171 9.5.1 译码器的代码 172 9.5.2 在缓冲区地址上定位 173 9.6 小结 174 第10章 Solaris破解入门 175 10.1 SPARC体系结构介绍 175 10.1.1 寄存器和寄存器窗口 176 10.1.2 延迟槽 177 10.1.3 合成指令 177 10.2 SolarisSPARC shellcode基础 178 10.2.1 自定位和SPARC shellcode 178 10.2.2 简单的SPARC exec shellcode 178 10.2.3 Solaris里有用的系统调用 179 10.2.4 NOP和填充指令 180 10.3 SolarisSPARC栈帧介绍 180 10.4 栈溢出的方法 180 10.4.1 任意大小的溢出 180 10.4.2 寄存器窗口和栈溢出的复杂性 181 10.4.3 其他复杂的因素 181 10.4.4 可能的解决方法 181 10.4.5 off-by-one栈溢出漏洞 182 10.4.6 shellcode的位置 182 10.5 栈溢出破解实战 183 10.5.1 脆弱的程序 183 10.5.2 破解代码 184 10.6 SolarisSPARC上的堆溢出 187 10.6.1 Solaris System V堆介绍 188 10.6.2 堆的树状结构 188 10.7 基本的破解方法(t_delete) 209 10.7.1 标准堆溢出的限制 210 10.7.2 改写的目标 211 10.8 其他与堆相关的漏洞 213 10.8.1 off-by-one溢出 213 10.8.2 二次释放漏洞 214 10.8.3 任意释放漏洞 214 10.9 堆溢出的例子 214 10.10 破解Solaris的其他方法 218 10.10.1 静态数据溢出 218 10.10.2 绕过不可执行栈保护 218 10.11 小结 219 第11章 高级Solaris破解 220 11.1 单步执行动态链接程序 221 11.2 Solaris SPARC堆溢出的各种技巧 235 11.3 高级SolarisSPARC shellcode 236 11.4 小结 248 第12章 OS X shellcode 249 12.1 OS X就是BSD吗 249 12.2 OS X是否开源 250 12.3 UNIX支持的OS X 250 12.4 OS X PowerPC shellcode 251 12.5 OS X Intel shellcode 257 12.5.1 shellcode实例 258 12.5.2 ret2libc 259 12.5.3 ret2str(l)cpy 261 12.6 OS X跨平台shellcode 263 12.7 OS X堆利用 264 12.8 在OS X中寻找bug 266 12.9 一些有趣的bug 266 12.10 关于OS X破解的必读资料 267 12.11 小结 268 第13章 思科IOS破解技术 269 13.1 思科IOS纵览 269 13.1.1 硬件平台 269 13.1.2 软件包 270 13.1.3 IOS系统架构 271 13.2 思科IOS里的漏洞 274 13.2.1 协议剖析代码 274 13.2.2 路由器上的服务 274 13.2.3 安全特征 274 13.2.4 命令行接口 275 13.3 逆向分析IOS 275 13.3.1 仔细剖析映像 275 13.3.2 比较IOS映像文件 276 13.3.3 运行时分析 277 13.4 破解思科IOS 281 13.4.1 栈溢出 282 13.4.2 堆溢出 283 13.4.3 shellcode 286 13.5 小结 294 第14章 保护机制 295 14.1 保护 295 14.1.1 不可执行栈 296 14.1.2 W^X内存 299 14.1.3 栈数据保护 304 14.1.4 AAAS 309 14.1.5 ASLR 310 14.1.6 堆保护 312 14.1.7 Windows SEH保护机制 318 14.1.8 其他保护机制 321 14.2 不同实现之间的差异 322 14.2.1 Windows 322 14.2.2 Linux 325 14.2.3 OpenBSD 327 14.2.4 Mac OS X 328 14.2.5 Solaris 329 14.3 小结 330 第三部分 漏洞发现 第15章 建立工作环境 332 15.1 需要什么样的参考资料 332 15.2 用什么编程 333 15.2.1 gcc 333 15.2.2 gdb 333 15.2.3 NASM 333 15.2.4 WinDbg 333 15.2.5 OllyDbg 333 15.2.6 Visual C++ 334 15.2.7 Python 334 15.3 研究时需要什么 334 15.3.1 有用的定制脚本工具 334 15.3.2 所有的平台 335 15.3.3 UNIX 336 15.3.4 Windows 336 15.4 需要学习的资料 337 15.5 优化shellcode开发 339 15.5.1 计划 339 15.5.2 用内联汇编写shellcode 340 15.5.3 维护shellcode库 341 15.5.4 持续运行 341 15.5.5 使破解程序稳定可靠 342 15.5.6 窃取连接 343 15.6 小结 343 第16章 故障注入 344 16.1 设计概要 345 16.1.1 生成输入数据 345 16.1.2 故障注入 347 16.1.3 修正引擎 347 16.1.4 提交故障 351 16.1.5 Nagel算法 351 16.1.6 时序 351 16.1.7 试探法 351 16.1.8 无状态协议与基于状态的协议 352 16.2 故障监视 352 16.2.1 使用调试器 352 16.2.2 FaultMon 352 16.3 汇总 353 16.4 小结 354 第17章 模糊测试的艺术 355 17.1 模糊测试理论 355 17.1.1 静态分析与模糊测试 359 17.1.2 可扩缩的模糊测试 359 17.2 模糊测试法的缺点 360 17.3 建立任意的网络协议模型 361 17.4 其他可能的模糊测试法 362 17.4.1 位翻转 362 17.4.2 修改开源程序 362 17.4.3 带动态分析的模糊测试 362 17.5 SPIKE 363 17.5.1 什么是SPIKE 363 17.5.2 为什么用SPIKE数据结构模仿网络协议 364 17.6 其他的模糊测试工具 371 17.7 小结 371 第18章 源码审计:在基于C的语言里寻找漏洞 372 18.1 工具 373 18.1.1 Cscope 373 18.1.2 Ctags 373 18.1.3 编辑器 373 18.1.4 Cbrowser 373 18.2 自动源码分析工具 374 18.3 方法论 374 18.3.1 自顶向下(明确的)的方法 374 18.3.2 自底向上的方法 375 18.3.3 结合法 375 18.4 漏洞分类 375 18.4.1 普通逻辑错误 375 18.4.2 (几乎)绝迹的错误分类 375 18.4.3 格式化串 376 18.4.4 错误的边界检查 377 18.4.5 循环结构 378 18.4.6 off-by-one漏洞 378 18.4.7 非正确终止问题 379 18.4.8 跳过以\0结尾问题 380 18.4.9 有符号数比较漏洞 381 18.4.10 整数相关漏洞 382 18.4.11 不同大小的整数转换 383 18.4.12 二次释放错误 384 18.4.13 超出范围的内存使用漏洞 384 18.4.14 使用未初始化的变量 384 18.4.15 释放后再使用漏洞 385 18.4.16 多线程问题和重入安全代码 386 18.5 超越识别:真正的漏洞和错误 386 18.6 小结 386 第19章 手工的方法 387 19.1 原则 387 19.2 Oracle extproc溢出 387 19.3 普通的体系架构故障 390 19.3.1 问题发生在边界 390 19.3.2 在数据转换时出现问题 391 19.3.3 不对称区域里的问题 393 19.3.4 当认证和授权混淆的时候出现问题 393 19.3.5 在最显眼的地方存在的问题 393 19.4 绕过输入验证和攻击检测 394 19.4.1 剥离坏数据 394 19.4.2 使用交替编码 394 19.4.3 使用文件处理特征 395 19.4.4 避开攻击特征 397 19.4.5 击败长度限制 397 19.5 Windows 2000 SNMP DOS 399 19.6 发现DOS攻击 399 19.7 SQL-UDP 400 19.8 小结 400 第20章 跟踪漏洞 402 20.1 概述 402 20.1.1 脆弱的程序 403 20.1.2 组件设计 404 20.1.3 编译VulnTrace 411 20.1.4 使用VulnTrace 416 20.1.5 高级的技术 418 20.2 小结 419 第21章 二进制审计:剖析不公开源码的软件 421 21.1 二进制与源码审计之间的明显差异 421 21.2 IDA pro——商业工具 422 21.2.1 IDA特征简介 422 21.2.2 调试符号 423 21.3 二进制审计入门 423 21.3.1 栈帧 423 21.3.2 调用约定 424 21.3.3 编译器生成的代码 425 21.3.4 类似memcpy代码构造 428 21.3.5 类似stlen的代码构造 429 21.3.6 C++代码构造 429 21.3.7 this指针 429 21.4 重构类定义 430 21.4.1 vtables 430 21.4.2 快速且有用的花絮 431 21.5 手动二进制分析 431 21.5.1 快速检查函数库调用 431 21.5.2 可疑的循环和写指令 431 21.5.3 高层理解和逻辑错误 432 21.5.4 二进制的图形化分析 432 21.5.5 手动反编译 433 21.6 二进制漏洞例子 433 21.6.1 微软SQL Server错误 433 21.6.2 LSD的RPC-DCOM漏洞 434 21.6.3 IIS WebDav漏洞 434 21.7 小结 436 第四部分 高级内容 第22章 其他载荷策略 438 22.1 修改程序 438 22.2 SQL Server 3B补丁 439 22.3 MySQL 1位补丁 442 22.4 OpenSSH RSA认证补丁 443 22.5 其他运行时修补方法 444 22.6 上载和运行(或proglet服务器) 446 22.7 系统调用代理 446 22.8 系统调用代理的问题 448 22.9 小结 456 第23章 编写在实际环境中运行的代码 457 23.1 不可靠的因素 457 23.1.1 魔术数字 457 23.1.2 版本 458 23.1.3 shellcode问题 458 23.2 对策 459 23.2.1 准备 460 23.2.2 暴力破解 460 23.2.3 本地破解 461 23.2.4 OS应用程序指纹 461 23.2.5 信息泄露 463 23.3 小结 463 第24章 攻击数据库软件 464 24.1 网络层攻击 464 24.2 应用层攻击 474 24.3 运行操作系统命令 475 24.3.1 微软SQL Server 475 24.3.2 Oracle 475 24.3.3 IBM DB2 476 24.4 SQL层的多种利用方法 478 24.5 小结 480 第25章 UNIX内核溢出 481 25.1 内核漏洞类型 481 25.2 0day内核漏洞 489 25.2.1 OpenBSD exec_ibcs2_coff_prep_zmagic()栈溢出 489 25.2.2 漏洞 490 25.3 Solaris vfs_getvfssw()可加载内核模块遍历漏洞 494 25.3.1 sysfs()系统调用 495 25.3.2 mount()系统调用 496 25.4 小结 497 第26章 破解UNIX内核漏洞 498 26.1 exec_ibcs2_coff_prep_zmagic()漏洞 498 26.1.1 计算偏移量和断点 503 26.1.2 改写返回地址并重定向执行流程 505 26.1.3 查找进程描述符(或进程结构) 506 26.1.4 开发内核模式载荷 508 26.1.5 从内核载荷返回 509 26.1.6 得到根权限(uid=0) 514 26.2 Solaris vfs_getvfssw()可加载内核模块路径遍历破解 520 26.2.1 精心编写破解代码 521 26.2.2 加载内核模块 522 26.2.3 得到根权限(uid=0) 525 26.3 小结 526 第27章 破解Windows内核 527 27.1 Windows内核模式缺陷——逐渐增多的猎物 527 27.2 Windows内核介绍 528 27.3 常见内核模式编程缺陷 528 27.3.1 栈溢出 529 27.3.2 堆溢出 532 27.3.3 没有充分验证用户模式地址 532 27.3.4 多目的化攻击 533 27.3.5 共享的对象攻击 533 27.4 Windows系统调用 533 27.4.1 理解系统调用 534 27.4.2 攻击系统调用 535 27.5 与设备驱动程序通信 536 27.5.1 IOCTL组件 536 27.5.2 发现IOCTL处理程序中的缺陷 537 27.6 内核模式载荷 538 27.6.1 提升用户模式进程 538 27.6.2 运行任意的用户模式载荷 540 27.6.3 颠覆内核安全 543 27.6.4 安装rootkit 544 27.7 内核shellcoder的必读资料 544 27.8 小结 545 |
商品评论(0条)