渗透测试中如何破解非常见hash算法?

Posted 乌托邦安全技术社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了渗透测试中如何破解非常见hash算法?相关的知识,希望对你有一定的参考价值。


0x00 引子

渗透测试中如何破解非常见hash算法?

      但是毕竟hashcat能支持的算法数量有限,如果我们碰到一个md5(sha1(sha512($pass).$salt1)).salt2)这样的变态算法,hashcat就没辙了。或许你可以说自己写脚本来跑,反正算法是已知的。但这样一来,无论是写代码还是代码运行的效率都不高。下面介绍今天的主角——hashmanager.

0x01 hashmanager

       Hashmanager是一款和hashcat类型差不多的hash破解工具,同样支持字典、掩码等破解方式。官网http://www.insidepro.team/(目前已经打不开了)。它也内置了一批常见的hash算法。

渗透测试中如何破解非常见hash算法?

       点开Examples目录中的样例hash算法文档,里面就是该算法所需的hash格式。

渗透测试中如何破解非常见hash算法?

        使用时,直接指定算法为文件名即可。

渗透测试中如何破解非常见hash算法?

       除了这些标准hash算法,hashmanager还支持任意已知hash算法的组合使用。具体的规则文件在路径HMHelpEnComplex.txt。

渗透测试中如何破解非常见hash算法?

规则

p

复制密码

s

复制盐值

u

复制用户名

bXX

复制16进制字节一位,适用于公共盐值,若复制多位需要使用bXXbXX

mN

从内存中复制第N个临时变量

eXXYY

HK

使用hash算法K

XK

使用hash算法K,并使用16进制表示

MN

将当前值作为临时变量保存进内存

FN

使用php函数N

       Hash算法K和PHP函数N如上图中所示。

      官方给出了部分样例hash算法对应的算法表达式如下:

渗透测试中如何破解非常见hash算法?

0x02 实例

      最近在渗透测试中遇到一个EmpireCMS,在拿到shell后,看了下源码中的加密算法如下:

function DoEmpireCMSAdminPassword($password,$salt,$salt2){

      $pw=md5($salt2.'E!m^p-i(r#e.C:M?S'.md5(md5($password).$salt).'d)i.g^o-d'.$salt);

      return $pw;

}

从数据库中取出来的$password, $salt, $salt2如下表

$password

$salt

$salt2

c3fe71d97456ed65682491a388b69d94

MMj5z1tR

rUPKqT9CQPRzTTm5KLcz

a018c862fb8b1a7e4ac7f27cac4979f0

Qi2G0RJE

fNoJjrqvc3DXjvUQvRhq

       注意到hashmanager仅支持一个salt, 而此处有两个salt值,但是算法中没有涉及到$username, 我们把函数中的$salt2可以视为$username, 就能解决salt个数大于1的问题。函数中实际所用到的算法相当于:

md5($username.'E!m^p-i(r#e.C:M?S'.md5(md5($pass).$salt).'d)i.g^o-d'.$salt)

我们根据上述算法构造其在hashmanager中对应的算法表达式。

       首先md5(md5($pass).$salt)部分,先复制$pass, 然后使用算法MD5, 由于直接是用的16进制输出,所以是X1, 然后复制$salt, 再次使用算法MD5, 得到算法表达式pX1sX1, 在这一步骤后,该值没有继续进行运算,我们把它保存到临时变量M1,得到pX1sX1M1.

      然后复制$username, 再复制字符串E!m^p-i(r#e.C:M?S,这里将E!m^p-i(r#e.C:M?S转成ASCII格式得到0x45216D5E702D69287223652E433A4D3F53, 每次复制一字节,以此得到ub45b21b6Db5Eb70b2Db69b28b72b23b65b2Eb43b3Ab4Db3Fb53,接下来取出临时变量M1, 拼接得到ub45b21b6Db5Eb70b2Db69b28b72b23b65b2Eb43b3Ab4Db3Fb53m1,        然后复制字符串d)i.g^o-d,同理得到b64b29b69b2Eb67b5Eb6Fb2Db64,这样算法表达式变成了pX1sX1M1ub45b21b6Db5Eb70b2Db69b28b72b23b65b2Eb43b3Ab4Db3Fb53m1b64b29b69b2Eb67b5Eb6Fb2Db64

      最后复制$salt,再MD5一次,从而整个算法表达式为*pX1sX1M1ub45b21b6Db5Eb70b2Db69b28b72b23b65b2Eb43b3Ab4Db3Fb53m1b64b29b69b2Eb67b5Eb6Fb2Db64sH1.(用颜色区分各个部分)

保存在文本中的hash格式如图,依次是$username($salt2):$pass:$salt.

       最后来验证一下所构造的算法表达式是否正确:

       很完美,破解出了其中一个hash,另一个由于明文不在字典中,没有破解成功,但这已经足够了,说明我们构造的算法表达式非常正确。

0x03 获取hashmanager

Hash Manager-1.3.0.zip

SHA-1

bb4e77a236028e632c3aad2a3afdc6df5d4bf3fc

SHA-256

008deed75b1c2083ccd6ff749aa990cffbdd87e930495d2cd2c4e8b3024cee39


以上是关于渗透测试中如何破解非常见hash算法?的主要内容,如果未能解决你的问题,请参考以下文章

渗透测试自学系列—黑客常用的端口及攻击方法汇总

网络安全干货知识分享 - Kali Linux渗透测试 106 离线密码破解

渗透测试之破解详细演示

渗透测试密码暴力破解工具——九头蛇(hydra)使用详解及实战

渗透测试密码暴力破解工具——九头蛇(hydra)使用详解及实战

渗透测试工具-burpsuite