自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深喉CMS密碼加密簡(jiǎn)要解析

安全 數(shù)據(jù)安全
這個(gè)加密過程,將明文(待加密的字符串)的md5及sha1值進(jìn)行拼接、組合、截取、換位,最后得到密文。

一、代碼分析

php版加密函數(shù)所在文件路徑

%wwwRoot%\Deepthroat\inc\class.shlencryption.php

代碼(加了一點(diǎn)注釋):

  1. <?php  
  2. class shlEncryption  
  3. {  
  4.   var $enstr = null;  
  5.   function shlEncryption($str)  
  6.   {  
  7.     $this->enstr = $str;  
  8.   }  
  9.   function get_shal()  
  10.   {  
  11.     return sha1($this->enstr);//sha1加密,40位輸出  
  12.   }  
  13.   function get_md5()  
  14.   {  
  15.     return md5($this->enstr);//md5加密,32位輸出  
  16.   }  
  17.   function get_jxqy3()  
  18.   {  
  19.     $tmpMS = $this->get_shal().$this->get_md5();//輸入值的sha1加密值(40)+md5值(32)  
  20.     //40+8+[a0+a1+...+a15]+8     
  21.     $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 
  22.  ($tmpMS,60,9).'y'.substr($tmpMS,70,2);//替換10的整數(shù)倍上的字符為s、h、l、s、u、n、y  
  23.     $tmpNewStr = substr($tmpNewStr,-36).substr($tmpNewStr,0,36);//前36位后36位倒轉(zhuǎn)  12+16+8  
  24.      $tmpNewStr = substr($tmpNewStr,0,70);//取前70位  
  25.     $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';  
  26.                      //在第15倍數(shù)位上的加上字符j、x、q、y、3  
  27.     return $tmpNewStr;//返回  
  28.   }  
  29.   function to_string()  
  30.   {  
  31.     $tmpstr = $this->get_jxqy3();  
  32.     $tmpstr = substr($tmpstr,-35).substr($tmpstr,0,40);//***35位+開始的40位  
  33.     return $tmpstr;  
  34.   }  
  35. }  
  36. ?> 

二、算法分析

這個(gè)加密過程,將明文(待加密的字符串)的md5及sha1值進(jìn)行拼接、組合、截取、換位,***得到密文。這樣在加密的時(shí)候,我們就基本了解了整個(gè)過程了。

從中,我們看的出,在知道算法的情況下,如果只采取換位的操作,我們是可以得解密出明文的(所有信息沒有損耗,專業(yè)的說法是信息熵沒有改變);但是,如果采取了替換的操作,那么,情況不一樣了。因?yàn)橐坏┯刑鎿Q的話,密文的信息量就會(huì)發(fā)生改變。譬如ABC做換位的話只會(huì)有6種可能,如果使用替換,將C替換為D,那么密文變成了ABD,其中C這個(gè)信息就不存在了,解密的時(shí)候這個(gè)D就只能是枚舉可能或者其他規(guī)律中尋找了。

回到我們的cms中,我們注意到使用了md5加密,而且是32位的,那么我們是不是可以追蹤這32位的數(shù)據(jù),看加密過程中,這32位發(fā)生了什么改變不就可以了?

這里我們又想到32位的數(shù)據(jù)比較多,而這個(gè)32位的md5其實(shí)是可以轉(zhuǎn)化成16位的(其實(shí)16位是32位字符串的子串,為第9位到25),好了,到這里,我們的目標(biāo)明確了,我們追蹤這個(gè)16個(gè)字符串,看在整個(gè)字符串加密的過程中,發(fā)生了怎么樣的變化。 

將0x01改下成如下代碼,以便分析:

  1. <?php  
  2. var $enstr = 'admin';  
  3. var sha1str=sha1($enstr);  //sha1加密,40位輸出  
  4. var md5str=md5($enstr);  
  5. $tmpMS = sha1str.md5str;//輸入值的sha1加密值(40)+md5值(32)  
  6. echo "***步,合并:".$tmpMS."\r\n";  
  7. $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 
  8. ($tmpMS,60,9).'y'.substr($tmpMS,70,2);//替換10的整數(shù)倍上的字符為s、h、l、s、u、n、y  
  9. echo "第二步,替換:".$tmpNewStr."\r\n";  
  10. $tmpNewStr = substr($tmpNewStr,-36).substr($tmpNewStr,0,36);//前36位后36位倒轉(zhuǎn)  
  11. echo "第三步,換位:".$tmpNewStr."\r\n";  
  12. $tmpNewStr = substr($tmpNewStr,0,70);//取前70位  
  13. echo "第三步,截取:".$tmpNewStr."\r\n";  
  14. $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. echo "第四步,添加:".$tmpNewStr."\r\n";  
  16. $tmpstr = $tmpNewStr;  
  17. $tmpstr = substr($tmpstr,-35).substr($tmpstr,0,40);//***35位+開始的40位  
  18. echo “***結(jié)果".$tmpstr."\r\n";  
  19. ?> 

執(zhí)行:

***步,合并:d033e22ae348aeb5660fc2140aec35850c4da99721232f297a57a5a743894a0e4a801fc3

第二步,替換:d033e22aes48aeb5660hc2140aec3l850c4da99s21232f297u57a5a7438n4a0e4a801yc3

第三步,換位:a99s21232f297u57a5a7438n4a0e4a801yc3d033e22aes48aeb5660hc2140aec3l850c4d

第三步,截?。篴99s21232f297u57a5a7438n4a0e4a801yc3d033e22aes48aeb5660hc2140aec3l850c

第四步,添加:a99s21232f297uj57a5a7438n4a0ex4a801yc3d033e2q1yc3d033e22aesyc2140aec3l850c3

***結(jié)果:33e2q1yc3d033e22aesyc2140aec3l850c3a99s21232f297uj57a5a7438n4a0ex4a801yc3d0

我們可以看出:

***步中,合并中,字符串沒有收到影響[字符串中的]

第二步中,替換中,字符串的第二位被替換成"u",字符串第12位被替換成"n"

第二步中,換位,字符串的位置發(fā)生改變

第三步中,截取,對(duì)字符串無(wú)影響

第四步中,添加,對(duì)字符串無(wú)影響,字符串的位置發(fā)生改變

第五步中,輸出前換位,字符串的位置發(fā)生改變

那么,本質(zhì)上,這16位的字符串,改變了兩位:第2位,第12位

且知道,16位就存在密文中的48,49(u),50-59,60(n),61,62.63.64

那么我們,如果知道了密碼加密后的75位密文后,就可以確定其中的14位了,那么剩下的可能性就只有兩位了,剩下也就36*36種已知可能了

三、驗(yàn)證

現(xiàn)在,在cms中修改密碼為‘wooyun,查看數(shù)據(jù)庫(kù),密碼加密過后為

930eq1yfbc9930e156sy2e62d54fbl601b3617sfbb204a40uj1ffbd4128na84cx258c1yfbc9

取出其中的48,49(u),50-59,60(n),61,62.63.64位

0u1ffbd4128na84cx

而字符串‘wooyun’的md(16位值為

061ffbd41284a84cx

正好符合0x02中分析

四、總結(jié)

由于筆者僅能注意到這個(gè)算法中的md5字符串在加密過程中的變化情況,***解密該cms密碼加密后的字符串,可以取出其中的48,49(u),50-59,60(n),61,62.63.64位,然后,將u,n所在位分別替換成其他的0-9或者a-z,構(gòu)成合法的md5值,進(jìn)行md5破解即可。

當(dāng)然,這個(gè)加密的字符串中包含了其他的信息是筆者無(wú)法利用的,如果大牛們有其他看法,望不吝賜教。

責(zé)任編輯:藍(lán)雨淚 來(lái)源: 烏云zone
相關(guān)推薦

2009-12-24 15:04:12

WPF代碼解析異常

2010-03-25 11:58:06

無(wú)線網(wǎng)關(guān)配置

2012-11-15 13:52:07

系統(tǒng)密碼加密加密系統(tǒng)安全

2011-04-18 11:34:04

2009-10-24 10:38:34

2009-07-07 15:46:06

linuxGRUB加密碼

2011-04-18 11:25:21

2020-12-13 17:57:16

加密密碼Python

2017-10-08 07:52:33

2010-05-19 13:37:39

MySQL數(shù)據(jù)庫(kù)密碼

2020-12-21 16:00:07

Pythonzip文件密碼

2019-01-24 10:23:58

Web前端密碼加密

2018-05-30 08:31:08

2010-06-17 22:16:48

2022-12-28 07:45:17

2010-09-26 16:10:03

數(shù)據(jù)加密產(chǎn)品

2023-08-06 06:47:29

2011-07-19 13:55:38

2021-07-18 11:43:58

Linux密碼加密

2015-05-19 08:58:08

加密解密GnuPG
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)