如果仔细跟踪SQLServer数据库服务器的登录过程,您会发现密码计算非常脆弱。SQLServer数据库的密码体现在两个方面。
1。网络登陆密码加密算法

2。用于数据库存储的密码加密算法。

以下是以下内容:
1。网络登陆密码加密算法
SQL Server网络加密密码一直很脆弱,网上有很多写出来的表,但是没有具体的算法,实际跟踪SQL Server的登陆过程,很容易得到解密算法:好吧,我们还是演示装配过程:

登录类型的TDS包跳4126a4。
004de72e:一份相应大小的缓冲区是从接收的字段大小为下一步的产生
004de748份登录信息从接收缓冲区偏移8度
004de762:电话sub_54e4d0:按新复制缓冲区的参数检查处理
在TDS包的信息进行处理,反过来,和各个领域的气候应该每个域的长度和偏移量与长度相比0x24。
下面的汇编代码是一个解密网络加密密码的算法:
复制代码代码如下所示:
。正文:0065c880 MOV EDI CL,{ }
。正文:0065c882 MOV DL,Cl
。正文:0065c884异或CL,5
。正文:0065c887异或DL,0afh
。正文:0065c88a SHR DL,4
。正文:0065c88d SHL CL,4
。正文:0065c890或DL,Cl
0065c892 MOV EDI。正文:{ },DL
正文:0065c894公司EDI。
正文:0065c895 DEC eax。
正文:0065c896短loc_65c880 JNZ。
正文:0065c898 JMP loc_4de7e6。

这是很容易成为C代码的变化,我们可以看到加密的和简单的,并没有明确的区别是什么,我们可以嵌入在嗅探此代码对嗅叹TDS登陆包解密,其实0xa5不是特定的SQL Server密码字段分隔符,只是由于加密算法将自动双字节ASC说0xa5 0x0加密,但是如果你让一个双字节的密码,这不是判断的分界的主要原因。
复制代码代码如下所示:
无效sqlpasswd(char * ENP,char * DNP)
{
int i;
无符号字符;
无符号字符;
对于(i = 0;i < 128;i +)
{
如果(ENP {我} = = 0)
打破;
A1 = ENP {我} ^ 5;
A1<4;
A2 = ENP {我} ^ 0xaf;
A2=A2>4;
DNP {我} = A1 | A2;
}
DNP {我} = 0;
DNP {我} = 0 + 1;
Wprintf(Lpasswd文件:%s
}