当前位置:
首页 > 杂文分享 > 黑客教材系列——BBS的无敌杀手

黑客教材系列——BBS的无敌杀手

请先发誓,然后再看!!!嘿嘿!!不要乱来!!!         

大家想一下,如果把这个expliot放在一台Server上,在向一个BBS论坛上发垃圾帖子,几秒中一个论坛就会被上百个垃圾帖子贴满.用户也无法浏览了...下面这段代码有点象,但需要改.我可不干,实在...实在...太.那个了
【 原文由 音樂狂迷 所发表 】
/* 这是一个向bbs自动发文章的程序,它可以把硬盘上的一篇文章发到bbs server的 */
/* 某个版中,适合于网络速度慢的情况下发表文章,减少等待时间 */
/* 只是本程序依赖于具体的上站按键序列,自然要因bbs server的不同和你在 */
/* bbs server上的ID的不同而加以修改 */
/* 另外下面的字符 ^W的输入方法如下: 左手按住Ctrl键不放,右手先按V,再按W */
/* ^P的输入方法相同. 为了不影响我发这篇文章,我把它们都改成了两个字符,即 */
/* ^W改为^和W,^P改为^和P,编译之前需要改回来 */
/* 不要把本程序用来干坏事,那不是本人所希望看到的 */
/* 作者: 音樂狂迷 2005.7.14 */
/* 本程序适用于UNIX系统,编译方法为: */
/* Linux: cc -lbsd -o post post.c */
/* SunOS: cc -lsocket -lnsl -lucb -o post post.c */

#include
#include
#include
#include
#include
#include
#include
#include
#include

#define N 26
#define M 5
#define BOARD 19
#define TITLE 23
#define SIZE 1024
#define TRUE -1
#define FALSE 0
#define NUM_OF_BOARD 105

char *boardName[NUM_OF_BOARD]={
"211", /* 1 */
"Campus", /* 2 */
"Education", /* 3 */
"Endusers", /* 4 */
"Schools", /* 5 */
"Student", /* 6 */
"Tsinghua", /* 7 */
"UESTC", /* 8 */
"Office12", /* 9 */
"Office11", /* 10 */
"Office13", /* 11 */
"Office9", /* 12 */
"Office5", /* 13 */
"Office6", /* 14 */
"Office4", /* 15 */
"Office2", /* 16 */
"Office15", /* 17 */
"Office10", /* 18 */
"Office1", /* 19 */
"Office17", /* 20 */
"Office16", /* 21 */
"Office8", /* 22 */
"Office3", /* 23 */
"Office14", /* 24 */
"AR", /* 25 */
"Chemistry", /* 26 */
"CS", /* 27 */
"EE", /* 28 */
"Graduate", /* 29 */
"Material", /* 30 */
"MBA", /* 31 */
"Office7", /* 32 */
"PPCenter", /* 33 */
"Transportation", /* 34 */
"3com", /* 35 */
"AIX", /* 36 */
"IBMNetwork", /* 37 */
"IntelNetwork", /* 38 */
"Modem", /* 39 */
"Netscape", /* 40 */
"Oracle", /* 41 */
"Router", /* 42 */
"Solaris", /* 43 */
"Sybase", /* 44 */
"Telecom", /* 45 */
"3D", /* 46 */
"Browser", /* 47 */
"CAD", /* 48 */
"Database", /* 49 */
"Freeware", /* 50 */
"Game", /* 51 */
"Hacker", /* 52 */
"Hardware", /* 53 */
"iNet", /* 54 */
"JAVA", /* 55 */
"MultiMedia", /* 56 */
"NetSoftware", /* 57 */
"NetTech", /* 58 */
"NT", /* 59 */
"OS2", /* 60 */
"Programming", /* 61 */
"Unix", /* 62 */
"Virus", /* 63 */
"Visual", /* 64 */
"Windows", /* 65 */
"Astrology", /* 66 */
"Automobile", /* 67 */
"Chess", /* 68 */
"Connoisseur", /* 69 */
"Economy", /* 70 */
"Feelings", /* 71 */
"Film", /* 72 */
"Friend", /* 73 */
"Gathering", /* 74 */
"IQ_park", /* 75 */
"Joke", /* 76 */
"Life", /* 77 */
"Memory", /* 78 */
"Military", /* 79 */
"Photography", /* 80 */
"Tour", /* 81 */
"Digest", /* 82 */
"Emprise", /* 83 */
"Literature", /* 84 */
"Music", /* 85 */
"Poetry", /* 86 */
"Reading", /* 87 */
"Story", /* 88 */
"Badminton", /* 89 */
"Basketball", /* 90 */
"Football", /* 91 */
"Health", /* 92 */
"Ping-pong", /* 93 */
"Sports", /* 94 */
"Tennis", /* 95 */
"Progwork", /* 96 */
"TipWorld", /* 97 */
"English", /* 98 */
"Mathematics", /* 99 */
"Phylosophy", /* 100 */
"Physics", /* 101 */
"Advice", /* 102 */
"Help", /* 103 */
"sysop", /* 104 */
"Test" /* 105 */
};

/* 下面的字符串就是你自己上bbs站时的按键序列,需要修改以符合自己的情况 */
/* 左边的一列是server传过来的,右边的一列是需要自己从键盘输入的 */
char command1[ N ][80]={
"login:", "bbsr", /* 以bbs登录 */
"):", "yourIDr", /* 自己的bbs ID */
":", "passWordr", /* 密码 */
"", "r", /* server要你按回车键*/
" ..", "r", /*按任何键继续.. */
" ..", "r", /*按任何键继续.. */
" ..", "r", /*按任何键继续.. */
"G)oodBye", "er", /*主菜单下按e键 */
"E)xit", "br", /*分类讨论区菜单下按b*/
"[h]", ",", /* 版名 */
"[h]", "^P", /* 按^P发文章 */
"]", " ", /* 文章题目 */
"T", "r" /*确定 */
};
/* 下面的字符是文章输入完之后的情况 */
/* 左边的一列是需要自己从键盘输入的,右边的一列是server传过来的 */
char command2[ M ][20]={
"^W", "]:", /*文章输完后按Ctrl-W存盘*/
"sr", "[h]", /*按s转信 */
"!r" /*旋风离站 */
};
int sockfd=-1; /*管套描述符 */
void waitString(char *string); /*等待一个特定字符串 */

unsigned char receiveChar(void) //从socket读取server发来的一个字节
{ char tmp;
if(read(sockfd,& tmp,1)<=0 ) { printf("read socket error."); exit(-1);}
return tmp;
}

void sendChar(char ch) //从socket向server发送一个字节
{
if( write(sockfd,& ch,1)<0 ) { printf("write socket error."); exit(-1); }
}

void sendString(char p[]) //从socket向server发送一个字符串
{
if(write(sockfd,p,strlen(p))<0) { printf("write socket error."); exit(-1); };
}

void killHandle(void) //信号处理函数
{
close(sockfd);
exit(0);
}
/*===========================================================================*/
main(int argc,char **argv)
{
struct sockaddr_in host;
struct hostent *hp;
int commandCounter;
int status;
int f,k;
char fileBuf[SIZE];

if( argc<4) { printf("Usage: %s fileName boardName title",argv[0]);
exit(0);
}

f=open(argv[1],O_RDONLY); /*打开本地磁盘文件 */
if( f< 0) { printf("open file error"); exit(-1); }

for(k=0; k< NUM_OF_BOARD; k++)
{
if( strcmp(argv[2],boardName[k])==0)
{ sprintf(& (command1[BOARD][0]),"%drr",k+1);
break;
}
}
if(k>=NUM_OF_BOARD) { printf("Bad boardName: %s",argv[2]);
exit(0);
}

strcpy(& (command1[TITLE][0]),argv[3]);
strcat(& (command1[TITLE][0]),"r");

signal(SIGTERM,killHandle); /* 设回调函数 */
signal(SIGINT,killHandle);

hp = gethostbyname("bbs.gznet.edu.cn"); /* bbs服务器的名字 */
if(hp==NULL) { printf("Unkonwn host"); exit(-1); }
bzero((char *)& host,sizeof(host));
bcopy(hp->h_addr,(char *)& host.sin_addr,hp->h_length);
host.sin_family=AF_INET;
host.sin_port=htons(23); /*telnet标准端口 */
if ( (sockfd=socket(AF_INET,SOCK_STREAM,0))<0 ) /* 阻塞式socket */
{ printf(" Error open socket");
exit(-1);
}
status=connect(sockfd,(struct sockaddr *)& host,sizeof(host));/*连接*/
if(status<0) { printf("Connect error"); exit(-1); }

for(commandCounter=0; commandCounter< N; ) /*登录进bbs站 */
{ waitString( command1[commandCounter ++] );
sendString( command1[commandCounter ++] );
}

while( (status=read(f,fileBuf,SIZE) )>0 ) /*把文件内容发往bbs */
{ for(k=0; k< status; k++)
{ write(sockfd,&(fileBuf[k]),1);
if( fileBuf[k]==0x0A ) write(sockfd,"

分享生活点滴,内容问题可与我联系。 斜杆青年:资深产品经理/网站工程师/科技爱好者/新媒体运营/自媒体写作人