浅谈Serv-U的密码机制

熟悉Serv-U的用户都知道它保存密码的文件是ServUDaemon.ini,以下是这个文件的一个片断:

[USER=zxl|1]
Password=kr1CB5DDCB3A2EFCB293D2B0757762E205
HomeDir=f:\
TimeOut=600
Access1=F:\|RWAMLCDP
Access2=E:\|RWAMLCDP

这几行的意思是zxl有E: F:的除执行文件以外的所有权限,而他的密码Hash值为kr1CB5DDCB3A2EFCB293D2B0757762E205
,下面再来讲这串Hash值是怎么算出来的:它先随时生成两个字符,这里是kr,然后将生成的随时字母+用户密码求MD5值,这里就是1CB5DDCB3A2EFCB293D2B0757762E205。举个例子,比如用户的密码为123456,Serv-U随时生成的两位字符串是gl,那么Password字段的值应该是gl+MD5(gl123456),也就是gl8F85E32F11B1E4CFCBE353B5B646BF0F

用这种加密方式显然增加了MD5破解的难度,至少原本能直接找个网站查出的123456 MD5值现在就查不出了。但是这种加密方法真的能确保安全吗?因为我们已经知道了它的加密方式,所以只要有一个支持前缀的MD5破解工具,破它的密码和破其它MD5密码没有两样。比如说mdcrack-sse.exe(附件有下载),一款国外的强悍的hash破解工具,它能跑MD2, MD4, MD5, MD5MD5, MD4MD4, MD4MD4S, MD5MD5S, HMAC-MD4, HMAC-MD5,而且速度也是相当的快,用它跑Serv-U的密码和跑传统的密码没有太大的区别。Serv-U密码的失败原因在于它的加密方法过于简单,只是对一般的MD5函数小改了一下,个人觉得用Md5(md5(X))这个Hash函数来保存密码都比它的强。

mdcrack-sse的使用方法:

它的参数较多,这里给出一个例子,比如我们要破gl8F85E32F11B1E4CFCBE353B5B646BF0F,那么它的命令就是:

mdcrack-sse.exe  –priority=NORMAL –prepend=gl  –minsize=8 –maxsize=15 –charset="1234567890" –algorithm=MD5  8F85E32F11B1E4CFCBE353B5B646BF0F

解释一下:–priority=NORMAL表示进程优先级为中等(默认为高),–prepend=gl表示前缀为gl,–minsize=8 –maxsize=15 明文的长度范围,–charset="1234567890" 表示明文字符的组成为全数字,–algorithm=MD5表示密文为MD5的hash值。更详细的参数说明可执行:mdcrack-sse.exe –help。

附件mdcrack-sse.exe 下载:mdcrack-sse.rar

源:http://www.langouster.com/Html/17.html