探索黑客技术攻防,实战研究与安全创新

导航菜单

看我来破解MSSQL Hash

在网站渗透测试和内网渗透测试中,破解MSSQL的密码Hash值,尤其是sa用户的密码Hash值是非常有用的,因为破解成功的话我们就会得到一个明文密码,而这个密码在提权和连一步的渗透测试中都是非常有用的,本文我就把破解MSSQL Hash的方法和大家分享一下。

在破解MSSQL Hash前我们先来了解一下MSSQL是如何存储密码的,通过在网上查询相关资料知道了MSSQL是使用了一个没有公开的函数pwdencryptO对用户密码进行加密后产生的一个Hash,密码的Hash在MSSQL2000中是存储在mater数据库的sysxlogins表中;而在MSSQL中,密码Hash是存储在sys数据库的sql_logins表中的。

MSSQL Hash到底是什么样子的呢?我电脑上安装了Microoft SQL Server,大家来看看sa用户的Hash是什么样的。使用sa用户登录进入查询分析器,执行以下sql命令select,password from rmster.dbo.sysxlogins where name='sa',显示的Hash为“0x0100A943A918BD94A1530E1231F714F32C7A58752F3DF20D670BD94A1530E1231F714FD32C7A18752F3DF20D670。

Hash值比较长,共有94位,Hash可以分为4段,前6位为常量部分,这里为0x0100,接着的8位是Salt部分,这里为A943A918,再接下来的40位是大写字母密文,这里为BD94AI530E231F714FD32C7A58752F3DF20D670,最后40位是混合密文,这里为BD94A1530E123IF714FD32C7A58752F3DF20D670。

QQ截图20170224135726.png

尽管加密函数pwdencryptO的细节并没有公开,但却并不妨碍我们看到一些有趣的现象。我们在查询分析器巾执行以下sql命令selact pwdrypt('hackiles');,得到了字符串hackerxfiles经过pwdencryptO函数加密后的Hash,为“0x01006A48A807ACB8ECD81645C6E8F2CAB0015602CED38A29FAC64A4584A3EEA93IC9638837345BOOEOB802C94A7C”。

再次执行sql命令saect pencypt('hacerxfiles'),这次得到的Hash却为“0x0100D54BE478020C026DB10A4C00CFC898BC3D27DD62A4E2361CFA20665561C0EA3D1F0E33918C9DE89EB8965647”,很明显和上次生成的Hash不一样了。再多执行几次selectpencrypt('hakarfiles');命令,发现得到的Hash都各不相同。这也就是说,同一个密码明文经pwdencryptO函数加密后得到的Hash并不是一个,而是有很多。

那么到底是什么使两次Hash的结果不一样呢?有人大胆的推测说是时间在这里面起到了关键的作用,它是创建密码Hashes和存储Hashes的重要因素。之所以使用这样的方式,是因为当两个人输入了同样的密码时,可以以此产生不同的密码Hashes用来掩饰他们的密码是相同的。

接着我们再来看pwdencryptO函数的一些有趣的现象,执行sql命令selct pdencrpt('123456');,得到123456经过加密后的Hash,为“0x010057548760929EA9892D53BDFBA6E2511A323E462C2645E037929EA2892D53BDFBA6E2511A323E462C2645E037”。大家有没有发现这个Hash比较有趣?如果一时没有看出来,那我就把这个Hash按照它的4个段来分开表示。



我们可以看到Hash的混合密文部分和大写字母密文部分相同,难道这是巧合吗?再次执行sql语句slect pwencrypt('123456');,这次得到的Hash为“0x0100836CDD4a7C2C661BAB791B39F2599CEDC7093E730BD347F57C2C661BAB791839F2599CEDC7093E730BD347F5”,再次把这个Hash按照它的4个段来分开表示。

仍然是Hash的混合密文部分和大写字母密文部分相同,经过多次的测试,凡是明文密码全是数字的,经过pwdencryptO函数加密后得到的Hash的混合密文部分和大写字母密文部分都相同。

我们继续执行sql命令select pwdencrypt('HACKERXFILES');,得到的Hash为“0x0100CD74F36DFA833C4872EBEE49285C7336CE04FFBB3F4655FEFA833C4872EBEE49285C7336CE04FFBB3F4655FE”,其Hash的混合密文部分和大写字母密文部分相同。经过多次测试,发现凡是明文密码全是大写字母的,经过pwdencryptO函数加密后得到的Hash的混合密文部分和大写字母密文部分相同。

再来执行sql命令selct pwdencrypq'ABC123');,得到的Hash为“0x01006678FE2D2811CF6FDB7968968BDCF49AC85CF896258C86A72B11CF6FDB7968968BDCF49AC85CF896258C86A7”,其Hash的混合密文部分和大写字母密文部分还是相同。

综合上面的测试所得出的结果,我们可以得出一个结论:由纯数字、纯大写字母、数字和大写字母组成的明文密码在经过pwdencryptO函数加密后得到的Hash的混合密文部分和大写字母密文部分相同。可能有的朋友会说,得到这个结论有用吗?当然有用了,比如我们得到一个Hash其混合密文部分和大写字母密文部分相同,在破解时就可以排除密码明文中含有小写字母的可能,这样在破解时可以先假设密码由纯数字组成,如果破解不出来再假设密码由纯大写字母组成,还破解不出来就假设密码由数字和大写字母混合组成,这样破解会提高破解的效率。

在实际的入侵测试或渗透测试中,得到sa用户Hash值的一个重要途径就是通过注入漏洞,如果注入点的权限允许,就可以通过在注入点上执行seect pssod frm master.dbo.sysxlogins whre name='sa'来得到sa用户密码的Hash(Microsott SQL Server的情况下)。

下面我就使用自己电脑上的Microsoft SQL Server中sa用户的Hash值“0x0100A943A918BD94A1530E1231F714FD32C7Asa752F3DF20D670BD94A1530E1231F714FD32C7A58752F3DF20D670”为例来演示一下破解MSSQL Hash的一种方法。为了方便下文的使用,我把Hash分为4个部分。

破解MSSQL Hash我使用的工具是Cain,Cain在使用前需要安装,安装过程在此略过。安装完成后双击运行桌面上的Cain快捷菜单。

点击“Cracker”菜单,来到破解密码的地方,在左面的选项中选择“MSSQL Hashs”,在右面的空白处点右键,选择“Add to list”来添加—条待破解的Hash。

然后就会弹出来“Add MSQL Hahs”(添加MSQL Hashs)窗口,默认选择的是“Insert the hash mnually”,“Salt”就不用我解释了吧,“UpprcaseHash”是大写字母密文的意思,“Mixcse Hash”是混合密文的意思。把要破解Hash对应的部分都填上,点击“OK”按钮后就添加好了一条待破解的Hash。

在添加好的待破解的Hash上点右键,就会出现菜单,第一项“Dictionary Attack”是字典攻击的意思,也就是使用字典文件来破解Hash,后面还有“UPPERCASE Hashs”和“MixCASE Hashs”两个下级菜单,分别表示用字典破解大写字母密文和用字典破解混合密文;第二项“Brute-Frce Attack”是暴力破解的意思,它下面也有“UPPERCASE Hashs”和“MixCASE Hashs”两个下级菜单。

选择“Dictionary Attack”下的“Uppease Hash”后就会出现窗口,在添加字典文件的地方点右键,选择“Add to list”就可以选择破解时使用的字典文件了,选择好字典文件后点击“Start”按钮就可以进行破解了。我这里选择了Cain自带的一个字典文件,就是Cain安装目录下Wordlists目录下的Wordlist.txt,点击“Start”按钮后瞬间就破解出了密码123456。

我们再使用一下暴力破解方法,选择“Brute-Frce Attack”下的“Upperase Hash”,就来到了暴力破解Hash的地方,“Charset”中的“Predefined”给出了很多预设的密码可能,比如要破解纯数字组成的密码就选择0123456789,如果是纯大写字母组成的密码就选择ABCDEFGHIJKLMNOPQRSTUVWXYZ。

当然,我们也可以在“Custom”中自己定义密码具体由哪些数字字母符号组成的,这里我选择了“Predefined”中的0123456789,“Password length”可以设置密码的最小位数和最大位数,因为我已经知道了密码是123456,为了节省破解时间,密码的最小位数和最大位数都设置为了6,“Keyspace”后面的数字显示了总共要尝试密码的个数,“Cunrent password”在破解过程中会显示当前正在尝试的密码,“Key Rate”在破解过程中会显示每秒尝试多少个密码,“Tmie Left”会显示离破解完成剩余的时间,设置完成后点击“Start”按钮也瞬间破解出了密码123456。

密码越复杂,破解所用的时间就越长,5位以内的密码几乎是秒破的。好了,破解MSSQL Hash的方法就给人家介绍完了,没什么技术,本文就是一个操作过程。

本文为网络安全技术研究记录,文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。

相关推荐