完整图片版:http://1.johnhome.sinaapp.com/?p=157
一.目的
1.1掌握缓冲区溢出的原理
缓冲区指程序运行期间,在内存中分配的一个连续的区域,用于保存包括字符数组在内
的各种数据类型。溢出,指所填充的数据超出了原有的缓冲区边界,并非法占据了另一段内存区域。缓冲区溢出,即由于填充数据越界而导致原有流程的改变,攻击者借此精心构造填充数据,让程序转而执行特殊的代码,最终获取控制权。
1.2掌握常用的缓冲区溢出方法
缓冲区溢出攻击的目的在于取得程序的控制权,为此,攻击者必须达到如下的两个目标:在程序的地址空间里安排适当的代码;通过适当的初始化寄存器和内存,让程序跳转到入侵者安排的地址空间执行。
根据这两个目标来对缓冲区溢出攻击进行分类,缓冲区溢出攻击分为代码安排和控制程序执行流程两种方法:在程序的地址空间里安排适当的代码的方法;控制程序转移到攻击代码的方法。
1.3理解缓冲区溢出的危害性
缓冲区溢出的危害性具有破坏性与隐蔽性的特点:破坏性体现在易使服务程序停止运行,服务器死机甚至删除服务器上的数据或者可以执入并运行攻击代码。隐蔽性体现在软件漏洞难以避免,缓冲攻击的shellcode的执行不易被察觉,攻击的随机性及不可预测性。
1.4掌握防范和避免缓冲区溢出攻击的方法
通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码;强制编写正确的代码;利用编译器的边界检查来实现缓冲区的保护;间接的方法是在程序指针失效前进行完整性检查等。
二.内容
2.1分析war-ftp v1.65的基于用户名的缓冲溢出漏洞
实践课件上已指出:向服务器发送超过480字节的用户名可以触发漏洞(即使用命令USER longString\r\n),溢出之后,ESP中的内容包含了longString中的部分内容。需要对其进行验证分析。
2.2分析war-ftp v1.65的堆栈结构
即分析堆栈中的EIP、ESP、EBP等的精确位置。
2.3构造针对war-ftp v1.65的exploit
根据上述的分析结果,参照实践课件的例子,从网上(主要是metasploit.com)获取shellcode,构造exploit。
三.环境
3.1调试工具
CDB(安装Debugging Tools for Windows),这个实践使用CDB就足够了。
OllyDBG,一个强大的具有可视化界面的 32 位汇编-分析调试器。
3.2编程语言
使用C语言,能找到的shellcode只有C、perl、ruby、javascript、raw的,本人只对C熟悉。
3.3网络环境
使用虚拟机Vmware6.5,物理主机与虚拟机内装的windowsXP(192.168.85.3),windows server 2000(192.168.85.6),windows server 2003(192.168.85.5)所处网段为192.168.85.0/24。
3.4其它工具
Shellcode生成工具:http://www.metasploit.com:55555/PAYLOADS
堆栈指针定位工具:ActivePerl,提供perl运行环境;安装metasploit后, frameworklib下的PatternCreate.pl可用于构造一个不重复的字符串;framework/sdk下的patternOffset.pl用来计算来前者产生的字符串中某段字符的偏移量。
四.设计(详细过程)
4.1验证War-ftp v1.65基于用户名的缓冲溢出漏洞
在虚拟主机WindowsXP中运行war-ftp 1.65,允许匿名登录;
在物理主机使用cuteftp登录,用户名使用依次增加的“AAA…”,当用户名长度超过480时,war-ftp 1.65出现异常甚至崩溃退出。使用cdb(480个A),OllyDBG(481个A),cdb(486个A)调试截图如下:
图4-1:用户名为480个A
图4-2:用户名为481个A
图4-3:用户名为486个A
图4-4:用户名为500个A
图