资源描述
个人收集整理 勿做商业用途
计算机网络安全技术 实验三
2010/4/19第1、2节课上机内容
以下实验在主机里面完成。主机扫描或者监听虚拟机(本实验的工具在ftp://219.222.171。9/资源共享/10-11学年第一学期课件/信息安全概论/第四章 网络扫描与网络监听/的相应案例的压缩包里)。
声明:本实验内容为研究学习之用,若有人根据本实验之技术和工具做出危害社会之事,一切后果由实施破坏者承担。
n 案例名称:案例4-1 系统用户扫描
n 可以使用工具软件:GetNTUser,该工具可以在Winnt4以及Win2000操作系统上使用,主要功能包括:
n (1)扫描出NT主机上存在的用户名。
n (2)自动猜测空密码和与用户名相同的密码。
n (3)可以使用指定密码字典猜测密码。
n (4)可以使用指定字符来穷举猜测密码。
n 对IP为172.18.25。109(这里换成你自己的虚拟机地址)的计算机进行扫描,首先将该计算机添加到扫描列表中,选择菜单File下的菜单项“添加主机”,输入目标计算机的IP地址,如图4—3所示。
n 可以得到对方的用户列表了.点击工具栏上的图标,得到的用户列表如图4-4所示.
利用该工具可以对计算机上用户进行密码破解,首先设置密码字典,设置完密码字典以后,将会用密码字典里的每一个密码对目标用户进行测试,如果用户的密码在密码字典中就可以得到该密码。一个典型的密码字典如图4-5所示。
选择菜单栏工具下的菜单项“设置”,设置密码字典为一个文本文件,如图4-6所示。
利用密码字典中的密码进行系统破解,选择菜单栏工具下的菜单项“字典测试”,程序将按照字典的设置进行逐一的匹配,如图4-7所示。
案例4-2 开放端口扫描
得到对方开放了哪些端口也是扫描的重要一步。使用工具软件PortScan可以到得到对方计算机都开放了哪些端口,主界面如图4-8所示。
n 对172。18.25.109(这里换成你自己的虚拟机地址)的计算机进行端口扫描,在Scan文本框中输入IP地址,点击按钮“START”,开始扫描如图4-9所示。
案例4—3 共享目录扫描
n 通过工具软件Shed来扫描对方主机,得到对方计算机提供了哪些目录共享。工具软件的主界面如图4-10所示。
扫描一个IP地址段
该软件可以扫描一个IP地址段的共享信息,这里只扫描IP为172.18。25.109(这里换成你自己的虚拟机地址)的目录共享情况。在起始IP框和终止IP框中都输入172.18.25。109(这里换成你自己的虚拟机地址),点击按钮“开始”就可以得到对方的共享目录了,如图4—11所示。
2010/4/26第1、2节课上机内容
案例4-4 利用TCP协议实现端口扫描
n 实现端口扫描的程序可以使用TCP协议和UDP协议,原理是利用Socket连接对方的计算机的某端口,试图和该端口建立连接
n 如果建立成功,就说明对方开放了该端口,如果失败了,就说明对方没有开放该端口,具体实现程序proj4_4。cpp所示。
#include 〈stdlib。h>
#include <stdio。h〉
#include <winsock。h>
#include <winbase.h〉
#define BUFSIZE 64
#define WSVERS MAKEWORD(2, 0)
#define WINEPOCH 2208988800
#define MSG "Is this port you open?\n"
#define MAX_PACKET 1024
SOCKET connectsock(const char *host, const char *service,
const char *transport );
void errexit(const char *, ...);
int main(int argc, char *argv[])
{
char *host = "localhost”; /* host to use if none supplied */
char *service = ”5060”; /* default service name */
SOCKET s; /* socket descriptor */
int errcnt = 0; /* error count */
WSADATA wsadata;
switch (argc) {
case 1:
break;
case 3:
service = argv[2];
/* FALL THROUGH */
case 2:
host = argv[1];
break;
default:
fprintf(stderr, "usage: file1。exe [host [port]]\n");
exit(1);
}
if (WSAStartup(WSVERS, &wsadata))
errexit("WSAStartup failed\n”);
s = connectsock(host, service, ”tcp”);;
(void) send(s, MSG, strlen(MSG), 0);
closesocket(s);
WSACleanup();
return 1;
}
#ifndef INADDR_NONE
#define INADDR_NONE 0xffffffff
#endif /* INADDR_NONE */
/*———--——---—————--————--—--—-——-—--—-—-———---—-——-------—--——---————-—-—-
* connectsock - allocate & connect a socket using TCP or UDP
*———————-----——-—---—--—-——--—---—-——--—-——-—-——--—-——-——---—--—---—-—---
*/
SOCKET connectsock(const char *host, const char *service, const char *transport )
{
struct hostent *phe; /* pointer to host information entry */
struct servent *pse; /* pointer to service information entry */
struct protoent *ppe; /* pointer to protocol information entry*/
struct sockaddr_in sin; /* an Internet endpoint address */
int s, type; /* socket descriptor and socket type */
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
/* Map service name to port number */
if ( pse = getservbyname(service, transport) )
sin。sin_port = pse->s_port;
else if ( (sin.sin_port = htons((u_short)atoi(service))) == 0 )
errexit("can’t get \”%s\” service entry\n", service);
/* Map host name to IP address, allowing for dotted decimal */
if ( phe = gethostbyname(host) )
memcpy(&sin。sin_addr, phe—〉h_addr, phe—〉h_length);
else if ( (sin.sin_addr.s_addr = inet_addr(host)) == INADDR_NONE)
errexit(”can't get \"%s\” host entry\n”, host);
/* Map protocol name to protocol number */
if ( (ppe = getprotobyname(transport)) == 0)
errexit("can’t get \"%s\” protocol entry\n”, transport);
/* Use protocol to choose a socket type */
if (strcmp(transport, ”udp") == 0)
type = SOCK_DGRAM;
else
type = SOCK_STREAM;
/* Allocate a socket */
s = socket(PF_INET, type, ppe—〉p_proto);
if (s == INVALID_SOCKET)
errexit(”can't create socket: %d\n”, GetLastError());
/* Connect the socket */
if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) ==
SOCKET_ERROR)
errexit("can’t connect to %s.%s: %d\n”, host, service,
GetLastError());
return s;
}
void errexit(const char *format, 。。.)
{
va_list args;
va_start(args, format);
vfprintf(stderr, format, args);
va_end(args);
WSACleanup();
exit(1);
}
程序运行参数设置(在vc的project—〉settings菜单里的debug—>programs arguments里设置):
第一次运行参数填: 自己虚拟机的IP地址
第二次运行参数填: 自己虚拟机的IP地址 自己虚拟机的端口(如21等)
案例4—5 漏洞扫描
n 使用工具软件X—Scan-v2。3
n
n 该软件的系统要求为:Windows 9x/NT4/2000。该软件采用多线程方式对指定IP地址段((或单机)进行安全漏洞检测,支持插件功能,提供了图形界面和命令行两种操作方式
n
n 扫描内容包括:
n 远程操作系统类型及版本
n 标准端口状态及端口Banner信息
n SNMP信息,CGI漏洞,IIS漏洞,RPC漏洞,SSL漏洞
n SQL—SERVER、FTP—SERVER、SMTP-SERVER、POP3-SERVER
n NT—SERVER弱口令用户,NT服务器NETBIOS信息
n 注册表信息等。
n 扫描结果保存在/log/目录中,index_*.htm为扫描结果索引文件。主界面如图4—14所示。
n 可以利用该软件对系统存在的一些漏洞进行扫描,选择菜单栏设置下的菜单项“扫描参数",扫描参数的设置如图4—15所示.
n 可以看出该软件可以对常用的网络以及系统的漏洞进行全面的扫描,选中几个复选框,点击按钮“确定”.
下面需要确定要扫描主机的IP地址或者IP地址段,选择菜单栏设置下的菜单项“扫描参数”,扫描一台主机,在指定IP范围框中输入:172。18。25.109-172.18.25.109(这里换成机房的IP地址网段),如图4—16所示。
n 设置完毕后,进行漏洞扫描,点击工具栏上的图标“开始",开始对目标主机进行扫描,如图4—17所示。
案例4—6监听工具—Win Sniffer
Win Sniffer专门用来截取局域网内的密码,比如登录FTP,登录Email等的密码。主界面如图4-19所示。
n 只要做简单的设置就可以进行密码抓取了,点击工具栏图标“Adapter”,设置网卡,这里设置为本机的物理网卡就可以,如图4-20所示。
这样就可以抓取密码了,使用DOS命令行连接远程的FTP服务,如图4—21所示。
打开Win Sniffer,看到刚才的会话过程已经被记录下来了,显示了会话的一些基本信息,如图4—22所示.
案例4-7监听工具—pswmonitor
n 监听器pswmonitor用于监听基于WEB的邮箱密码、POP3收信密码和FTP登录密码等等,只需在一台电脑上运行,就可以监听局域网内任意一台电脑登录的用户名和密码,并将密码显示、保存,或发送到用户指定的邮箱,主界面如图4-23所示。
该工具软件功能比较强大,可以监听的一个网段所有的用户名和密码,而且还可以指定发送的邮箱,设置的界面如图4—24所示。
展开阅读全文