Blog yang berisi informasi tentang linux, program, blogger, seo, tutorial, security

Thursday, 6 February 2014

Memperkuat Halaman Admin Wordpress

Google Ads
Google Ads



Memperkuat Halaman admin wordpress - Hi Sobat bekasi coders setelah jalan-jalan di forum tercinta ane menemukan post yang sangat berguna dan dibuat oleh mas ArRay a.k.a Xterm untuk menambah security di website-website kalian yang menggunakan CMS Wordpress.


karena sql injection emang mudah n paling banyak di temukan. gak tanggung-tanggung dah pasti tujuan adalah username dan password admin,
abis itu cari admin pagee .



sebelum saya kasih script code php-nya saya kasih spesifik kerjanya

  1. Page not found jika di akses dari ip address yang bukan ip address administrator. ip address administrator bisa di set sebelumnya. sehingga hanya akses dari ip address yang telah di set lah yg bisa membuka admin page. but tetep butuh login.
  2. Hindari user yang menggunakan proxy. yah... penggunaan proxy emang identik dengan upaya penyerangan. Klo gak mau nyerang, ngapa sembunyiin ip adress? hehe. Inget jurus local proxy reserv? ini salah satu yang musti di hindari. User menggunakan proxy tidak di perbolekan akses.
  3. Hindari SQL Injection. sql inj emang menyebabkan error jika tidak di filter dengan baik. but kali ini, jika di temukan tanda2 sql inj, proses di hentikan. dan langsung username invalid.
  4. Hindari bypass login form. Tak jarang pula hacker melakukan serangan untuk menghindari login form dengan cara mengirimkan variable melalui GET, yg seharusnya di kirim melalui form login dengan methode POST. Gerak-gerik mencurigakan seperti ini, harus di hindari.
  5. Hindari Bruteforce. Form login, adalah sasaran utama bruteforce. Dengan mencoba ribuan kombinasi karakter untuk coba2 password untuk mnemukan login. Nah, kita hindari dengan memberi max 3x (atau bisa di set) jumlah error. lebih darijumlah yg di tentukan, langsung error tanpa pengecekan.
Untuk mencoba jurus ini, di butuhkan 1 file untuk mencatat log2 serangan. Beri aja nama log.txt, or sesuka kalian, yg penting config nya bener. n file log ini harus perm 777.

Di bawah ini adalah script dari code tersebut :D



Code:
<?
/********************************************************************************​/
/*    ADMINISTRATOR PAGE GUARDER  -  For Securing the Admin's Page              */
/*    SQL Injection, Brute force, Not Allowed IP n Proxy, Login form bypass     */
/*    By ArRay a.k.a XterM ~ Hacker-Newbie Crew                                 */
/*    http://hacker-newbie.org                                                  */
/*    contact : ArRay@Hacker-Newbie.Org                                         */
/********************************************************************************​/

###################### CONFIGURATIONS ###############################

define(_LOGFILE,"log.txt");
define(_ERRFILE,"<font color=red><b>Username Invalid !!!</b></font>");
define(_ADMINFILE,"<font color=green><b>Welcome Administrator</b></font>");
define(_INADMIN,"TRUE");
define(_ATTACT,"' \" \\ + - / < > "); // tambahkan sendiri. baca di artikel q sebelumnya.
define(_IPADMIN,"127.7.0.1"); // ip address admin
define(_MAXERROR,"3"); // max login error. untuk menghindari bruteforce

$attact[PRX] = "Proxied User";
$attact[SQL] = "SQL Injection";
$attact[NOT] = "Bukan IP Admin";
$attact[BYP] = "Bypass login form";
$attact[BFC] = "Brute forcing";

/* jika hanya ip address yg di tentukan saja boleh akses admin, maka TRUE, else FALSE */
$IPREGONLY = TRUE; // enable ip limitation

###################### FUNCTIONS ###############################

function adminguard($ERR,$ATTLOG){
    global $attact,$REMOTE_ADDR;  
    $log  = date("Y-m-d H:i:s")."\t";
    $log .= $REMOTE_ADDR."\t";
    $log .= $attact[$ERR]."\t";
    $log .= ($ERR=='SQL' || $ERR='BFC')?"\t":"";
    $log .= $ATTLOG."\t";
    $log .= "\r\n";
    $handle = fopen(_LOGFILE,'a');
    fwrite($handle,$log);
    fclose($handle);
    echo ($ERR=='NOT')?notfound():_ERRFILE;
    EXIT();
}

function loginform(){
    $output = "<form action='".$_SERVER['PHP_SELF']."' method='post'>";
    $output .= "Username : <input type=text name=username /><br />";
    $output .= "Password : <input type=password name=password /><br />";
    $output .= "<input type=submit name=login value=login />";
    $output .= "</form>";
    return $output;
}

function notfound(){
    //sesuaikan dengan halaman notfound yg sebenernya
?>  
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
    <title>Error 404</title>
    <style type="text/css"><!--/*--><![CDATA[/*><!--*/
        body { color: #000000; background-color: #FFFFFF; }
        a:link { color: #0000CC; }
        p, address {margin-left: 3em;}
        span {font-size: smaller;}
    /*]]>*/--></style>
    </head>
    <body>
    <h1>Error 404</h1>
    <h2>Object not found!</h2>
    <p>The requested URL was not found on this server.If you entered the URL manually please check your spelling and try again.<p>
    </body>
    </html>
<?
}

###################### PROCESSES ###############################

//start session
session_start();

/* CEK APAKAH IP = IPADMIN (jika $IPREGONLY = TRUE) */
IF($IPREGONLY){
    if($REMOTE_ADDR != _IPADMIN) adminguard('NOT','');
}
/* DALAM KEPERLUAN, PERBOLEHKAN IP LUAR UNTUK AKSES ADMIN PAGE ($IPREGONLY = FALSE) */
/* BANYAK SERANGAN YANG MUNGKIN. KITA CHECK 1 BY 1 */


/* chek apakah user memakai proxy */
/* user memakai proxy kemungkinan melakukan serangan*/
if($HTTP_X_FORWARDED_FOR) adminguard('PRX',$HTTP_VIA);

/* check user melakukan bypassing login form */
if(!empty($_SERVER['QUERY_STRING'])) adminguard('BYP','/?'.$_SERVER['QUERY_STRING']);

/* check kemungkinan serangan ( defined by _ATTACT ) */
/* jika lolos sampai sini, kemungkinan serangan adalah injek login form */
if($_POST['login']){
    /* cek mysql injection */
    $chars = explode(" ",_ATTACT);
    for($i=0;$i<strlen($_POST['username']);$i++){
        if(in_array(substr($_POST['username'],$i,1),$chars)) adminguard('SQL',$_POST['username']);
    }
    for($i=0;$i<strlen($_POST['password']);$i++){
        if(in_array(substr($_POST['password'],$i,1),$chars)) adminguard('SQL',$_POST['password']);
    }
  
    /* cek bruteforcing */
    $_SESSION[errlogin]=($_SESSION['errlogin'])?$_SESSION['errlogin']+1:1;
    if($_SESSION['errlogin'] >= _MAXERROR) adminguard('BFC','Username: '.$_POST['username'].' - Password: '.$_POST['password']);
    echo $_SESSION['errlogin'];
    //cek password bener or salah. hanya contoh, saya pake password langsung. dalam praktek, sesuaikan denan pengecekan database
    if($_POST['username'] != "array" && $_POST['password'] != "xterm"){
        if($_SESSION['errlogin'] >= _MAXERROR) {
            adminguard('BFC','Username: '.$_POST['username'].' - Password: '.$_POST['password']);
            echo loginform();
        }
        echo _ERRFILE;
    }
    else{
        echo _ADMINFILE;
    }
}
else{
    echo loginform();
}
?>

Untuk di web yang menggunakan joomla dari sumber tersebut tidak disebutkan bagaimana caranya.
tetapi mungkin diperlukan beberapa perubahan pada nama variabel yang digunakan. Jika pada joomla menggunakan form login dgn nama field user dan pass. Berarti: $_POST['user'] dan $_POST['pass']

Sekian tulisan dari saya yang garing ini 
Keep Saving Your Website :)

Google Ads
Facebook Twitter Google+

Back To Top