看完不信你不会!缓冲区溢出漏洞实战——ccproxy溢出
一、实验目的
1.掌握缓冲区溢出的原理
2.掌握常用的缓冲区溢出方法
3.理解缓冲区溢出的危害性
4.掌握防范和避免缓冲区溢出攻击的方法
二、实验工具
CCProxy 6.2
调试工具:OllyDBG/IDAPro
实验环境:Windows XP sp2、虚拟机、kali虚拟机
一、实验步骤
- 找到并定位溢出点
使用ping命令加一个长的字符串加一个主机名,代理端会返回Host not found。
当输入的字符串足够长时(比如2000个a),软件就会溢出崩溃
通过kali里面的gdb工具,生成2000个不重复的字符
将2000个字符ping过去
使用OD找到跳转指令对应的内容
使用pattern offset指令查找AnBAn字符串,溢出字符从1013开始
发现ping后最多接1009个字符,第1010字符开始溢出,并且前四字节无用,如下图,当输入1013个a字符时,此时就有一个字符a溢出到了EIP的地址中
使用OD观察EIP被溢出的内容,利用OD的查找所有参考字符串“host not found”,找到后设置断点
接着发送1013长度的‘a’字符串,观察OD里EIP ESP等数值,当程序断在retn c时,可以看到此时ESP的值为‘011266F0’
当单步步过时,ESP的值为要加0XC+0X4,执行后为‘00126700’
因此,将001266F8填充为jmp esp指令,就可以实现跳转,所以希望填充0x7FFA4512,然后跳转到esp“01126700”,这里就是要添加shellcode的地方
- 添加用户shellcode(恶意代码)
通过编写C语言代码,使用命令system(“net user a /add”)
使用IDApro反汇编,在内存中找到硬编码
编写C语言代码,就是漏洞利用的shellcode
3.运用缓冲区溢出执行shellcode,可以看到成功溢出,并添加账户
4.运用OD分析攻击过程
可以看到,当将要retn c时,返回的地址内容变为7FFA4512,就是jmp esp的指令
然后单步步过,发现程序已经跳转到jmp esp的指令处
执行后,程序跳转到shellcode领空,开始添加账户操作,然后程序崩溃
5.实现一个具备远程桌面连接的shellcode
上面C语言程序不变,改变硬编码,注入后发现系统开启远程桌面功能