深喉CMS密码加密简要解析 电脑资料_第1页
深喉CMS密码加密简要解析 电脑资料_第2页
深喉CMS密码加密简要解析 电脑资料_第3页
深喉CMS密码加密简要解析 电脑资料_第4页
深喉CMS密码加密简要解析 电脑资料_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

深喉CMS密码加密简要解析 电脑资料 0x01 代码分析 php版加密函数所在文件路径 %Root%Deepthroatincclass.shlencryption.php 代码(加了一点注释): class shlEncryption var $enstr = null; function shlEncryption($str) $this-enstr = $str; function get_shal() return sha1($this-enstr);/sha1加密,40位输出 function get_md5() return md5($this-enstr);/md5加密,32位输出 function get_jxqy3() $tmpMS = $this-get_shal().$this-get_md5();/输入值的sha1加密值(40)+md5值(32) /40+8+a0+a1+.+a15+8 $tmpNewStr = substr($tmpMS,0,9).s.substr($tmpMS,10,9).h.substr($tmpMS,20,9).l.substr($tmpMS,30,9).s.substr($tmpMS,40,9).u.substr($tmpMS,50,9).n.substr ($tmpMS,60,9).y.substr($tmpMS,70,2);/替换10的整数倍上的字符为s、h、l、s、u、n、y $tmpNewStr = substr($tmpNewStr,-36).substr($tmpNewStr,0,36);/前36位后36位倒转 12+16+8 $tmpNewStr = substr($tmpNewStr,0,70);/取前70位 $tmpNewStr = substr($tmpNewStr,0,14).j.substr($tmpNewStr,14,14).x.substr($tmpNewStr,28,14).q.substr($tmpNewStr,32,14).y.substr($tmpNewStr,56,14).3; /在第15倍数位上的加上字符j、x、q、y、3 return $tmpNewStr;/返回 function to_string() $tmpstr = $this-get_jxqy3(); $tmpstr = substr($tmpstr,-35).substr($tmpstr,0,40);/最后35位+开始的40位 return $tmpstr; ? 0x02 算法分析 这个加密过程,将明文(待加密的字符串)的md5及sha1值进行拼接、组合、截取、换位,最后得到密文, 从中,我们看的出,在知道算法的情况下,如果只采取换位的操作,我们是可以得解密出明文的(所有信息没有损耗,专业的说法是信息熵没有改变);但是,如果采取了替换的操作,那么,情况不一样了。因为一旦有替换的话,密文的信息量就会发生改变。譬如ABC做换位的话只会有6种可能,如果使用替换,将C替换为D,那么密文变成了ABD,其中C这个信息就不存在了,解密的时候这个D就只能是枚举可能或者其他规律中寻找了。 回到我们的cms中,我们注意到使用了md5加密,而且是32位的,那么我们是不是可以追踪这32位的数据,看加密过程中,这32位发生了什么改变不就可以了? 这里我们又想到32位的数据比较多,而这个32位的md5其实是可以转化成16位的(其实16位是32位字符串的子串,为第9位到25),好了,到这里,我们的目标明确了,我们追踪这个16个字符串,看在整个字符串加密的过程中,发生了怎么样的变化。 将0x01改下成如下代码,以便分析: var $enstr = admin; var sha1str=sha1($enstr); /sha1加密,40位输出 var md5str=md5($enstr); $tmpMS = sha1str.md5str;/输入值的sha1加密值(40)+md5值(32) echo 第一步,合并:.$tmpMS.rn; $tmpNewStr = substr($tmpMS,0,9).s.substr($tmpMS,10,9).h.substr($tmpMS,20,9).l.substr($tmpMS,30,9).s.substr($tmpMS,40,9).u.substr($tmpMS,50,9).n.substr ($tmpMS,60,9).y.substr($tmpMS,70,2);/替换10的整数倍上的字符为s、h、l、s、u、n、y echo 第二步,替换:.$tmpNewStr.rn; $tmpNewStr = substr($tmpNewStr,-36).substr($tmpNewStr,0,36);/前36位后36位倒转 echo 第三步,换位:.$tmpNewStr.rn; $tmpNewStr = substr($tmpNewStr,0,70);/取前70位 echo 第三步,截取:.$tmpNewStr.rn; $tmpNewStr = substr($tmpNewStr,0,14).j.substr($tmpNewStr,14,14).x.substr($tmpNewStr,28,14).q.substr($tmpNewStr,32,14).y.substr($tmpNewStr,56,14).3; echo 第四步,添加:.$tmpNewStr.rn; $tmpstr = $tmpNewStr; $tmpstr = substr($tmpstr,-35).substr($tmpstr,0,40);/最后35位+开始的40位 echo “最后结果.$tmpstr.rn; ? 执行: 第一步,合并:d033e22ae348aeb5660fc2140aec35850c4da99721232f297a57a5a743894a0e4a801fc3 第二步,替换:d033e22aes48aeb5660hc2140aec3l850c4da99s21232f297u57a5a7438n4a0e4a801yc3 第三步,换位:a99s21232f297u57a5a7438n4a0e4a801yc3d033e22aes48aeb5660hc2140aec3l850c4d 第三步,截取:a99s21232f297u57a5a7438n4a0e4a801yc3d033e22aes48aeb5660hc2140aec3l850c 第四步,添加:a99s21232f297uj57a5a7438n4a0ex4a801yc3d033e2q1yc3d033e22aesyc2140aec3l850c3 最后结果:33e2q1yc3d033e22aesyc2140aec3l850c3a99s21232f297uj57a5a7438n4a0ex4a801yc3d0 我们可以看出: 第一步中,合并中,字符串没有收到影响字符串中的 第二步中,替换中,字符串的第二位被替换成u,字符串第12位被替换成n 第二步中,换位,字符串的位置发生改变 第三步中,截取,对字符串无影响 第四步中,添加,对字符串无影响,字符串的位置发生改变 第五步中,输出前换位,字符串的位置发生改变 那么,本质上,这16位的字符串,改变了两位:第2位,第12位 且知道,16位就存在密文中的48,49(u),50-59,60(n),61,62.63.64 那么我们,如果知道了密码加密后的75位密文后,就可以确定其中的14位了,那么剩下的可能性就只有两位了,剩下也就36*36种已知可能了 0x03 验证 现在,在cms中修改密码为wooyun,查看数据库,密码加密过后为 930eq1yfbc9930e156sy2e62d54fbl601b3617sfbb204a40uj1ffbd4128na84cx258c1yfbc9 取出其中的48,49(u),50-59,60(n),61,62.63.64位 0u1ffbd4128na84cx 而字符串wooyun的md(16位值为 061ffbd41284a84cx 正好符合0x02中分析 0x04 总结 由于笔者仅能注意到这个算

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论