Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Code simples para listar paths
- para serem abertos com Curl
- para testes de Full Path Disclosure
- para testar contra erros para ajudar em codereview
- mostre local do arquivo do apache
- exemplo ./code site http://localhost
- entao ele ira usar o curl em cada
- url relacionada a
- http://localhost/site/View...
- http://localhost/site/Controller...
- ira salvar file de log
- gcc -o code code.c -O3
- $ ./code pasta url
- $ cat logWalk.txt
- by cooler_ code test
- */
- #include <stdlib.h>
- #include <stdio.h>
- #include <sys/types.h>
- #include <string.h>
- #include <errno.h>
- #include <dirent.h>
- #include <limits.h>
- #include <unistd.h>
- #define LOG "logWalk.txt"
- void *xmalloc(unsigned int len);
- char *StrRep(char *st, char *orig, char *repl,int mim);
- static void PathWalk(char * dir2find,char *buffer,char * URL,char * path2);
- int main(int argc, char ** argv)
- {
- char *buffer=(char *)xmalloc(2048*sizeof(char));
- char *LocalPath=(char *)xmalloc(512*sizeof(char));
- if(strlen(argv[1])>128)
- {
- puts("PATH muito grande");
- return 0;
- }
- if(strlen(argv[2])>256)
- {
- puts("URL muito grande");
- return 0;
- }
- getcwd(LocalPath, PATH_MAX);
- PathWalk(argv[1],buffer,argv[2],LocalPath);
- puts("Listando files");
- puts(buffer);
- free(buffer);
- return 0;
- }
- // alinhamento da memória HEAP :-X
- void *xmalloc(unsigned int len)
- {
- void *ptr;
- ptr=malloc(len);
- if(ptr==NULL)
- fprintf(stderr,"fail malloc with size %d",len);
- return ptr;
- }
- //string replace
- char *StrRep(char *st,char *orig,char *repl,const int mim)
- {
- char bufer[mim];
- char *ch;
- if(!(ch = strstr(st, orig)))
- return st;
- strncpy(bufer, st, ch-st);
- bufer[ch-st] = 0;
- sprintf(bufer+(ch-st),"%s%s",repl,ch+strlen(orig));
- char *out=bufer;
- return out;
- }
- static void PathWalk(char * dir2find,char *buffer,char *URL,char *path2)
- {
- DIR *d;
- struct dirent *entry;
- const char *d_name;
- int path_length;
- char path[PATH_MAX];
- char *tmp=(char *)xmalloc(PATH_MAX*sizeof(char));
- char *cmd=(char *)xmalloc(PATH_MAX*3*sizeof(char));
- char *dir_name=(char *)xmalloc(PATH_MAX*sizeof(char));
- if( dir2find[0] != '/')
- {
- getcwd(dir_name, PATH_MAX);
- dir_name[strlen(dir_name)] = '/';
- }
- strncat(dir_name,dir2find,PATH_MAX-strlen(dir_name));
- d=opendir(dir_name);
- if(!d)
- {
- fprintf(stderr, "Cannot open directory '%s': %s\n", dir_name, strerror (errno));
- exit(EXIT_FAILURE);
- }
- while(1)
- {
- entry=readdir(d);
- if(!entry)
- break;
- d_name = entry->d_name;
- if(entry->d_type & DT_DIR)
- {
- if(d_name[0]!='.')
- {
- path_length = snprintf(path, PATH_MAX, "%s/%s", dir_name, d_name);
- if(path_length >= PATH_MAX)
- {
- fprintf (stderr, "Path length has got too long.\n");
- exit (EXIT_FAILURE);
- }
- PathWalk(path,buffer,URL,path2);
- }
- }
- else
- {
- sprintf(tmp,"%s%s/%s\n",URL,dir_name,d_name);
- tmp=StrRep(tmp,path2,"",strlen(tmp));
- cmd="./usr/bin/curl ";
- strcat(cmd,tmp);
- strcat(cmd," >> ");
- strcat(cmd,LOG);
- puts(cmd);
- system(cmd);
- strncat(buffer,tmp,PATH_MAX-strlen(buffer));
- }
- }
- if(closedir(d))
- {
- fprintf (stderr, "Could not close '%s': %s\n",dir_name, strerror (errno));
- exit (EXIT_FAILURE);
- }
- // if(tmp)
- // free(tmp);
- if(dir_name)
- free(dir_name);
- if(cmd)
- free(cmd);
- }
Advertisement
Add Comment
Please, Sign In to add comment