Pages

Friday, 11 September 2015

Penyerangan XSS dengan cara Session Fixation

Sebagai seorang programmer seharusnya kita tidak boleh mengabaikan sekecil apapun celah keamanan baik itu xss maupun yang lainnya. Pada sharing kali ini saya akan bahas masalah Session Fixation. apa itu session fixation? bagaimana cara pencegahannya.

Session Fixation merupakan metode penyerangan dengan cara memaksa target menggunakan session yang kita ingini, faktor resiko yang ditimbulkan akan lebih bahaya dari pada Session Hijacking (mencuri session).

Seperti apa resiko session fixation? logikanya sederhana sekali, karena session kita yang dipakai target, jadi apa yang terjadi pada target akan terjadi pada kita. Misal target melakukan login sebagai admin, maka kita pun ikut login menjadi admin. Resiko lain yang ditimbulkan yaitu SEMUA orang yang mengakses web target akan menjadi admin juga. wwkwkkwkw

Untuk lebih memahaminya mari kita praktekan, sediakan Apache+PHP nya (XAMPP juga boleh), dan dua buah browser (firefox, opera, chrome juga boleh). Firefox kita gunakan sebagai browser untuk attacker, dan chrome/opera untuk admin.

Simpan kode dibawah ini kedalam servernya:

"
<?php
/**
 * @author JasmanXcrew
 * @copyright ExploreCrew 2015
 * @author Www.ExploreCrew.Org
 */

session_start();
//save commentif(isset($_POST['comment'])) {
    
file_put_contents(time().'.json',json_encode($_POST));
}


if(@
$_SESSION['admin'] == true) {
    echo 
'Welcome admin';
} else {
    if(isset(
$_POST['login'])) {
        if((
$_POST['password'] == 'xcrew') && ($_POST['email'] == 'blueboyz@explorecrew.org')) {
            
$_SESSION['admin'] = true;
        }
    }
    echo 
'<form method="post" action="">';
    echo 
'<fieldset>';
    echo 
'<legend>Form Login</legend>';
    echo 
'<div><label>Username</label><input type="text" name="email" /></div>';
    echo 
'<div><label>Password</label><input type="password" name="password" /></div>';
    echo 
'<input type="submit" name="login" />';
    echo 
'</fieldset>';
    echo 
'</form>';
}


echo 
'<form method="post" action="">';
echo 
'<fieldset>';
echo 
'<legend>Comment</legend>';
echo 
'<div><label>Name</label><input type="text" name="name" /></div>';
echo 
'<div><label>Comment</label><textarea name="comment"></textarea></div>';
echo 
'<input type="submit" name="comment" />';
echo 
'</fieldset>';
echo 
'</form>';

foreach(
glob("*.json") as $filename) {
    
$comment json_decode(file_get_contents($filename));
    echo 
'<hr/>';
    echo 
'<h4>'.$comment->name.'</h4>';
    echo 
'<p>'.$comment->comment.'</p>';
}
?> "





Sekarang kita bertindak sebagai attacker, sebagai seorang attacker tentu kita akan mencoba mencari celah2 yang ada pada web target, tentu kita tes xss pada komentar. pada contoh tsb ada xss.
perhatikan kode berikut ini:
 
" <script>document.cookie="PHPSESSID=paksa-admin-pake-ini-session";</script> "
 
Text Di atas Kirimkan pada komentar 

itu artinya set cookies PHPSESSID, itu merupakan default session PHP. pada cookies hijacking kita mengambil cookies tersebut namun pada fixation kita men-set cookies tersebut. sehingga semua pengunjung web memiliki cookies yang sama.
Jadi jika ada user lain memiliki akun premium/gold kita akan mendapatkannya juga.


Sekarang kita coba login pake browser opera/chrome..., ok,, setelah itu coba refresh halaman firefox??? apa yang terjadi? kenapa bisa terjadi?? itu lah yang disebut dengan Session FIxation..


Pencegahannya jangan biarkan ada XSS dan selalu regenerate session jika digunakan pada browser/ip yang berbeda. 
 
Thanks Too: Mas Regel 

1 comment: