《网络渗透技术》是国内第一本全面深入地披露系统与网络底层安全技术的书籍。本书分为十个章节,详细介绍了渗透测试技术的方方面面。
首先介绍了各种调试器和分析工具的简单使用,然后从各种操作系统的体系结构讲起,深入浅出地分析了相应平台的缓冲区溢出利用技术,接着介绍其高级shellcode技术,以及更深入的堆溢出利用技术等。除了用户层的利用技术,在第6章还以Linux操作系统为例详细地介绍了内核溢出的各种利用技术。另外还结合实例,详细介绍了类UNIX系统漏洞分析与发掘技术。
本书不放过每一处技术细节,记录了分析调试过程的每一个步骤,并且给出详细的演示程序。在最后两个章节,本书还对渗透测试撕裂口——Web应用的渗透做了精辟的描述。
本书是XFOCUS团队倾力之作,对于有志于网络安全事业人士而言,本书是一本不可多得的专业参考书。
第1章 基础知识 1
1.1 GDB的基本使用方法 1
1.1.1 断点相关命令 1
1.1.2 执行相关命令 1
1.1.3 信息查看相关命令 2
1.1.4 其他常用命令 3
1.1.5 Insight图形界面调试器 3
1.2 SoftICE的基本使用方法 4
1.2.1 断点相关命令 5
1.2.2 执行相关命令 6
1.2.3 查看与修改相关命令 6
1.2.4 其他常用命令 7
1.2.5 常用默认快捷键 7
1.3 NTSD(WinDbg/CDB)的基本使用方法 8
1.3.1 断点相关命令 8
1.3.2 执行相关命令 8
1.3.3 查看与修改相关命令 9
1.3.4 其他常用命令 9
1.4 IDA Pro的基本使用方法 9
1.4.1 强大的反汇编功能 10
1.4.2 方便的代码阅读功能 12
1.4.3 常用默认快捷键 14
第2章 缓冲区溢出利用技术 15
2.1 缓冲区溢出历史 15
2.2 Linux x86平台缓冲区溢出利用技术 16
2.2.1 Linux的内存管理 16
2.2.2 缓冲区溢出的流程 17
2.2.3 缓冲区溢出的攻击技术 21
2.3 Win32平台缓冲区溢出利用技术 27
2.3.1 Win32平台缓冲区溢出的流程 27
2.3.2 跳转地址 34
2.3.3 远程缓冲区溢出演示 37
2.3.4 结构化异常处理 43
2.3.5 Windows XP和2003下的增强异常处理 54
2.3.6 突破Windows 2003堆栈保护 54
2.4 AIX PowerPC平台缓冲区溢出利用技术 60
2.4.1 熟悉PowerPC体系及其精简指令集计算 60
2.4.2 AIX PowerPC堆栈结构 61
2.4.3 学习如何攻击AIX PowerPC的溢出程序 67
2.5 Solaris SPARC平台缓冲区溢出利用技术 74
2.5.1 SPARC体系结构 74
2.5.2 Solaris SPARC堆栈结构及函数调用过程 75
2.5.3 学习如何攻击Solaris SPARC的溢出程序 84
2.6 HP-UX PA平台缓冲区溢出利用技术 87
2.6.1 PA-RISC体系结构 88
2.6.2 常用指令集 90
2.6.3 运行时体系结构(Run~time Architecture) 93
2.6.4 学习如何攻击HP-UX下的溢出程序 99
2.7 Windows CE缓冲区溢出利用技术 104
2.7.1 ARM简介 104
2.7.2 Windows CE内存管理 105
2.7.3 Windows CE的进程和线程 106
2.7.4 Windows CE的API搜索技术 106
2.7.5 Windows CE缓冲区溢出流程演示 115
第3章 Shellcode技术 124
3.1 Linux x86平台Shellcode技术 124
3.1.1 熟悉系统调用 124
3.1.2 得到Shell的Shellcode 125
3.1.3 提取Shellcode的Opcode 129
3.1.4 渗透防火墙的Shellcode 132
3.2 Win32平台Shellcode技术 146
3.2.1 获取kernel32.dll基址 147
3.2.2 获取Windows API地址 150
3.2.3 写一个实用的Windows Shellcode 156
3.2.4 渗透防火墙的Shellcode 167
3.3 AIX PowerPC平台Shellcode技术 192
3.3.1 学习AIX PowerPC汇编 192
3.3.2 学写AIX PowerPC的Shellcode 194
3.3.3 远程Shellcode 197
3.3.4 遭遇I-cache 216
3.3.5 查找socket的Shellcode 224
3.4 Solaris SPARC平台的Shellcode技术 225
3.4.1 Solaris系统调用 225
3.4.2 得到shell的Shellcode 227
3.4.3 Shellcode中的自身定位 231
3.4.4 解码Shellcode 233
3.4.5 渗透防火墙的Shellcode 238
第4章 堆溢出利用技术 241
4.1 Linux堆溢出利用技术 241
4.1.1 Linux堆管理结构 241
4.1.2 Linux堆管理算法分析 246
4.1.3 Linux堆溢出实例攻击演示 265
4.1.4 Linux两次释放利用演示 281
4.2 Win32平台堆溢出利用技术 289
4.2.1 Windows堆管理结构 289
4.2.2 Windows堆溢出演示 294
4.2.3 Windows XP SP2的增强 319
4.3 Solaris堆溢出利用技术 320
4.3.1 Solaris堆溢出相关结构及宏定义 320
4.3.2 Solaris堆溢出利用流程 322
4.3.3 Solaris堆溢出利用实例 327
4.3.4 Solaris释放堆利用演示 334
第5章 格式化串漏洞利用技术 339
5.1 Linux x86平台格式化串漏洞利用技术 339
5.1.1 格式化串漏洞成因 339
5.1.2 格式化串漏洞演示 340
5.1.3 格式串漏洞的利用 346
5.2 Solaris SPARC平台格式化串漏洞利用技术 353
5.2.1 Solaris SPARC和Linux x86在格式化串漏洞利用上的不同 353
5.2.2 Solaris SPARC格式化串的利用 353
5.3 Win32平台格式化串漏洞利用技术 362
5.3.1 Win32平台格式化串与其他平台的不同 362
5.3.2 Win32平台格式化串的利用方法演示 363
第6章 内核溢出利用技术 368
6.1 Linux x86平台内核溢出利用技术 368
6.1.1 内核Exploit和应用层Exploit的异同点 368
6.1.2 内核Exploit背景知识 368
6.1.3 内核Exploit的种类 370
6.1.4 内核缓冲区溢出(Kernel Buffer OverFlow) 370
6.1.5 内核格式化字符串漏洞(Kernel Format String Vulnerability) 380
6.1.6 TCP/IP协议栈溢出漏洞 393
第7章 其他利用技术 411
7.1 BSD的memcpy溢出利用技术 411
7.1.1 FreeBSD的memcpy实现 411
7.1.2 实例演示 416
7.1.3 Apache分块编码远程溢出漏洞利用分析 421
7.2 文件流溢出利用方法 424
7.2.1 FSO简介 424
7.2.2 FSO漏洞实例 424
7.2.3 粗略分析 425
7.2.4 如何写利用程序 429
7.3 C++中溢出覆盖虚函数指针技术 431
7.3.1 VC中虚函数工作机制分析 431
7.3.2 VC中对象的空间组织和溢出试验 435
7.3.3 GCC中对象的空间组织和溢出试验 437
7.3.4 模拟真实情况的溢出试验 439
7.4 绕过PaX内核补丁保护方法 443
7.4.1 PaX内核补丁简介 443
7.4.2 高级的return-into-lib(c) 利用技术 444
第8章 漏洞发掘分析 476
8.1 UNIX本地漏洞发掘技术 476
8.1.1 一段漏洞发掘日记 476
8.1.2 UNIX本地漏洞发掘工具介绍 480
8.1.3 常见漏洞类型 485
8.1.4 漏洞发掘过程 492
8.1.5 如何处理发现的漏洞 502
8.2 漏洞自动发掘技术 502
8.2.1 黑盒自动测试 502
8.2.2 源码分析 503
8.2.3 补丁比较 504
8.2.4 基于IDA Pro的脚本挖掘技术 519
8.2.5 其他技术 525
8.3 Linux平台漏洞分析调试 525
8.3.1 Cyrus IMAP Server IMAPMAGICPLUS预验证远程缓冲区溢出
漏洞分析 525
8.3.2 Stunnel客户端协商协议格式化串漏洞分析 535
8.3.3 CVS “Directory” double free漏洞分析 545
8.4 Windows平台漏洞分析调试 551
8.4.1 IIS WebDAV栈溢出漏洞分析 552
8.4.2 WS_FTP FTPD STAT命令远程栈溢出 573
8.4.3 Windows RPC DCOM接口长文件名堆溢出漏洞调试 583
8.4.4 Microsoft Windows Messenger服务远程堆溢出漏洞调试 592
8.4.5 Windows内核消息处理本地缓冲区溢出漏洞 603
第9章 CGI渗透测试技术 618
9.1 跨站脚本的安全问题 618
9.1.1 跨站脚本简介 618
9.1.2 跨站脚本的危害 618
9.2 Cookie的安全问题 621
9.2.1 Cookie简介 621
9.2.2 Cookie安全 622
9.3 PHP渗透测试技巧 624
9.3.1 一般利用方式 624
9.3.2 PHP 4.3.0的新特性 627
9.3.3 PHP处理RFC1867 MIME格式导致数组错误漏洞 627
9.3.4 正则表达式的陷阱 629
9.3.5 进一步扩大成果 631
9.3.6 突破PHP的safe_mode限制 633
第10章 SQL注入利用技术 635
10.1 MySQL注入技巧 635
10.1.1 MySQL版本识别 636
10.1.2 联合查询的利用 637
10.1.3 遍历猜测 639
10.1.4 文件操作 640
10.1.5 用户自定义函数 642
10.2 MS SQL Server注入技巧 648
10.2.1 SQL注入简介 650
10.2.2 如何获取数据 652
10.2.3 环境探测 656
10.2.4 获取重要数据 657
10.2.5 获取shell 663
10.2.6 突破限制 670
10.2.7 其他技巧 673
附录A 网络安全英文术语解释 677
参考资料 678
XFOCUS
从狭义上说,网络安全焦点(http://www.xfocus.net)是一支专业的网络安全技术研究团队;将视野放宽一些,则这是个专注于网络安全技术市场方面交流的小圈子。圈子里是群普普通通的家伙,喜欢自由自在,来自五湖四海,不在同一公司。生活简单,爱玩电脑,偶尔做事会出格……
网络诡异。十几年便造就了一个虚拟的世界,但在它带来无数商机的同时,最初的沟通自由的朴素想法却变得奢侈,真正的黑客便随之出现。他们是平凡得不能再平凡的人,但他们崇尚自由,于是便有了一段段听来传奇的故事……
但在中国,真正的黑客几近于无,有的只是浮躁、虚荣和做作。或许是环境的问题,我们缺乏Free与Open的环境。力量有限,但网络无限,安全焦点希望以有限的力量提供尽量纯净的技术环境。至于发展,留给变化无穷的网络来诠释吧。
网络安全焦点是个开放的圈子,我们用“舍得”的心态来工作生活,先要能舍弃一些——钱、精力、经验、技术……之后才能有——自豪的感觉、进步、朋友……
欢迎加入,一起玩吧!
关于本书
《网络渗透技术》由安全焦点团队中的san,alert7,eyas,watercloud这四位成员共同完成。本书的内容不敢妄称原创,更多的是在前人的研究基础上进一步深入发掘与整理。但是书中的每一个演示实例都经过作者的深思熟虑与实际调试,凝聚了四位作者多年积累的经验。
从安全界顶级的杂志和会议看来,中国整体的系统与网络安全技术在世界上并不出色。因为目前中国籍的专家在历届Phrack杂志上只有两篇文章,其中一篇还是在Linenoise里,而在Blackhat和Defcon会议的演讲台上至本书截稿时还未曾出现过中国籍专家。虽然语言问题是其中一个很大的障碍,但我们也不得不正视这个令人沮丧的结果。
现在国内市场关于网络安全的书籍数不胜数,但是真正能够直面系统与网络安全底层技术的却又寥寥无几。《网络渗透技术》以尽可能简单的实例深入浅出地揭示了系统与网络安全底层技术,我们不敢奢望每个看过本书的读者能够成为网络安全专家,但我们希望本书能够给后来者一些引导,希望以后在Phrack,Blackhat和Defcon上看到越来越多中国籍专家的身影。
内容导读
本书共分十个章节,深入浅出地介绍了系统与网络安全底层技术。
第1章 基础知识
非常感谢安全焦点论坛技术研究版一些朋友的提议,在本书的最开始增加基础知识这个章节。第1章简要地介绍了几种常用调试器和反汇编工具的基本使用方法。对系统与网络安全有一定了解的读者可以跳过这一章。
第2章 缓冲区溢出利用技术
缓冲区溢出利用技术是本书的重点。本章先介绍了缓冲区溢出的历史,然后一共介绍了六种平台操作系统的利用技术。想要了解各种平台操作系统构架的读者不能错过本章。作者精心设计了几个浅显易懂的实例,并且记录了每一步的调试过程。相信读者看过本章内容以后,对缓冲区溢出的原理和利用技术会有深刻的理解。
第3章 Shellcode技术
如果没有Shellcode,那么缓冲区溢出一般也只能达到拒绝服务等效果,渗透测试者要想获得控制,必须用Shellcode实现各种功能。比如,得到一个Shell,监听一个端口,添加一个用户。本章不但介绍了各种平台的Shellcode的撰写与提取方法,还深入讨论了各种高级Shellcode技术及相应源码。如远程溢出攻击时搜索套接字Shellcode技术的各种方法,这种技术在远程渗透测试过程中将更加隐蔽。
第4章 堆溢出利用技术
操作系统对堆的管理比栈复杂多了,而且各种操作系统使用的堆管理算法完全不同。本章介绍了Linux,Windows和Solaris这三种操作系统的堆溢出利用技术,作者为每种操作系统都精心设计了几个浅显易懂的实例来描述各种利用方法。
第5章 格式化串漏洞利用技术
格式化串漏洞的历史要比缓冲区溢出短得多,而且一般也被认为是程序员的编程错误。但是格式化串漏洞可以往任意地址写任意内容,所以它的危害也是非常致命的。本章主要讨论了Linux,Solaris SPARC和Windows这三种平台的利用技术,由于各种操作系统的Libc不同,所以它们的利用过程也略有不同。
第6章 内核溢出利用技术
本章主要讨论当内核在数据处理过程中发生溢出时的利用方法。内核态的利用与用户态很不一样,要求读者对系统内核有比较深入的了解。本书的这一版目前只讨论Linux x86平台的利用方法。
第7章 其他利用技术
本章讨论了一些不是很常见或特定情况下的溢出利用技术,主要有*BSD的memcpy溢出、文件流溢出、C++中溢出覆盖虚函数指针技术和绕过Pax内核补丁保护方法。其中绕过Pax内核补丁保护方法这个小节要求读者对ELF文件格式有比较深入的了解。
第8章 系统漏洞发掘分析
相信许多读者会喜欢这一章。在介绍了各种系统漏洞的利用方法以后,本章开始介绍漏洞发掘的一些方法,并且有多个实际漏洞详细分析,也算是前面几章利用技术的实践内容。
第9章 CGI渗透测试技术
通过系统漏洞获得服务器控制是最直接有效的方法,但是在实际的渗透测试过程中,客户的服务器可能都已经打过补丁了,甚至用防火墙限制只允许Web服务通行。这时最好的渗透途径就是利用CGI程序的漏洞。本章先介绍了跨站脚本和Cookie的安全问题,然后重点介绍PHP的各种渗透测试技巧。
第10章 SQL注入利用技术
现今的CGI程序一般都使用后台数据库,CGI程序的漏洞又导致了SQL注入的问题。SQL注入利用技术是CGI渗透测试技术的一个重大分支,本章详细介绍了MySQL和SQL Server这两种最常见数据库的注入技术。
附录A 系统与网络安全术语中英文对照表
本书可能使用到一些系统与网络安全术语,如果读者对术语含义有疑惑的话,请参考附录A。
本书源码及相关文档
为了节省成本降低书价,《网络渗透技术》书里用到的源码程序和相关参考文档都将放到网络安全焦点网站,以方便读者阅读和使用本书。
所有的源码和相关文档按照章节划分目录,在每个章节目录下,读者可以找到相应的演示实例、利用程序的源码,读者可以很方便地进行学习调试。
本书用到的源码程序和相关参考文档都将放到网络安全焦点网站,以方便读者阅读和使用本书。
所有的源码和相关文档都按照章节划分目录,在每个章节目录下,读者可以找到相应的演示实例、利用程序的源码,读者可以很方便地进行学习调试。
对读者的要求
本书适合如下的读者:
对系统与网络安全感兴趣的朋友。本书将引导这些朋友研究更深入的底层安全。
网络安全从业人员。本书将会是这些朋友很好的参考手册。
系统与网络程序编写者。所谓知己知彼,百战不殆,在了解了各种安全漏洞的原理后,相信这些朋友写的程序也会更加安全。
对调试技术感兴趣的读者。
希望能和朋友们一起学习、一起提高。
使用本书需要具备的知识
书到用时方恨少,很多时候知识能够触类旁通。
汇编基础知识。在漏洞调试过程中,调试器显示的都是汇编代码。在网络安全焦点网站上有多位作者整理搜集的各种平台的汇编指令手册,读者可以在调试过程或写Shellcode的时候做参考。
熟悉C语言及Perl等脚本语言。本书漏洞演示程序,以及利用程序都用到这些编程语言,并假设读者有基本的编程能力。
具备以上知识的读者在阅读本书的时候会更加如鱼得水。
致谢
特别感谢陈雨小为本书做的整体形象设计。也非常感谢他为安全焦点的logo,Xcon的logo以及形象设计所做的无偿奉献。
感谢电子工业出版社对本书的大力支持,感谢责任编辑朱沭红所做的大量工作。
感谢绿盟科技宽松的技术氛围,特别是warning3和scz,他们在网上发布过的文章及与他们深入的技术讨论为本书增色不少。
感谢0dd邮件列表上的朋友们精彩的技术讨论。
最后还要感谢安全焦点团队对本书的支持,没有他们就没有《网络渗透技术》这本书。
技术支持
读者在阅读本书时有何问题或看法,请到安全焦点论坛的技术研究版与我们交流,我们非常乐意和朋友们一起探讨技术问题,在讨论的同时可以学到更多的知识,交到更多的朋友。