Winsock Ftp Daemon内存溢出及修复

当输入的命令行超过172个字符(后接1个\n),程序发生访问异常。

向ftp server发送如下方式构造的数据包:

if s_block_start("body"): s_static("1"*32) s_static("2"*32) s_static("3"*32) s_static("4"*32) s_static("5"*32) s_static("6"*32) s_static("7"*12) s_static("\n") s_delim(" ") s_block_end()

当输入的命令行超过172个字符(后接1个\n),0041A661处指令发生访问异常。

原因是用全局变量dword_4321F8给ecx赋值时(0040836B指令处),dword_4321F8已经被改写为用户输入命令。

漏洞的原因是:

在 00402936指令处调用vsprintf之前没有判断目标缓冲区0x432130(只有200字节)的边界,导致后面紧跟的全局变量dword_4321F8被改写。由于程序在向目标缓冲区0x432130打印字符串时会在前面加入“500 undefined command ”这样的前缀,所以用户输入只要超过172个字符就会导致目标缓冲区溢出,程序出错退出。

Winsock Ftp Daemon内存溢出及修复


Winsock Ftp Daemon内存溢出及修复

Winsock Ftp Daemon内存溢出及修复

Winsock Ftp Daemon内存溢出及修复

Winsock Ftp Daemon内存溢出及修复

Winsock Ftp Daemon内存溢出及修复

Winsock Ftp Daemon内存溢出及修复

导致程序出错退出

修复的方式:

在 00402936指令处调用sprintf函数时,判断源字符串的长度。程序里类似这样的问题还有很多。

分类:默认分类 时间:2015-03-01 人气:0
本文关键词:
分享到:

相关文章

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.044 (s). 10 q(s)