Пишу брутфорс на С++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by n4e/\@, 9 Nov 2008.

  1. n4e/\@

    n4e/\@ Elder - Старейшина

    Joined:
    6 May 2008
    Messages:
    138
    Likes Received:
    17
    Reputations:
    0
    Хочу разобраться как вообще писать брутфорс.
    Выбрал цель Simple TDS, там надо подставлять все го лишь один параметр - пароль.
    Для примера возьмем сайт http://gtteam.ru/tds/index.php
    (сам тестирую на локалхосте)
    Предположим что на этом сайте стоит пароль 123456
    Запрос-ответ при правильном пароле
    Code:
    http://gtteam.ru/tds/index.php
    
    POST tds/index.php HTTP/1.1
    Host: gtteam.ru
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: ru,en-us;q=0.7,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    Referer: http://gtteam.ru/tds/index.php
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 11
    pass=123456
    
    HTTP/1.x 200 OK
    Date: Sun, 09 Nov 2008 00:14:21 GMT
    Server: Apache/1.3.39 (Unix) PHP/5.2.5 mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwlimited/1.4 FrontPage/5.0.2.2635.SR1.2 mod_ssl/2.8.30 OpenSSL/0.9.8b
    X-Powered-By: PHP/5.2.5
    Set-Cookie: pwd=e10adc3949ba59abbe56e057f20f883e
    Connection: close
    Transfer-Encoding: chunked
    Content-Type: text/html
    
    Ответ при неправленом запросе:
    Code:
    HTTP/1.x 200 OK
    Date: Sun, 09 Nov 2008 00:20:41 GMT
    Server: Apache/1.3.39 (Unix) PHP/5.2.5 mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwlimited/1.4 FrontPage/5.0.2.2635.SR1.2 mod_ssl/2.8.30 OpenSSL/0.9.8b
    X-Powered-By: PHP/5.2.5
    Connection: close
    Transfer-Encoding: chunked
    Content-Type: text/html
    
    т.е все тоже самое только при ответе не выдаются куки.

    Понятно что брут мне не кто не напишет, да и мне самому уже интересно понять как со всем этим работать.
    Вот то что есть:

    Code:
    #include <stdafx.h>
    
    #include <windows.h>
    #include <wininet.h>
    #pragma comment(lib,"wininet")
    
    #include <stdlib.h>
    #include <fstream> //Для чтения будующих паролей из файла
    using namespace std;
    #include <iostream>
    #include <conio.h>
    
    int main()
    {
    
    	   static TCHAR hdrs[] =
          _T("Content-Type: application/x-www-form-urlencoded");
    	   static TCHAR accept[] =
          _T("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
    
    	// инициализируем WinInet
    	HINTERNET hInternet =
    		::InternetOpen(
    		TEXT("Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3"), //Имя
    		INTERNET_OPEN_TYPE_PRECONFIG,
    		NULL,NULL,
    		0);
    
    	HINTERNET hConnect = ::InternetConnect(
    		hInternet,
    		TEXT("gtteam.ru"), //Сервер к которому подключаемся
    		INTERNET_DEFAULT_HTTP_PORT,
    		NULL,NULL,
    		INTERNET_SERVICE_HTTP,
    		0,
    		1u);
    
    	HINTERNET hRequest = 
    		::HttpOpenRequest(
    		hConnect,
    		L"POST", //Метод
    		L"tds/index.php", //Страница где вводим пароль
    		L"HTTP/1.1",
    		NULL,
    		0,
    		INTERNET_FLAG_KEEP_CONNECTION,
    		1);
    
    	BOOL bSend = ::HttpSendRequest(hRequest, NULL, 0, "pass=123456", 11); //Длина контента 11 (pass=123456)
    
    	_getch();
    
    	return 0;
    }
    
    
    С кодом пока что эксеперементирую поэтому такой кривой.
    Раньше еще было то что он выводил мне исходный код страницы, но я убрал т.к он вроде не нужен.
    Но вот что я должен делать дальше? А самое главное как? Я так понимаю что надо как то вытащить ответ который выдает сервер, какой функцией? Есть предположение что HttpQueryInfo
    Еще я очень сомневаюсь что код верный, но то что на сервере считаются зоходы это 100%, и даже вроде длину контента и пароль отсылает.
     
  2. LEE_ROY

    LEE_ROY Elder - Старейшина

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    зачем вининет? )

    ...google...#include "WINSOCK2.H"...send...recv...
    ога?:)



    p.s Вот тебе ахренительно подробный ман по работе с сокетами - hxxp://www.tenouk.com/cnwinsock2tutorials.html , зачитаешся .. ;)
     
    #2 LEE_ROY, 9 Nov 2008
    Last edited: 9 Nov 2008
    1 person likes this.
  3. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    perl+lwp и это будет 20 строчек кода
     
  4. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    Это типо к чему ты написал?
    Тогда на Дельфе использование компонента TidHTTP и это ваще около 5 строчек кода.
    ппц..
    ----------

    LEE_ROY, а почему сокеты????
    WinInet тоже не плохо:)
     
  5. n4e/\@

    n4e/\@ Elder - Старейшина

    Joined:
    6 May 2008
    Messages:
    138
    Likes Received:
    17
    Reputations:
    0
    НУ то что я занимаюсь мозго*бством я понимаю. Но все равно раз взялся, то надо написать.
    Вот пример на сокетах http://pastebin.com/md930734 но там я тоже не могу выдернуть ответ на запрос+если судить по логам сервера то не какого запроса не приходит
     
  6. n4e/\@

    n4e/\@ Elder - Старейшина

    Joined:
    6 May 2008
    Messages:
    138
    Likes Received:
    17
    Reputations:
    0
    Code:
    #include <stdafx.h>
    #include <winsock2.h>
    #include <windows.h>
    #include <iostream>
    #include <sstream>
    
    
    using namespace std;
    
    
    #define PORT 80
    #define SERVERADDR "127.0.0.1"
    
    int main()
    {
    	setlocale(LC_ALL,"RUS");
    	char buff [ 1024 ] = "" ;
    	cout << ("TCP Client\n");
    	/*******************Проверка инициализации***************/
    	if ( WSAStartup ( 0x202, ( WSADATA * ) &buff [ 0 ] ) )
    	{
    		cout << "WSAStart error \n " << WSAGetLastError ( ) ;
    		return -1;
    	}
    	/********************************************************/
    
    	SOCKET my_sock ;
    	/*******************Создаем сокет************************/
    	my_sock = socket ( AF_INET, SOCK_STREAM, 0 );
    	if  ( my_sock < 0 )        //
    	{
    		cout << "Socket ( ) error\n" << WSAGetLastError ( ) ;
    		return  -1;
    	}
    	/********************************************************/
    
    	sockaddr_in  dest_addr ;
    	dest_addr.sin_family=AF_INET; //инет коннектинг
    	dest_addr.sin_port=htons ( PORT ); //порт
    	HOSTENT    *hst;  // хост
    	if    ( inet_addr ( SERVERADDR ) !=INADDR_NONE )    
    		dest_addr.sin_addr.s_addr = inet_addr(SERVERADDR);
    	else
    		if   ( hst=gethostbyname ( SERVERADDR ) )    ( ( unsigned long   * ) &dest_addr.sin_addr ) [ 0 ] =
    			( ( unsigned long    ** ) hst->h_addr_list ) [ 0 ] [ 0 ] ;
    
    		else
    		{
    			printf ( "invalid address   %s \n ", SERVERADDR ) ;
    			closesocket ( my_sock ) ;
    			WSACleanup ( ) ;
    			return  -1;
    		}
    
    		 if  (connect ( my_sock, ( sockaddr  * ) &dest_addr, sizeof ( dest_addr ) ) )
                {
                                cout << " Connect error \n" << WSAGetLastError ( ) ;
                                return -1;
                }
    
                cout << "Соединение с " << SERVERADDR << " успешно установлено \n";
    
    
    
    
     int nsize;
     stringstream clientRequest;
     clientRequest << "GET / HTTP/1.1\r\n"
                     "Host: 127.0.0.1\r\n"
    "User-Agent: MOBILKA\r\n"
    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
    "Accept-Language: ru,en-us;q=0.7,en;q=0.3\r\n"
    "Accept-Encoding: gzip,deflate\r\n"
    "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n"
    "Keep-Alive: 300\r\n"
    "Connection: keep-alive\r\n";
     char clientRequest2[1000]; 
     //int mlen;
     //mlen = strlen(clientRequest); 
    
     
     
     send(my_sock, clientRequest.str().data(), clientRequest.str().size(),0);
     
     //send(my_sock, (char *) clientRequest, mlen, MSG_DONTROUTE);
    
     const int s_ciBufLen=1024;
     char cBuff[513];
     string page;
     //int i=0;
     while (recv (my_sock, (char *) &cBuff, 512 , 0)> 0)
     {
    	 page+=cBuff;
    	 //i++;
    
     }
     //recv(my_sock, (
    
     cout << i;
    
                  closesocket ( my_sock ) ;
                  WSACleanup ( ) ;
    
    			  
                  return 0;
    }
    Почему на сервере не считается заход? Я по разному пробовал делать запрос\ответ. Результат прога либо стопорица на посылки-получение данных(ошибок нет, просто стоит на одном месте) либо возвращает пустую строку. Я так понимаю что либо ответ до сервера не доходит, либо он вобще к серверу не подключается.
    Юзер агент такой что бы не путаться в логах сервера, пробовал писать нормальный юзер агент на результат это не влияет
    *************
    Разобрался. ошибка была в неправельной посылки заголовков
     
    #6 n4e/\@, 10 Nov 2008
    Last edited: 11 Nov 2008