破解MSSQL中的HASH密码
2009-05-07 16:51:50 来源:WEB开发网上文中我们获取的hash中,补充key 4C61CD2D 就是这个信息的一部分。
这个key 4C61CD2D 由以下阐述的方法生成。
time()C 函数被调用作为一个种子传递给srand()函数。一旦srand()函数被作为rand()函数的种子并且被调用生成伪随机key,srand()就会设置了一个起点产生一系列的(伪)随机key.然后sql服务器会将这个key截断取一部分,放置在内存里面。我们叫它key1.这个过程将会再运行一次并生成另一个key我们叫他key2.两个key连在一起就生成了我们用来加密密码的补充key.
密码的散列法
用户的密码会被转换成UNICODE形式。补充key会添加到他们后面。例如以下所示:{'A','L','L','Y','E','S','N','O',0x4C,0x61,0xCD,0x2D}
以上的字符串将会被sql服务器使用pwdencrypt()函数进行加密(这个函数位于advapi32.dll)。生成两个hash
0x0100(固定)
4C61CD2D(补充key)
D04D67BD065181E1E8644ACBE3551296771E4C91(原型hash)
D04D67BD065181E1E8644ACBE3551296771E4C91(大写hash)
验证过程
用户登录SQL服务器的验证过程是这样子的:当用户登陆的时候,SQL服务器在数据库中调用上面例子中的补充key4C61CD2D,将其附加在字符串“ALLYESNO”的后面,然后使用pwdencrypt()函数进行加密。然后把生成的hash跟数据库内的hash进行对比,以此来验证用户输入的密码是否正确。
SQL服务器密码破解
我们可以使用同样的方式去破解SQL的密码。当然我们会首先选择使用大写字母和符号做为字典进行破解,这比猜测小写字母要来得容易。
更多精彩
赞助商链接