Security (1) : Memahami fungsi eval di php anda

Beberapa hari terakhir banyak sekali situs berbasis wordpress yang menjadi korban keisengan beberapa orang yang tampaknya memanfaatkan kelemahan CMS ini.

Dari beberapa pengamatan, tampaknya deface yang dilakukan pelaku menggunakan teknik “menyisipkan kode” di baris php wordpress. Penyisipan ini bisa dilakukan dimana saja, bisa di themes, plugins atau dimanapun, sehingga tidak mudah untuk ditemukan.

Salah satu kode sederhana  yang mungkin disisipkan adalah “eval”

[sourcecode language=”php”]
eval ( string $code_str )
[/sourcecode]

Fungsi eval sendiri berfungsi untuk mengevaluasi string yang diberikan di $code_str diatas sebagai kode php.

Mari kita buat contoh :

Jika ada kode seperti ini di baris php anda untuk sebuah form login :

[sourcecode languange=”php”]
eval($_POST[‘username’])
[/sourcecode]

Maka ketika saya mengetikkan di form login tersebut :

[sourcecode languange=”php”]
mail(‘rezaervani@gmail.com’, ‘Bla’, ‘Bla bla bla’);
[/sourcecode]

Maka form tersebut akan mengirimkan email ke rezaervani@gmail.com, karena kode diatas adalah kode standar php untuk mengirimkan email.

Kini tentu anda bisa membayangkan apa jadinya kalau string di dalam kurung eval tersebut saya isi dengan kode yang dapat memanipulasi tampilan website anda, atau dengan kode yang akan mengirimkan data-data penting setiap anda mengakses situs ke email saya.

Seorang peretas, dapat memanfaatkan kesalahan penggunaan eval ini sebagai lubang untuk masuk ke dalam situs anda.

Enkoding Basis 64

Yang membuat kita semakin sulit mendeteksi mana fungsi eval yang benar dan mana yang salah adalah terkadang para peretas melakukan enkoding terhadap string yang ada di dalam eval.

Contoh :

[sourcecode languange=”php”]
eval(base64_decode(‘aWYoZnVuY3Rpb25fZXhpc3RzKCdvYl9zdG

FydCcpJiYhaXNzZX QoJEdMT0JBTFNbJ3NoX25vJ10pKXskfX19’) ); ?>
[/sourcecode]

Jika di dekoding maka akan tampak seperti :

[sourcecode language=”php”]
if(function_exists(‘ob_start’)&&!isset($GLOBALS[‘sh_no’])){$GLOBALS[‘sh_no’]=1;
if(file_exists(‘/afs/ncsa/web/www.site.org/htdocs/PostNuke-0.750b/html/moodle/
mdl_utf.php’)){include_once …
[/sourcecode]

Cek Kode Sumber Anda

Untuk kehati-hatian sebelum mengunggah (upload) kode wordpress atau CMS lainnya ke situs anda, anda dapat memeriksa dulu kode sumber yang anda miliki. Atau jika situs anda sudah terinfeksi, unduh seluruh kode sumber dari situs anda ke localhost dan lakukan investigasi.

Cara sederhananya adalah menggunakan perintah grep :

Contoh :

grep -rin "eval(base64_decode" /alamatkodesumberanda

Jika anda merasa ada kejanggalan, bandingkan kode tersebut dengan kode CMS yang sama hasil fresh download.

Demikian, semoga bermanfaat. (rezaervani@gmail.com)

2 Comments

Leave a Reply

Your email address will not be published.


*