Cooler_

file walk test

Jun 6th, 2012
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.53 KB | None | 0 0
  1. /*
  2.  
  3. Code simples para listar paths
  4. para serem abertos com Curl
  5.  
  6. para testes de Full Path Disclosure
  7.  
  8. para testar contra erros para ajudar em codereview
  9. mostre local do arquivo do apache
  10.  
  11. exemplo ./code site http://localhost
  12. entao ele ira usar o curl em cada
  13. url relacionada a
  14. http://localhost/site/View...
  15. http://localhost/site/Controller...
  16.  
  17. ira salvar file de log
  18.  
  19.  
  20. gcc -o code code.c -O3
  21.  
  22. $ ./code pasta url
  23. $ cat logWalk.txt
  24.  
  25. by cooler_ code test
  26.  
  27. */
  28. #include <stdlib.h>
  29. #include <stdio.h>
  30. #include <sys/types.h>
  31. #include <string.h>
  32. #include <errno.h>
  33. #include <dirent.h>
  34. #include <limits.h>
  35. #include <unistd.h>
  36.  
  37. #define LOG "logWalk.txt"
  38.  
  39. void *xmalloc(unsigned int len);
  40. char *StrRep(char *st, char *orig, char *repl,int mim);
  41. static void PathWalk(char * dir2find,char *buffer,char * URL,char * path2);
  42.  
  43. int main(int argc, char ** argv)
  44. {
  45.  char *buffer=(char *)xmalloc(2048*sizeof(char));
  46.  char *LocalPath=(char *)xmalloc(512*sizeof(char));
  47.  
  48.  if(strlen(argv[1])>128)
  49.  {
  50.   puts("PATH muito grande");
  51.   return 0;
  52.  }
  53.  
  54.  if(strlen(argv[2])>256)
  55.  {
  56.   puts("URL muito grande");
  57.   return 0;
  58.  }
  59.  
  60.   getcwd(LocalPath, PATH_MAX);
  61.   PathWalk(argv[1],buffer,argv[2],LocalPath);
  62.   puts("Listando files");
  63.   puts(buffer);
  64.  
  65.   free(buffer);
  66.  
  67.  return 0;  
  68. }
  69.  
  70.  
  71. // alinhamento da memória HEAP :-X
  72. void *xmalloc(unsigned int len)
  73. {
  74.  void *ptr;
  75.  
  76.  ptr=malloc(len);
  77.  if(ptr==NULL)
  78.   fprintf(stderr,"fail malloc with size %d",len);
  79.  
  80.  return ptr;
  81. }
  82.  
  83. //string replace
  84. char *StrRep(char *st,char *orig,char *repl,const int mim)
  85. {
  86.  char bufer[mim];
  87.  char *ch;
  88.  
  89.   if(!(ch = strstr(st, orig)))
  90.    return st;
  91.  strncpy(bufer, st, ch-st);  
  92.  bufer[ch-st] = 0;
  93.  sprintf(bufer+(ch-st),"%s%s",repl,ch+strlen(orig));
  94.  
  95.  char *out=bufer;
  96.  
  97.  return out;
  98. }
  99.  
  100. static void PathWalk(char * dir2find,char *buffer,char *URL,char *path2)
  101. {
  102.  DIR *d;
  103.  struct dirent *entry;
  104.  const char *d_name;
  105.  int path_length;
  106.  char path[PATH_MAX];
  107.  char *tmp=(char *)xmalloc(PATH_MAX*sizeof(char));
  108.  char *cmd=(char *)xmalloc(PATH_MAX*3*sizeof(char));
  109.  char *dir_name=(char *)xmalloc(PATH_MAX*sizeof(char));
  110.  
  111.   if( dir2find[0] != '/')
  112.   {
  113.    getcwd(dir_name, PATH_MAX);
  114.    dir_name[strlen(dir_name)] = '/';
  115.   }
  116.   strncat(dir_name,dir2find,PATH_MAX-strlen(dir_name));
  117.   d=opendir(dir_name);
  118.  
  119.     if(!d)
  120.     {
  121.      fprintf(stderr, "Cannot open directory '%s': %s\n", dir_name, strerror (errno));
  122.      exit(EXIT_FAILURE);
  123.     }
  124.  
  125.     while(1)  
  126.     {
  127.      entry=readdir(d);
  128.  
  129.       if(!entry)
  130.        break;
  131.        
  132.       d_name = entry->d_name;
  133.  
  134.       if(entry->d_type & DT_DIR)
  135.       {      
  136.        if(d_name[0]!='.')
  137.        {
  138.  
  139.         path_length = snprintf(path, PATH_MAX, "%s/%s", dir_name, d_name);
  140.  
  141.         if(path_length >= PATH_MAX)
  142.         {
  143.          fprintf (stderr, "Path length has got too long.\n");
  144.          exit (EXIT_FAILURE);
  145.         }
  146.         PathWalk(path,buffer,URL,path2);
  147.        }
  148.       }
  149.       else
  150.       {
  151.        
  152.        sprintf(tmp,"%s%s/%s\n",URL,dir_name,d_name);
  153.        tmp=StrRep(tmp,path2,"",strlen(tmp));
  154.        cmd="./usr/bin/curl ";
  155.        strcat(cmd,tmp);
  156.        strcat(cmd," >> ");
  157.        strcat(cmd,LOG);
  158.        puts(cmd);
  159.        system(cmd);
  160.        strncat(buffer,tmp,PATH_MAX-strlen(buffer));
  161.      
  162.       }
  163.  
  164.     }
  165.      
  166.  
  167.     if(closedir(d))
  168.     {
  169.      fprintf (stderr, "Could not close '%s': %s\n",dir_name, strerror (errno));
  170.      exit (EXIT_FAILURE);
  171.     }
  172.  
  173. // if(tmp)
  174. //  free(tmp);
  175.  if(dir_name)
  176.   free(dir_name);
  177.  if(cmd)
  178.   free(cmd);
  179. }
Advertisement
Add Comment
Please, Sign In to add comment