ASP漏洞及安全建议 (续三)

发表于:2007-06-30来源:作者:点击数: 标签:
下面的代码将介绍如何使用这个密钥来加密和解密一个字符串 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_KeyLoc
下面的代码将介绍如何使用这个密钥来加密和解密一个字符串

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 = keyFile
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数据库,不管数据库路径和数据库是否存在。

 
此外还有其它的漏洞,请网友自己测试。其解决方法请看上面的漏洞分析。
如果用CIS扫描器,还有比较详细的漏洞分析和解决方法。请读者自己分析。
七、总结
  目前WEB数据库访问的多种技术中,比如CGI(通用网关接口)、JDBC、PHP、ASP,ASP以其开发周期短,存取方式数据库简单,运行速度快而成为众多网站程序员的首选开发技术
但是其网络安全性也是不容忽视的。做为一个ASP开发者,你必须关注NT和IIS的安全漏洞,从上面的讨论我们可以看到ASP的很多漏洞都是由IIS所引起的。同时ASP程序员在开发自己的网站时,要注意来自ASP程序设计不当所引发的安全问题。
八、声明
本文中某些例子是从其它网站上整理的,因时间紧迫,未来得及通知作者,请见谅!

小鸟 (songniao@163.net)
傲气雄鹰网络安全新干线(http://www.safefan.com)

作者:小鸟 主页:http://www.aspcool.com 时间:00-6-21 下午 02:15:11

原文转自:http://www.ltesting.net