login signup | whydoineedaccount?
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
/*
        Program dodaje wpis wysylajac zadanie POST do skryptu wordpress;
        Kod i wszystkie blędy,wpadki by Gridlok;
        
        Zakaz rozpowszechniania bez zgody autora na inne strony (po co mam się wiecej wstydu najeść).
*/

#include <iostream>
#include <windows.h>
#include <winsock.h>
#include <fstream>
#include <string>

using namespace std;

//////////////////////////////////////////////////////////////////////
// Osobny watek rozwiazuje problem odbioru wszystkich danych
// a w przypadku ich braku , nie zatrzymuje przebiegu głownego programu.
// Jest to alternatywa dla rozwiazania gniazd nieblokujacych.
//////////////////////////////////////////////////////////////////////
    

DWORD WINAPI OdbiorDanych(PVOID pvParam)
{
        ///////////////////////////////////////////////////////////////////////////  
        char              buffer[4096];
        int               recvv;
        size_t            found,found2;
        string            msg;
  
        fstream plik("cookie.txt",ios::out|ios::in);
        if(plik.good()==false)
        {
            cout<<"[-]Utworzenie/Otworzenie pliku cookie.txt       [FAIL]\n";
            return 0;    
        
        }
        
        SOCKET sockk = (SOCKET)pvParam;
    
        //////////////////////////////////////////////////////////////////////
        // Odbieranie odpowiedzi od serwera i parsowanie jej w poszukiwaniu
        // nazw i wartosci ciasteczka.  
        //////////////////////////////////////////////////////////////////////
    
        while ((recvv = recv(sockk,buffer,4096,0)) != 0)
	    {
                 buffer[recvv] = 0;
                 msg = buffer;
                 cout<<buffer;
                 while(found=msg.find("Set-Cookie: ",found+13))
    	         {
                        if (found!=string::npos)
                        {
                                found2=msg.find_first_of(";",found);
            
                                for (found+=12;found != found2;found++)
                                {
                                        plik<<msg[found];
                                        
                                }
                   
                                 plik<<";"<<" ";
                                 plik.flush();
                       }
                        else
                            break;
                }
                
        }     
        
        plik.close();
   
  
  

   return 0;
}

int main(int argc, char *argv[])
{
    
    ////////////////////////////////////////////////////////////////////////////
    int             blad;
    int             sendd;
    
    
    //////////////////////////////////////////////////////////////////////
    // Jest to proste zapytanie post odpowiadajace za logowanie.
    // Wzorowalem sie na zadaniu jakie wysyla biblioteka cURL. 
    //////////////////////////////////////////////////////////////////////
    
    string           POST = "POST /wordpress/wp-login.php HTTP/1.1\r\n"
                            "Host: gridlok.boo.pl\r\n"
                            "Accept: */*\r\n"
                            "Content-Length: 113\r\n"//dlugosc koncowej lini , czyli wlasciwej tresci pakietu
                            "Content-Type: application/x-www-form-urlencoded\r\n\r\n"
                            "log=admin&pwd=haslo&wp-submit=Zaloguj+się?&redirect_to=http://gridlok.boo.pl/wordpress/wp-admin/&testcookie=1\r\n\r\n";
    
    string          cookie;
    fstream         plik;
    struct          sockaddr_in sin;
    struct          hostent *host;
    
    char            serwer[] = "gridlok.boo.pl";
    SOCKET          sock, connected;    
    
    HANDLE          hReadData;
    DWORD           ReadDataId;
 
    WORD            wersja;
                    wersja = MAKEWORD( 2, 0 );
    WSADATA         wsaData; 
    blad            = WSAStartup(wersja, &wsaData );                                                         
    ////////////////////////////////////////////////////////////////////////////
    
    if ( blad != 0 )
    {
         WSACleanup();
    }

    if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 0 )
    {
         cout<<"[-]Nie wykryto wersji Winsock 2.0   [FAIL]";
         WSACleanup();
    } 
 
    sock =  socket( AF_INET, SOCK_STREAM, 0 );
    
    if (sock == -1)
            cout<<"[-]Socket                        [FAIL]\n";
    
    
    //////////////////////Wypelnianie struktury sockaddr_in////////////////////                                                   //
    memset( &sin, 0, sizeof(sin) );                    
    sin.sin_family = AF_INET;                           
    sin.sin_addr.s_addr = inet_addr(serwer);   
    sin.sin_port = htons(80);
    
    if(sin.sin_addr.s_addr == INADDR_NONE)     
    {
       host = NULL;
       host = gethostbyname(serwer);   
       if(host == NULL)
       {
          cout<<"[-]Nie moge znalesc hosta       [FAIL]\n";
          system("PAUSE");
          exit(1);
       }
       memcpy(&sin.sin_addr, host->h_addr_list[0], host->h_length);

    }
 
    connected = connect(sock,(SOCKADDR*)&sin,sizeof(sin)); 
    if (connected == -1)
       cout<<"[-]Connect                       [FAIL]\n";
    
    
    sendd = send(sock,POST.c_str(),strlen(POST.c_str()),0);
    if (sendd == -1)
        cout<<"[-]Logowanie nie powiodlo sie             [FAIL]\n";
    
    
    Sleep(2000);
    
    hReadData = CreateThread(NULL, 0, OdbiorDanych, (PVOID)sock, 0, &ReadDataId);
    Sleep(1000);
    closesocket(sock);
    
    
    //////////////////////////////////////////////////////////////////////
    //  Ta sekcja kodu odpowiada za wczytanie do zmiennej cookie pierwszego
    //  wiersza pliku , gdzie zostala zapisana tresc ciasteczka
    //////////////////////////////////////////////////////////////////////
    
    plik.open("cookie.txt",ios::in|ios::out);
    if(plik.good())
    {
        
        while(!plik.eof())
        {
            getline(plik,cookie);
            
        }

        plik.close();
    }
    
    //////////////////////////////////////////////////////////////////////
    //  Zadanie POST odpowiadajace za dodanie wpisu
    //////////////////////////////////////////////////////////////////////
    string           POST2 = "POST /wordpress/wp-admin/post.php HTTP/1.1\r\n"
                            "Host: gridlok.boo.pl\r\n"//tu nalezy wpisac swoj host 
                            "Accept: */*\r\nCookie: ";
                            POST2+=cookie+
                            "\r\nContent-Length: 175\r\n"//dlugosc koncowej lini , czyli wlasciwej tresci pakietu
                            "Content-Type: application/x-www-form-urlencoded\r\n\r\n"
                            "post_title=TytulWpisu&content=TrescWpisu&tags_input=TagiWpisu&action=post-quickpress-publish&quickpress_post_ID=0&_wpnonce=91e03139d1&_wp_http_referer=/wordpress/wp-admin/\r\n\r\n";//przypisanie zmiennym odpowiedniej wartosci
  
    //////////////////////////////////////////////////////////////////////
    //  Tworzenie nowego socketa by zainicjowac nowe polaczenie i wyslac POST2
    //////////////////////////////////////////////////////////////////////
    sock =  socket( AF_INET, SOCK_STREAM, 0 );
    
    if (sock == -1)
        cout<<"[-]socket                        [FAIL]\n";
    
    connected = connect(sock,(SOCKADDR*)&sin,sizeof(sin)); 
    if (connected == -1)
       cout<<"[-]connect\n";
    
    sendd = send(sock,POST2.c_str(),strlen(POST2.c_str()),0);
    if (sendd == -1)
       cout<<"[-]Dodawanie wpisu nie powiodlo sie             [FAIL]\n";
    else
       cout<<"[+]Dodano poprawnie wpis                        [OK]\n";
    
    
    
    Sleep(4000);
    hReadData = CreateThread(NULL, 0, OdbiorDanych, (PVOID)sock, 0, &ReadDataId);
    Sleep(100);
    

    system("Pause");
    CloseHandle(hReadData);
    closesocket(sock);
    
    
    
    return 0;
}
back to top ↑

Did you know, that…?

wklej.org it's a NoPaste site, which allows you to paste here any text, or source code, which will be available under special URL. Thanks to this, you can make forums or IRC channels more readable