从itsscan看扫描器的制作原理
文章作者:Ocean2000
注:本文是针对有一定编程基础的新手,ITS_SCAN v1.0是我们为IT安全论坛开发的安全扫描器,它是用perl来完成的。我想对于很多的安全爱好者来说使用扫描器已经习以为常了,但是事实上并不是所有的新手都十分了解它的制作原理。在这里我想通过对ITS_SCAN开发过程的介绍,让喜欢安全的新手朋友们对其制作原理有一个总体上的了解。
安全扫描器是一种自动检测远程或本地主机安全性弱点的程序。通过使用安全扫描器,入侵者和系统管理员能够发现所维护的Web服务器的各种TCP端口的分配、提供的服务、Web服务软件版本和这些服务及软件呈现在Internet上的安全漏洞。入侵者了解这些信息可以充分的利用它从而达到入侵的目的,而系统管理员则可以利用它更好的分析网络,从而在计算机机网络系统安全保卫战中做到“有的放矢”,及时修补漏洞,构筑坚固安全的网络。
然而我想作为一个学习者,我们更想知道的是它的制作原理和过程,在这里如果你对套接字(socket),和tcp/ip协议有一定的了解,那么你一定可以轻松的读懂以下的东西:)。
这里我们以ITS_SCAN v1.0为实例具体的分析一下:ITS_SCAN 暂时支持cgi 漏洞扫描,port 端口扫描,弱密码探测和对微软2000 web 服务器iis5.0的webdav缓冲区溢出漏洞的探测。我们先来看看它的界面(命令行下的)
D:its>its_scan
--------------------------ITS_SCAN v1.0测试版
--------------------------
Thank you for chossing ITS_SCAN
by ocean2000 of itaq.org
choose what you want to d1) Cgi Scan
2) Port Scan
3) Password Crack
4) Webdav Scan
5) Help
6) Exit
Command:
以上是它的主界面,我们先来看看cgi scan。Cgi 扫描主要是针对web服务器软件的漏洞的,有很多网站都不同程度的存在着这方面的漏洞。CGI扫描器原理说起来其实非常简单,可以简单的分为四个步骤:<1>通过socket连接目标WEB SERVER;<2>发送一个特殊的请求,就是我们所说的漏洞;<3>接收目标服务器返回数据,提取其中作为判断的部分;<4>根据返回数据判断目标服务器是否有此CGI漏洞。以下代码是用perl下的,但是通过注解估计大家都能读懂:)
……
print "Checking $host for known exploits.... "; #打印出提示信息正在扫描
open(G,">>report.txt") || die "can’t open report.txt ";
print G "$host cgiscan result: ";
close G; #以上就是打开report.txt写入结果
foreach $key (@cgi) { #从cgi漏洞列表中读出一个我们的漏洞请求,循环,直到读完
my $connection = I:Socket::INET->new(Proto =>’tcp’,
PeerAddr =>$host,
PeerPort =>$port) || die "Sorry! Could not connect to $host ";
#以上就是和对方的服务器在某个端口建立socket连接
print $connection "GET $key HTTP/1.0 "; #向对方发送我们的请求,$key就是请求的内容
my @check = <$connection>; #将对方的返回信息放在数组@chenk中
close $connection; #关闭socket连接
if(@check[0] =~/200 OK/) { #如果返回信息的头一行有“200 OK” 则表示探测成功
print "Exploit Found!: $key ";
$number++; #发现漏洞数加一
if($storelogs eq "yes" or $storelogs eq "y") {
open(GOTCHA, ">>report.txt") or die("Couldn‘t open report.txt for writing. Please make sure the file exists and is writable. ");
print GOTCHA "Exploit Found!: $key ";
close(GOTCHA);} #如果选择了保存,则将结果写入文件
}
}
if($number == 0) { print "No exploitable holes found on host $host "; }
print "成功生成report.txt!:)~ ";
} #计数器为0则没有发现漏洞,进入下一个循环,直到结束也许大家已经看到,perl 语言很简单的就实现了,我们平常用到的cgi scan 功能。事实上我们现在不但知其然,而且知其所以然了。不论是用什么语言,这是个最基本的原理。当然一个好的cgi扫描程序光有这些是不够的。很多细节方面的问题,这些主要看编写者的编程技术和技巧了。
现在我们打开ITS_SCAN v1.0的Port Scan 看看:)
--------------------------------------
please choose what you want to scan
1) single host
2) multiply hosts
3) exit
--------------------------------------
Command:
这里我们可以选择单机扫描和分布式单一端口扫描。那么端口扫描的原理是什么呢,用过nmap的朋友可能知道了,tcp端口扫描的可以分为:开放式的,如通过connect()连接,和半开放式的,如syn 。此外还有udp扫描等 。这里我们简单的通过scoket 连接远程主机某个端口来判断对方是否开放端口,即connect()原理,tcp方式的。下面是原代码:foreach $key(keys %port){ #循环读取要扫描的port
print "正在扫描$host:$key... ";
$sock=I:Socket::INET->new(PeerAddr => $host,
PeerPort => $key,
Proto=>’tcp’); #试图在这个端口建立连接
if($sock){ #判断是否成功连接,成功就继续执行
print "found:$key $port{$key}! ";
open (H,">>report.txt") || die "can’t open the report.txt ";
print H "$host:$key $port{$key} ";
close H;
}
}
print "成功生成report.txt "; #成功保存文件退出
以上我们实现了简单的网络主机端口扫描,但是实际上这样的速度并不是很快,所以通常我们要给它加上多线程模式,这样可以很好的提高我们的扫描速度。因为perl的多线程还不是很稳定,所以这里我就不做这方面的介绍了。
关于弱密码探测是我们很多扫描器都有的功能,从原理上说就是模拟我们的输入方式自动的进行探测。Tcp的 客户/服务 模式通常就是通过scoket 的连接然后做一些事,我们的扫描器就是这样的一个实例,只不过它不是在做一些正常的“交流”罢了~ 。其实当读者看懂上面的内容之后我想,你一定已经想到它的原理了,ITS_SCAN v1.0暂时支持ftp,pop3,ipc$
扫描,这里我来用perl 写的ftp破解代码进行分析。foreach $password (@password) #循环读取密码
{print "正在测试$user .... ";
$ftp = Net::FTP->new($host) || die "can’t not conn! "; #调用Net::FTP模块,建立一个新任务
if ( $ftp ) { #如果连接成功则继续,不成功自动退出
$a=$ftp->login($user,$password); #验证用户名和密码
$ftp->quit;
if ( $a == 1 ) #如果成功则继续,不成功退出
{
print "found!: $host:$user $password " ; #打印结果
}perl 因为支持强大的网络编程,所以关于tcp/ip 协议的很多服务,在perl 里都有相应的模块可以运用,比如ftp,pop3,stmp,telnet等。你所要做的就是了解这些模块的使用就可以很方便的开发出许多让你满意的程序,注意的是ipc$破解调用了windows的net命令,所以只能在nt,2000,xp下使用。以上都是一些简单的例子,深入和优化的程序,不是我们现在要讨论的问题,但是懂得这些基础的东西,就是为了将来的开发打好基础的。
声明一下:ITS_SCAN v1.0 里的webdav的探测,我参考了网络上的一些代码,并将它修改为可以在windows系统下使用的程序。我们来看看它的运用界面:
Command: 4
-----------------------------------------------
SensePost Research
research.com
debuged by ocean2000.org
please enter the host and port ex:127.0.0.1 80
-----------------------------------------------
the host: 202.112.*.*
the port: 80
Testing WebDAV methods [202.112.*.*:80]
202.112.*.* : Server type is Microsoft-IIS/5.0
Method PROPFIND seems to be allowed - WebDAV possibly in use
Method PROPPATCH seems to be allowed - WebDAV possibly in use
Method PROPFIND seems to be allowed - WebDAV possibly in use
Method PROPPATCH seems to be allowed - WebDAV possibly in use
Method MCOL seems to be allowed - WebDAV possibly in use
Method PUT seems to be allowed - WebDAV possibly in use
Method DELETE seems to be allowed - WebDAV possibly in use
Method LOCK seems to be allowed - WebDAV possibly in use
Method UNLOCK seems to be allowed - WebDAV possibly in use
以上就是用它扫描一台主机的结果,从中可以看出程序通过判断,对方的web服务软件的类型和版本号,通过向对方发送某些特殊的方式请求,来实现探测的,要明白以上的过程需要对win2000 iis5.0的webdav缓冲区溢出漏洞有一个大概的了解,你可以通过,网络上的漏洞资料来查看.至于探测的代码,大家可以通过cgi扫描的方式,从提交返回的数据中,判断是否为iis5.0 .?~这里你需要
补充:综合编程 , 安全编程 ,