软件安全教学课件(鲁宏伟)缓冲区溢出溢出试验指导.pdf
文本预览下载声明
《 软件安全核心技术与实践》
实验指导
实验 1 Win32 漏洞攻防工具使用与实例分析
实验目的
掌握 Win32 进程的原理;
掌握 PE 格式文件以及载入原理;
掌握反汇编代码分析工具分析原理与使用方法。
实验要求
需独立使用进程分析工具分析 Win32 进程空间信息;
以小组为单位完成反汇编分析以获得演示程序的序列号。
测试与掌握函数反汇编执行流程
实验环境
操作系统:Microsoft windows XP SP3
目标软件:DemoD.exe
分析工具:OllyDbg,Visual C++ 6.0
实验内容
学习 LordPE.EXE ,通过该工具了解PE 格式结构;
ProcessExplorer 工具,了解在 win32 进程空间的各个执行程序的分布;
练习使用 OllyDbg, 按照课堂讲解掌握该工具各个模块的功能;
使用 OllyDbg 打开 DemoD.exe,分析序列号。
分析各类函数的调用方法,指出其调用区别。
实验 2 缓冲区溢出漏洞分析与利用
实验目的
掌握缓冲区溢出的原理;
掌握缓冲区溢出漏洞的利用技巧;
理解缓冲区溢出漏洞的防范措施。
实验要求
找到并定位溢出点;
利用缓冲区溢出执行 shellcode 。
实验环境
操作系统:Microsoft windows XP SP3
溢出软件:CCPROXY
溢出工具:OllyDbg,Visual C++ 6.0
实验内容
寻找溢出点:
CCPROXY 是一款代理服务器软件,通过主机机向代理端发送命令,然后代理
端向网络发送命令并且将结果返回给主机。本机与代理端的连接是通过 TCP 连
接的。
寻找溢出点的方法如下:首先用 telent 登陆 CCPROXY :
然后通过发送 ping 命令,主机名用超长的字符串进行填充。
如果没有发生溢出,代理端会返回 Host not found ,在命令行里输入比较长的字符
串比较麻烦,可以先使用在记事本里输入好字符串然后粘入命令行,测试当字
符串有 2000 个 a 时:
发现发生了溢出,这时需要对溢出点进行准确的定位,通过填充不同的字符串
的方法可以找到ping 后面跟的主机名的 1013 到 1016 这 4 个字节就应当是覆盖
到的 EIP 的地址。
这时便可以构造 shellcode 了。
首先,打开 Ollydbg 对代码进行跟踪,首先判断出应当是在回显 Host not found
的时候发生溢出,因此在WSAsend(004124F2)处下断点,然后单步执行。首先
将 ShellCode 填充的比较短时在运行了 call后发现在从 011366FE 时开
始 BUF 区中存放的是 Proxy TelnetCCProxy Telnet Service Ready.
Telnet
Host not found:后面是填充的字符串
这时可以考虑不需要在 JMP ESP 后往回跳,而是直接执行 ShellCode。加长
ShellCode 后,在 004303DC 处的返回时,此时的 EIP 便是填充的 JMP ESP
然后执行 7FFA4512 即JMP ESP ,而此时的代码为retn 0c 由于此时程序会返回
并且堆栈弹出 C 个字节即,JMP ESP 后会跳转到 011366F0+4+C处执
行。因此在字符串的前 4 个字节应当为无用的字节,从第五个字节开始便可以
用来写 ShellCode,构造的ping 主机名应当如下:
4 个字节的无用指令+ShellCode (最多可以从第5 个字节到 1012 个字节)+jmp
esp(第 1013 个字节到第 1016 个)+最后的填充字节 (主要是为了将回显的字符串
显示全部