1 / 16
文档名称:

Chapter4 - 认证扫描和代理扫描.pdf

格式:pdf   页数:16页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Chapter4 - 认证扫描和代理扫描.pdf

上传人:bjy0415 2015/9/9 文件大小:0 KB

下载得到文件列表

Chapter4 - 认证扫描和代理扫描.pdf

相关文档

文档介绍

文档介绍:安全审计与安全扫描
计算机学院08级, 2011 春
张锋博士
副教授,硕士生导师
@
计算机学院, 中国地质大学, 武汉
第4章认证扫描和代理扫描
1 认证扫描
2 代理扫描
2
认证扫描概述
认证扫描(即TCP ident扫描)基于认证Ident协议。
认证协议允许看到通过TCP连接的任何进程拥有者的用
户名。
利用认证协议,可以获得运行在某个端口上的进程的用
户名。
认证扫描同时也被称为反向认证扫描(即TCP反向
ident扫描)
最初的RFC建议了一种帮助服务器认证客户端的协议
3
认证扫描概述
认证扫描是一种较为常见的端口扫描技术?
现已有不少端口扫描工具都带有认证扫描这一
项的实现功能。
如Nmap的-I命令?
4
认证扫描概述
“认证协议(identification protocol)”在
RFC 1413里面描述。
实际上每个类UNIX的操作系统都带着一个默
认时侦听113端口的身份服务器。
身份服务器的基本功能是回答类似这样的问题:
“是什么用户从你的端口X初始化出来连接到我
的端口Y上来了?”
5
认证扫描原理
6
if ((identfd=socket(,SOCK_STREAM,0))== -1) {
printf("socket created error\n");
exit(0);
}
//……
for(curport=loport;curport<=hiport;curport++) {
for(i=0;i!=85;i++)
received[i]='\0';
=htons(curport);
if ((sockfd=socket(,SOCK_STREAM,0))== -1)
usage(SOCK_ERR);
if (connect(sockfd,(struct sockaddr *)&forconnect,sizeof(forconnect))==0) {
if (getsockname(sockfd,(struct sockaddr *)&forport,&len)==0) {
if ((identfd=socket(,SOCK_STREAM,0))== -1) {
usage(SOCK_ERR);
7
if (connect(identfd,(struct sockaddr *)&forident,sizeof(forident))==0) {
sprintf(identbuf,“%u,%u”,htons(), htons(
write(identfd,identbuf,strlen(identbuf)+1);
read(identfd,received,80);
received[strlen(received)-1]='\0';
uid=strrchr(received,' ');
service=getservbyport(,"tcp");
printf("Port: %3d\tService: %10s\tUserid: %s\n",curport,
(service==NULL)?"(unknown)":service->s_name,uid);
}
}
}
close(sockfd);
close(identfd);
8
if ((identfd=socket(,SOCK_STREAM,0))== -1)
{
printf("socket created error\n");
exit(0);
}
//……
for(curport=loport;curport<=hiport;curport++)
{
for(i=0;i!=85;i++)
received[i]='\0';
=htons(curport);
if ((sockfd=socket(,SOCK_STREAM,0))== -1)
9
例子
# nmap -sT -p 80 -I -O
Starting nmap V. by Fyodor (fyodor@,
p/)
Interesting ports on ():
Port State Protocol Serv