Penyerangan XSS dengan cara Session Fixation

chmood




saya dah pensiun dunia underground nan, namun saya akan tetap sharing dengan kalian semua :D




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. Mari kita bahas...




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 JasmanX
* @copyright JasmanX 2015
*/


session_start();

//save comment
if(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'] == '[email protected]')) {
$_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>



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..



Regard,

Jasman

Komentar