Monday, May 28, 2012

Cara Melindungin Halaman Admin..



Ketika kita melakukan serangan SQL injection dah pasti langsung cari kolom dan table yang berhubungan sama username dan password administrator.

Nah setelah itu pasti kita langsung mencari admin page-nya. Beberapa dari kita lancar, mungkin dengan sedikit keberuntungan? Tebak – tebakan atau menggunakan tools. Nah sisanya bakalan kebingungan dan nyerah gitu aja (mungkin ini masalah yang sering dialami, saya juga gitu), karena dah nyerah cuman posting di forum hasil injectnya doang. Entah ingin sharing? Berharap orang lain menemukan admin pagenya? Atau cuman sekedar pamer? Who knows?

Itulah salah satu proteksi yang dilakukan oleh sang Administrator yaitu membuat nama yang unik bagi halaman adminnya. Mungkin beberapa tools yang bekerja secara Brute Force atau menyimpan list nama – nama halaman admin yang biasa digunakan bakalan gak berguna cuman bagi tools seperti Acunetix yang bekerja secara crawler?

Mungkin tips trik disini gak terlalu berguna cuman menarik aja, sapa tau ada ide – ide yang lebih bagus. Intinya walaupun admin pagenya telah di dapat tetapi kita menambah beberapa proteksi lagi dan siapa tau membuat sang attacker putus asa?

Langsung ja…

1. Mengamakan Admin Page Dengan Proteksi IP Tertentu.

Disini kita menggunakan file .htaccess.

Code:
<Limit GET POST PUT>
     order deny,allow
     deny from all
     allow from 192.168.1.5
</Limit>
Jadi letakkan file .htaccess tersebut di direktori tempat admin pagenya berada. Hanya IP 192.168.1.5 yang bisa masuk.


2. Double Password.

WTF? Kok double? Kan si Attacker dah liat isi database kita?

Gini, sebenernya ini juga saya asal – asal mikir aja dan mungkin bisa kita terapkan. Beberapa pikiran – pikiran saya cuman ini doang yang bisa saya praktekkan (maklum hasrat kuat skill kurang). Intinya satu password disimpan di database yang satu lagi enggak.

Berikut contoh simplenya.

Pertama kita buat database latihan1 dengan table useradmin yang isinya id_user (int(5), auto_increment, primary_key), username (varchar(25)) dan password (varchar(25)).



Setelah itu kita buat dulu halaman login adminnya (index.php) yang berisi kode berikut…

Code:
<form id="form1" name="form1" method="post" action="cek_user.php">
  <table width="200" border="1">
    <tr>
      <td>Username</td>
      <td><input name="username" type="text" id="username" /></td>
    </tr>
    <tr>
      <td>Password</td>
      <td><input name="password" type="password" id="password" /></td>
    </tr>
    <tr>
      <td>Pass2</td>
      <td><input name="password2" type="password" id="password2" /></td>
    </tr>
    <tr>
      <td> </td>
      <td><input type="submit" name="Submit" value="Submit" /></td>
    </tr>
  </table>
</form>

Ketiga buat file cek_user.php

Code:
<?php
include "koneksi.php";
session_start();
$username    =    trim(strip_tags(mysql_real_escape_string($_POST['username'])));
$password    =    trim(strip_tags(mysql_real_escape_string($_POST['password'])));
$password2    =    trim(strip_tags(mysql_real_escape_string($_POST['password2'])));
if(strlen($username)<1)
    {
print "<script>alert('Username Masih Kosong');
javascript:history.go(-1);</script>";
exit;
    }
else if(strlen($password)<1)
    {
print "<script>alert('Password Masih Kosong!');
javascript:history.go(-1);</script>";
exit;
    }
else if(strlen($password2)<1)
    {
print "<script>alert('Password2 Masih Kosong!');
javascript:history.go(-1);</script>";
exit;
    }
else {
$cari_dulu = "select username, password from useradmin where username = '$username' and password = '$password'";
$jalanin_sql = mysql_query($cari_dulu);
$cek_ada_gak = mysql_num_rows($jalanin_sql);
if ($cek_ada_gak == 1  and $password2 == 'cadangan')
{
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
header("location: berhasil.php");
}
else
header("location: index.php");
}
?>
Jangan lupa untuk membuat koneksi.php

Code:
<?php
$my['host']        =    "localhost";
$my['user']        =    "root";
$my['pass']        =    "cruzenaldo";
$my['dbs']        =    "latihan1";
$koneksi        = mysql_connect($my['host'], $my['user'], $my['pass']);
if (! $koneksi) {
    echo "Gagal Koneksi Bro....";
    mysql_error();
    }
mysql_select_db($my['dbs'])
    or die ("Database Gak Ada".mysql_error());
?>
berhasil.php apabila kita berhasil melakukan login.

Code:
<?php
include "cek.session.php";
echo "Berhasil";
echo "<a href='logout.php'>Log Out</a>";
?>
cek.session.php untuk mencek apakah session ada. Apabila tidak ada akan menampilkan pesan error.

Code:
<?php
session_start();
if(! (session_is_registered('username') && session_is_registered('password')))
{
    echo "<div align=center><b> PERHATIAN ..!!! </b><br>";
    echo "KAMU HARUS LOGIN DULU :p <meta http-equiv='Refresh' content='2; URL=index.php'/></div>";
    exit;
}
?>
Dan logout.php untuk menghapus session.

Code:
<?php
session_start();
if ($_REQUEST['logout'] == "yes")
session_unset();
session_destroy();
header("location: index.php");
?>
Pada cek_user.php password keduanya adalah "cadangan".


Jujur ini cuman sekedar iseng doang, gak ada yang aman 100 persen apalagi buat kalian yang dah pada jago – jago neh.

Mohon tambahan dan kritiknya yang membangun… Sapa tau muncul ide – ide baru ...?

1 comment: