Patching Vulnerable Site part 2 (Patching Session)

Aloha everybody, di suasana tahun baru 2011 ini, ane akan menepati janji ane di postingan ane tentang Patching Vulnerable Site part 1 (Patching sqli) yaitu tentang patching website yang tidak menggunakan session. Sebelumnya kita cari tau dulu yuk arti dari sessin tersebut, “A PHP session variable is used to store information about, or change settings for a user session. Session variables hold information about one single user, and are available to all pages in one application.” (http://www.w3schools.com/php/php_sessions.asp) Artinya kira – kira seperti ini “Variabel session php digunakan untuk menyimpan sesuatu informasi, atau mengganti pengaturan untuk sesi user. Variabel session menyimpan informasi tentang seorang user, dan berguna untuk semua halaman dalam sebuah aplikasi” << kalau rada ngawur mohon dimaklumi wkwkwkwkw🙂

Pertama – tama download dulu file latihannya disini

Kalau udah di download langsung aja diekstrak di C:\xampp\htdocs\, edit file koneksi.php di config/koneksi.php sesuai dengan pengaturan ente. Nah nih dia link – link yang tidak menggunakan filter session, sehingga setiap orang bisa membukanya, padahal seharusnya hanya admin saja yang bisa membuka link ini. Karena itu, tugas kita kali ini adalah memperbaiki link ini agar hanya bisa dibuka oleh admin saja😉 Neh daftar linknya

http://localhost/indocms/admin/content.php?module=user

neh gambarnya :

http://localhost/indocms/admin/content.php?module=banner

http://localhost/indocms/admin/content.php?module=berita

http://localhost/indocms/admin/content.php?module=profil

http://localhost/indocms/admin/content.php?module=hubungi

http://localhost/indocms/admin/content.php?module=modul

Targetnya udah ada, sekarang saatnya beraksi, yeah !!! Bila dilihat dari daftar url diatas, file yang berfungsi untuk memanggil modul adalah file content.php, sekarang coba kita liat isinya !  buka file ini dengan notepad++ atau aplikasi editor lainnya, maka kita bisa melihat kalau file content.php memanggil file yang berada di direktori modul :


<?php
 include "../config/koneksi.php";
 include "../config/library.php";
 include "../config/fungsi_indotgl.php";
 include "../config/fungsi_combobox.php";
 include "../config/class_paging.php";

// Bagian Home
 if ($_GET[module]=='home'){
 echo "<h2>Selamat Datang</h2>
 <p>Hai <b>$_SESSION[namauser]</b>, silahkan klik menu pilihan yang berada
 di sebelah kiri untuk mengelola content website. </p>
 <p>&nbsp;</p>
 <p>&nbsp;</p>
 <p>&nbsp;</p>
 <p>&nbsp;</p>
 <p align=right>Login Hari ini: ";
 echo tgl_indo(date("Y m d"));
 echo " | ";
 echo date("H:i:s");
 echo "</p>";
 }

// Bagian Profil Lembaga
 elseif ($_GET[module]=='profil'){
 $sql  = mysql_query("SELECT * FROM modul WHERE id_modul='11'");
 $r    = mysql_fetch_array($sql);

echo "<h2>Profil Lembaga</h2>
 <form method=POST enctype='multipart/form-data' action=aksi.php?module=profil&act=update>
 <input type=hidden name=id value=$r[id_modul]>
 <table>
 <tr><td><img src=foto_berita/$r[gambar]></td></tr>
 <tr><td>Ganti Foto : <input type=file size=30 name=fupload></td></tr>
 <tr><td><textarea name=isi cols=94 rows=30>$r[static_content]</textarea></td></tr>
 <tr><td><input type=submit value=Update></td></tr>
 </form></table>";
 }

// Bagian User
 elseif ($_GET[module]=='user'){
 include "modul/mod_user.php";
 }

// Bagian Modul
 elseif ($_GET[module]=='modul'){
 include "modul/mod_modul.php";
 }

// Bagian Agenda
 elseif ($_GET[module]=='agenda'){
 include "modul/mod_agenda.php";
 }

// Bagian Berita
 elseif ($_GET[module]=='berita'){
 include "modul/mod_berita.php";
 }

// Bagian Pengumuman
 elseif ($_GET[module]=='pengumuman'){
 include "modul/mod_pengumuman.php";
 }

// Bagian Banner
 elseif ($_GET[module]=='banner'){
 include "modul/mod_banner.php";
 }

// Bagian Hubungi Kami
 elseif ($_GET[module]=='hubungi'){
 include "modul/mod_hubungi.php";
 }

// Apabila modul tidak ditemukan
 else{
 echo "<p><b>MODUL BELUM ADA</b></p>";
 }
 ?>

Kemudian kita buka salah satu file modul diatas, yaitu file mod_user.php yang berada di direktori admin/modul/mod_user.php, isi filenya seperti ini :

 


<?php
 switch($_GET[act]){
 // Tampil User
 default:
 echo "<h2>User</h2>
 <input type=button value='Tambah User' onclick=location.href='?module=user&act=tambahuser'>
 <table>
 <tr><th>no</th><th>username</th><th>nama lengkap</th><th>email</th><th>aksi</th></tr>";
 $tampil=mysql_query("SELECT * FROM user ORDER BY id_user");
 $no=1;
 while ($r=mysql_fetch_array($tampil)){
 echo "<tr><td>$no</td>
 <td>$r[id_user]</td>
 <td>$r[nama_lengkap]</td>
 <td><a href=mailto:$r[email]>$r[email]</a></td>
 <td><a href=?module=user&act=edituser&id=$r[id_user]>Edit</a> |
 <a href=./aksi.php?module=user&act=hapus&id=$r[id_user]>Hapus</a>
 </td></tr>";
 $no++;
 }
 echo "</table>";
 break;

case "tambahuser":
 echo "<h2>Tambah User</h2>
 <form method=POST action='./aksi.php?module=user&act=input'>
 <table>
 <tr><td>Username</td>     <td> : <input type=text name='id_user'></td></tr>
 <tr><td>Password</td>     <td> : <input type=text name='password'></td></tr>
 <tr><td>Nama Lengkap</td> <td> : <input type=text name='nama_lengkap' size=30></td></tr>
 <tr><td>E-mail</td>       <td> : <input type=text name='email' size=30></td></tr>
 <tr><td colspan=2><input type=submit value=Simpan>
 <input type=button value=Batal onclick=self.history.back()></td></tr>
 </table></form><br><br>";
 break;

case "edituser":
 $edit=mysql_query("SELECT * FROM user WHERE id_user='$_GET[id]'");
 $r=mysql_fetch_array($edit);

echo "<h2>Edit User</h2>
 <form method=POST action=./aksi.php?module=user&act=update>
 <input type=hidden name=id value='$r[id_user]'>
 <table>
 <tr><td>Username</td>     <td> : <input type=text name='id_user' value='$r[id_user]'></td></tr>
 <tr><td>Password</td>     <td> : <input type=text name='password'> *) </td></tr>
 <tr><td>Nama Lengkap</td> <td> : <input type=text name='nama_lengkap' size=30  value='$r[nama_lengkap]'></td></tr>
 <tr><td>E-mail</td>       <td> : <input type=text name='email' size=30 value='$r[email]'></td></tr>
 <tr><td colspan=2>*) Apabila password tidak diubah, dikosongkan saja.</td></tr>
 <tr><td colspan=2><input type=submit value=Update>
 <input type=button value=Batal onclick=self.history.back()></td></tr>
 </table></form>";
 break;
 }
 ?>

Ternyata yang membuat file ini dapat diakses tanpa hak akses khusus adalah karena tidak adanya filter session di file ini, baiklah kita sudah tau vulnerablenya, it’s patching time now😉 Untuk mengetahui session yang dipakai untuk admin, buka file cek_login.php disana kita bisa melihat ada 3 session yang diregister :

 


<?php
 include "../config/koneksi.php";
 $pass=md5($_POST[password]);

$login=mysql_query("SELECT * FROM user WHERE id_user='$_POST[username]' AND password='$pass'");
 $ketemu=mysql_num_rows($login);
 $r=mysql_fetch_array($login);

// Apabila username dan password ditemukan
 if ($ketemu > 0){
 session_start();
 session_register("namauser"); //session untuk username
 session_register("passuser"); // session untuk password
 session_register("leveluser");

$_SESSION[namauser] = $r[id_user];
 $_SESSION[passuser] = $r[password];
 $_SESSION[leveluser]= $r[level];
 header('location:media.php?module=home');
 }
 else{
 echo "<link href=../config/adminstyle.css rel=stylesheet type=text/css>";
 echo "<center>Login gagal! username & password tidak benar<br>";
 echo "<a href=index.php><b>ULANGI LAGI</b></a></center>";
 }
 ?>

Nah kita sudah mengetahui beberapa session yang dipakai untuk admin, buka file mod_user.php, lalu tambahkan script ini diatasnya kemudian tambahkan tanda } di baris paling akhir sebelum tanda ?> :

 


<?php
 session_start();
 if (empty($_SESSION[namauser]) AND empty($_SESSION[passuser])){
 echo "ayo mau ngapaen ??? ";
 }
 else{
 ?>

Jadi script lengkapnya seperti ini :

 


<?php
 session_start();
 if (empty($_SESSION[namauser]) AND empty($_SESSION[passuser])){
 echo "ayo mau ngapaen ??? ";
 }
 else{
 ?>

<?php
 switch($_GET[act]){
 // Tampil User
 default:
 echo "<h2>User</h2>
 <input type=button value='Tambah User' onclick=location.href='?module=user&act=tambahuser'>
 <table>
 <tr><th>no</th><th>username</th><th>nama lengkap</th><th>email</th><th>aksi</th></tr>";
 $tampil=mysql_query("SELECT * FROM user ORDER BY id_user");
 $no=1;
 while ($r=mysql_fetch_array($tampil)){
 echo "<tr><td>$no</td>
 <td>$r[id_user]</td>
 <td>$r[nama_lengkap]</td>
 <td><a href=mailto:$r[email]>$r[email]</a></td>
 <td><a href=?module=user&act=edituser&id=$r[id_user]>Edit</a> |
 <a href=./aksi.php?module=user&act=hapus&id=$r[id_user]>Hapus</a>
 </td></tr>";
 $no++;
 }
 echo "</table>";
 break;

case "tambahuser":
 echo "<h2>Tambah User</h2>
 <form method=POST action='./aksi.php?module=user&act=input'>
 <table>
 <tr><td>Username</td>     <td> : <input type=text name='id_user'></td></tr>
 <tr><td>Password</td>     <td> : <input type=text name='password'></td></tr>
 <tr><td>Nama Lengkap</td> <td> : <input type=text name='nama_lengkap' size=30></td></tr>
 <tr><td>E-mail</td>       <td> : <input type=text name='email' size=30></td></tr>
 <tr><td colspan=2><input type=submit value=Simpan>
 <input type=button value=Batal onclick=self.history.back()></td></tr>
 </table></form><br><br>";
 break;

case "edituser":
 $edit=mysql_query("SELECT * FROM user WHERE id_user='$_GET[id]'");
 $r=mysql_fetch_array($edit);

echo "<h2>Edit User</h2>
 <form method=POST action=./aksi.php?module=user&act=update>
 <input type=hidden name=id value='$r[id_user]'>
 <table>
 <tr><td>Username</td>     <td> : <input type=text name='id_user' value='$r[id_user]'></td></tr>
 <tr><td>Password</td>     <td> : <input type=text name='password'> *) </td></tr>
 <tr><td>Nama Lengkap</td> <td> : <input type=text name='nama_lengkap' size=30  value='$r[nama_lengkap]'></td></tr>
 <tr><td>E-mail</td>       <td> : <input type=text name='email' size=30 value='$r[email]'></td></tr>
 <tr><td colspan=2>*) Apabila password tidak diubah, dikosongkan saja.</td></tr>
 <tr><td colspan=2><input type=submit value=Update>
 <input type=button value=Batal onclick=self.history.back()></td></tr>
 </table></form>";
 break;
 }
 }
 ?>

Nah sekarang proses patched untuk file mod_user.php sudah berhasil, agar proses patch berhasil sepenuhnya edit semua file yang ada di direktori modul lalu tambahkan script patchnya ok😉 Sekarang kita coba lagi buka http://localhost/indocms/admin/content.php?module=user dan ternyata…. viola site berhasil di patched🙂

Neh salah satu websiter yang webnya sudah ane pathced🙂

http://tamanboneka.info/admin/content.php?module=user

Happy patching mempatching all !!!

Patching Vulnerable Website part 1 (Patching Sqli)

2 comments on “Patching Vulnerable Site part 2 (Patching Session)

    • linknya kan hanya localhost bro, localhost itu artinya hanya sekedar server lokal di komputer kita jika kita sudah menginstall web server sperti xampp

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s