SlicK Posted December 17, 2006 Report Posted December 17, 2006 Acest program primeste ca parametru o lista de ipuri apoi testeaza fiecare ip pentru existenta anumitor fisiere.Nu este un scanner complet(si nu pretind ca este foarte corect).Disclaimer: Acest cod este doar demonstrativ, puteti face orice cu el(copiati-l,modificati-l) nu-mi pasa insa eu nu sunt raspunzator pentru eventualele actiuni daunatoare/ilegale pe care le alegeti sa le faceti.Am postat aceasta sursa pentru un singur motiv, acela ca atunci cand armatele de copii care cauta disperati scannere de tot felul numai pentru a avea mai multi botii pe irc decat "toarasii" vor renunta la a face acest lucru si vor incepe sa-si codeze(macar compileze) singuri programele poate vor realiza ca internetul este cu mult mai mare decat "./scan" si irc.Here it goes://se compileaza astfel: gcc -o scan scan.c#include <stdio.h>#include <netdb.h>#include <arpa/inet.h>#define RMT_PORT 80 // portul http#define LOOK "200 OK" //raspunsul pe care il cautam#define LOG_FILE "scan.log" // fisierul logChk(char *host){ struct sockaddr_in rmt_host; struct hostent *rh; FILE *LOG; char buffer[15]; // buffer pentru stocarea raspunsului serverului char *requ[255]; // array pentru stocarea requesturilor char *name[255]; // array pentru stocarea numelor fisierelor(pentru scrierea in log) int sock,i; memset(requ,0,255); //initializare cu 0 memset(name,0,255); memset(buffer,0,15); //setam fiecare request requ[1] ="GET /nodirectory/nofile.php HTTP/1.0nn"; //unele servere au raspunsuri custom pentru erorile gen 404 requ[2] ="GET /director1/fisier1.php HTTP/1.0nn"; requ[3] ="GET /director2/fisier2.php HTTP/1.0nn"; requ[4] ="GET /director3/fisier3.php HTTP/1.0nn"; requ[5] ="GET /director4/fisier4.php HTTP/1.0nn"; //setam fiecare nume name[1]=" /nodirectory/nofile.php"; name[2]=" /director1/fisier1.php"; name[3]=" /director2/fisier2.php"; name[4]=" /director3/fisier3.php"; name[5]=" /director4/fisier4.php"; if((LOG=fopen (LOG_FILE,"a"))==NULL) // deschidem logul pentru scriere { perror("[-] Cannot open log for writing!n"); exit(1); } if((rh=gethostbyname(host))==NULL) // numele hostului in functie de ip { printf("-"); exit(1); } printf("."); for(i=1 ; i<=5 ; i++) // tratam fiecare request in parte(5 in acest exemplu) { if((sock=socket(AF_INET,SOCK_STREAM,0))==-1) // deschidem socketul { printf("-"); exit(1); } bzero(&(rmt_host.sin_zero),8); rmt_host.sin_family = AF_INET; rmt_host.sin_addr=*((struct in_addr *)rh->h_addr); rmt_host.sin_port=htons(RMT_PORT); if(connect(sock,(struct sockaddr *)&rmt_host ,sizeof(rmt_host)) != 0) // ne conectam la server { printf("-"); exit(1); } send(sock,requ[i],sizeof(requ),0); // trimitem requestul recv(sock,buffer,sizeof(buffer),0); //citim raspunsul if((strstr(buffer,LOOK))!=0) // daca raspunsul contine stringul pe care il dorim("200 OK") { if (i!=1) //daca nu este gasit fisierul "nofile" { printf("X"); fputs(host,LOG); //scriem in log fputs(name[i],LOG); fputs("n",LOG); } else { exit(1); } } close(sock); // incidem socketul } fclose(LOG); //inchidem fisierul log}int main(int argc, char **argv){ FILE *In; // fisierul de intrare char LineBuffer[20]; // buffer pentru citirea din fisier int NumF=0; // numarul de procese, variaza in timpul rularii int MaxF; // numarul maxim de procese in acelasi timp if(argc!=2) // daca programul nu primeste nici un parametru { printf("[+] By YOUn"); printf("[+] Usage: %s [ip file]n",argv[0]); exit(0); } In=fopen (argv[1],"r"); // deschidem fisierul reprezentat de primul parametru if(In==NULL) // daca fisierul nu poate fi deschis { printf("[-] Cannot open %s for reading!n",argv[1]); exit(0); } printf("'x'=Found, '.'=not found, '-'=errorn"); MaxF=20; // setam numarul maxim de procese while(!feof(In)) // cat timp nu am ajuns la sfarsitul fisierului { fscanf(In,"%s",LineBuffer); // citim cate un rand if (!(fork())) // deschidem un proces nou { alarm(20); // timeout la 20 de secunde Chk(LineBuffer); // testam ipul alarm(0); exit(0); } else { NumF++; //crestem numarul de procese deschise if(NumF>MaxF) for(NumF; NumF>MaxF; NumF--) wait(NULL); //daca numarul de procese a depasit numarul maxim asteptam pana unul din ele se inchide } }}Daca am gresit ceva in acest cod pls anuntati-ma! Quote
PunjabHaker Posted December 19, 2006 Report Posted December 19, 2006 [+] By YOU[+] Usage: ./s [ip file]................................................. ./s 66[-] Cannot open 66 for reading!touch scat 217.26.150.5>s.txt./s s.txt'x'=Found, '.'=not found, '-'=errordeci in s.txt ce tre sa contina ? Quote
x0xboy Posted March 4, 2007 Report Posted March 4, 2007 uite frate ce ami da mie aici ~[root@andromeda .,]# gcc -o scan cgiscan.ccgiscan.c: In function `Chk':cgiscan.c:23: parse error before "memset"cgiscan.c:42: parse error before "exit"cgiscan.c:48: parse error before "exit"cgiscan.c:51: parse error before "for"cgiscan.c:51: parse error before ')' tokencgiscan.c:61: parse error before "rmt_host"cgiscan.c:96: `argc' undeclared (first use in this function)cgiscan.c:96: (Each undeclared identifier is reported only oncecgiscan.c:96: for each function it appears in.)cgiscan.c:99: parse error before "printf"cgiscan.c:102: `In' undeclared (first use in this function)cgiscan.c:102: `argv' undeclared (first use in this function)cgiscan.c:103: parse error before "if"cgiscan.c:115: parse error before "if"cgiscan.c:126: parse error before '}' token Quote
x0xboy Posted March 4, 2007 Report Posted March 4, 2007 sysgh0st Eu am incercat sa compilez prg de la slick dar ami da 300 de mii de erori Quote
SlicK Posted March 5, 2007 Author Report Posted March 5, 2007 PunjabHaker: Imi cer scuze daca "[+] Usage: ./s [ip file]" nu te-a lamurit... s.txt trebuie sa contina ip-urile pe care vrei sa le testezi cu vulnerabilitatea specificata.x0xboy: din nu stiu ce motiv au disparut foarte multe ';' incearca versiunea asta http://rootb0x.com/scan.csysgh0st: Felicitari pentru pozitia de "Super Administrator"! Din cate se pare te descurci destul de bine.Sunt sigur ca exemplul meu poate fi facut poate mult mai bine si in alte limbaje de programare dar unde ar mai fi diversitatea? C-ul este un limbaj mult mai "low level" si mai vechi decat multe altele si de altfel sta la baza sistemelor de operare UNIX(sunt sigur ca stiai asta deja . Parea mea e ca daca stii C poti invata cu usurinta orice alt limbaj "high level" si-ti poti exporta ideile in acel limbaj.Oricum scopul meu cred ca a fost destul de clar: vreau sa micsorez comunitatea de skiddie si sa o maresc pe cea de coderi. Quote
x0xboy Posted March 5, 2007 Report Posted March 5, 2007 Ms Mult Slick am incercat sa copilez atunci in redhat fedora si debian si tot nu ami mergea sa speram ca asta o sa mearga Quote
MadAgent Posted April 3, 2007 Report Posted April 3, 2007 nujt dc... mie nu-mi arata nici un ip... nu-mi salveaza nimica in scan.log, desi am bagat ip-uri care aveau acele fisiere pe http Quote
juice Posted May 4, 2007 Report Posted May 4, 2007 asa..bon..e ok scanerul cum e zis el ...dar /directorx/etc.. nu trebuia parametrizat in functie de (etc) ?..sau poate gresesc..nu cred sa fie vreun soft standardizat in *.ro paths asa general Quote