加密算法
- 一、前言知識
- 1、加密解密
- 2、MD5(最常見)
- 3、SHA
- 4、進制
- 5、時間戳
- 6、URL編碼
- 7、base64編碼
- 8、unescape編碼
- 9、AES加密
- 10、DES(類似于base64)
- 二、常見加密形式算法解析
- 三、演示案例
- 1、某 CTF 比賽題目解析
- 2、某 CMS 密碼加密解密
- 3、某 URL 加密地址的漏洞測試
- 4、某實際應用 URL 地址參數加密
- 四、涉及資源
一、前言知識
前言:在滲透測試中,常見的密碼等敏感信息會采用加密處理,其中作為安全測試人員必須要了解常見的加密方式,才能為后續的安全測試做好準備,本次課程將講解各種加密編碼等知識,便于后期的學習和發展。
1、加密解密
加密軟件
解密軟件
https://www.cmd5.com/
#常見加密編碼等算法解析
MD5,SHA,ASC,進制,時間戳,URL,BASE64,Unescape,AES,DES等#常見加密形式算法解析
直接加密,帶salt,帶密碼,帶偏移,帶位數,帶模式,帶干擾,自定義組合等#常見解密方式(針對)
枚舉,自定義逆向算法,可逆向#了解常規加密算法的特性
長度位數,字符規律,代碼分析,搜索獲取等
2、MD5(最常見)
#含義:
MD5信息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個128位(16字節)的散列值(hash value),用于確保信息傳輸完整一致。#分類
十六位/三十二位MD5(密文位數固定不變)
如:數據庫密碼 #不可逆
不能直接的逆向,網上的解密不是從密文到明文的過程,而是枚舉,如123的解密,是舉例:1,10,11,12,13…121,122,123來匹配
3、SHA
#含義
安全散列算法(英語:Secure Hash Algorithm,縮寫為SHA)是一個密碼散列函數家族,是FIPS所認證的安全散列算法。能計算出一個數字消息所對應到的,長度固定的字符串(又稱消息摘要)的算法。且若輸入的消息不同,它們對應到不同字符串的機率很高。#密文
為0-9,a-z的數字組合,有四種不同的加密方式對于不同的長度。
4、進制
二進制,十進制,十六進制
5、時間戳
#含義
時間戳(英文為Unix epoch, Unix time, POSIX time 或 Unix timestamp)UNIX時間戳的0按照ISO 8601規范為 :1970-01-01T00:00:00Z.一個小時表示為UNIX時間戳格式為:3600秒;一天表示為UNIX時間戳為86400秒,閏秒不計算。#時間戳通常是用在用戶的注冊、登錄、注銷等情況
在線轉換工具:https://tool.lu/timestamp/
6、URL編碼
https://www.cnblogs.com/cxygg/p/9278542.html
序號 | 特殊字符 | 含義 | 十六進制值 |
---|---|---|---|
1. | + | URL 中+號表示空格 | %2B |
2. | 空格 | URL中的空格可以用+號或者編碼 | %20 |
3. | / | 分隔目錄和子目錄 | %2F |
4. | ? | 分隔實際的 URL 和參數 | %3F |
5. | % | 指定特殊字符 | %25 |
6. | # | 表示書簽 | %23 |
7. | & | URL 中指定的參數間的分隔符 | %26 |
8. | = | URL 中指定參數的值 | %3D |
- 搜索PHP的網站。
- 加空格1=1。
- 變為%201=1。
- #%20被成為URL編碼。
#含義
url編碼是一種瀏覽器用來打包表單輸入的格式。瀏覽器從表單中獲取所有的name和其中的值 ,將它們以name/value參數編碼(移去那些不能傳送的字符,將數據排行等等)作為URL的一部分或者分離地發給服務器。#空格的轉化#為什么之前的轉化只轉化空格,沒有轉化1=1?注意:二次轉碼---由于空格的特殊的含義,它會進行轉化,而1轉化為%31的化網站會以為沒有進行轉碼的明文,會對%31再進行一次轉碼—-%25%33%31----看見%31可能會涉及二次編碼。瀏覽器之后解密一次,二次編碼多在自己關鍵字的繞過方面涉及
7、base64編碼
#含義
Base64是網絡上最常見的用于傳輸8Bit字節碼的編碼方式之一,基于64個可打印字符來表示二進制數據的方法。由于輸出內容中包括兩個以上“符號類”字符(+, /, =),不同的應用場景又分別研制了Base64的各種“變種”。為統一和規范化Base64的輸出,Base62x被視為無符號化的改進版本。#規律
明文有多長,密文相對有多長,0-9,a-z,且區分大小寫,經常在密文后面出現等號=
- base64編碼的特點:隨著編碼的文本增加而增加、由大小寫和數字組成且字符結尾一般有兩個等號。
- 一般在代碼中為了安全會使用base64進行編碼。
8、unescape編碼
JavaScript unescape() 函數可對通過 escape() 編碼的字符串進行解碼。
unescape(string),該函數的工作原理是這樣的:通過找到形式為 %xx 和 %uxxxx 的字符序列(x 表示十六進制的數字),用 Unicode 字符 \u00xx 和 \uxxxx 替換這樣的字符序列進行解碼
-
和URL編碼有點像。
-
特點:一般是%U+四個數字對應著兩個字符、主要運用于網站web應用。
- 特點1—以%u開始加上四位的數字。
- 特點2—兩個字符進行轉換(最后一個除外)。
9、AES加密
#密碼學中的高級加密標準(Advanced Encryption Standard,AES),又稱Rijndael加密法,在一個4×4的字節矩陣上運作,這個矩陣又稱為“體(state)”,其初值就是一個明文區塊(矩陣中一個元素大小就是明文區塊中的一個Byte)。
- aes在逐漸的取代md5值、在解密的過程中一定要知道密碼和偏移量不然是解不出來的。
- 在線工具:http://tool.chacuo.net/cryptaes
- 舉例:明文123456,密碼admin,拼接后加密,偏移量不是開始到結尾,而是從一個部分進行加密 。
- 將加密的用base64解密—解密為亂碼多半為aes加密—有時會出現斜杠。
10、DES(類似于base64)
des對稱加密,是一種比較傳統的加密方式,其加密運算、解密運算使用的是同樣的密鑰,信息的發送者和信息的接收者在進行信息的傳輸與處理時,必須共同持有該密碼(稱為對稱密碼),是一種對稱加密算法,用一個 56 位的密鑰以及附加的 8 位奇偶校驗位,產生最大 64 位的分組大小。這是一個迭代的分組密碼,使用稱為 Feistel 的技術,其中將加密的文本塊分成兩半。使用子密鑰對其中一半應用循環功能,然后將輸出與另一半進行“異或”運算;接著交換這兩半,這一過程會繼續下去,但最后一個循環不交換。
- 特點:明文的長度和密文成正比,有時會出現加號。
- 網頁加密,工具解密—出現亂碼(why?–不同平臺參數不同,用同一平臺)。
二、常見加密形式算法解析
1. 直接加密----md5,sha,進制,時間戳,base64,unescape(除ase,des外)
2. 帶 salt---aes
3. 帶密碼---aes,des
4. 帶偏移---aes
5. 帶位數,
6. 帶模式,
7. 帶干擾,
8. 自定義組合。
常見解密方式(針對)
1. 枚舉,
2. 自定義逆向算法,
3. 可逆向。
了解常規加密算法的特性
1. 長度位數,
2. 字符規律,
3. 代碼分析,
4. 搜索獲取等,
三、演示案例
1、某 CTF 比賽題目解析
腳本自定義算法組合逆向
給了一串密文。
fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=
下載文件。
解壓出來得到一個index.txt的文件。
function encrypt($data,$key)
{$key = md5('ISCC');$x = 0;$len = strlen($data);$klen = strlen($key);for ($i=0; $i < $len; $i++) {if ($x == $klen){$x = 0;}$char .= $key[$x]; //把key里面的第一個字符拼接到char里面$x+=1; //x執行一次循環加一次1 有多少個字符串加多少次print_r("88:",$key[$x]);}echo $char."<br>";
//傳入有多少個字符串就取前多少個cmd5字符串賦值給charfor ($i=0; $i < $len; $i++) {//取第data里面的第i個數據加上char里面的第i個數據 把他們的ord()ASCII值相加取余128$str .= chr((ord($data[$i]) + ord($char[$i])) % 128);}print($str);//base64位加密return base64_encode($str);
}
#加密涉及 — MD5,ASCII,base64。
#解密 — 先base64,再ASCII,再MD5。
#解密腳本
function jiemi($str1){echo "初始值:".$str1."<br>";$str=base64_decode($str1);$lens=strlen($str);$j=0;echo "經過base64解碼后:".$str."<br>";echo "長度:".$lens."<hr>";$key1 = md5('ISCC');$key2 = md5('ISCC');$key=$key1.$key2;// for($j=0;$j<$lens;$j++){// //$ord_str=ord($str[i]);// echo $str[j];// }$jie_str="";for ($i=0; $i<$lens; $i++) {echo $i;echo "第一次字符串加密".$str[$i]."<br>";// @$str .= chr((ord($data[$i]) + ord($char[$i])) % 128);$str1=ord($str[$i]);echo "經過ord轉換成ASCII值:".$str1."<br>";if($str1<128){$str1=$str1+128;}else if($str>128){$str1=$str+128;}else if($str>=256){$str1=256+$str;}echo "經過128取余逆向:".$str1."<br>";$str2=$str1-ord($key[$i]);echo "減去CMD5附加的值:".$str2.":".$key[$i]."<br>";$str3=chr($str2);echo "emm:".$str3."<br>";$jie_str=$jie_str.$str3;//$jie_str=$str3;}print_r($jie_str);
}
2、某 CMS 密碼加密解密
MD5+salt
部分CMS密碼加密形式 - wp、dz等
- 登錄搭建的discuz論壇的數據庫。
- 查看數據庫密碼—進入數據庫,查詢sdb_members表的內容。
- 解密查詢—普通的MD5無法解密。
- 查找salt。
3、某 URL 加密地址的漏洞測試
- AES+Base64+自定義
- 觀察參數值加密字符串,下載源代碼分析,函數定義AES加密,涉及模式CBC,128位,加密密碼,偏移量,兩次base64減去常規一次,填充模式。(mozhe)
- 點擊訪問。
- 鑄劍掃描 — aes加密涉及—密碼,偏移量(從網站文件中尋找)。
- 掃到一個地址。
- 打開URL。
-
下載相關文件 — 為解密過程,因為網站的URL編碼加密了,腳本將URL解密,因此是解密過程。
=>list.php
-
結合aes分析結果 — 加密模式cbc,數據塊128位。
- 初始化加密的緩沖區 — mcrypt_generic_init函數的參數 — 描述符,密碼,偏移量。
- 兩次Base64解密 — aes以base64輸出,因此還需要再解密一次。
- 觀察參數值加密字符串 — 前面是密文,后面是明文,無法進行注入 — 要將前面解密才能進行注入。
-
解密密文— ZUlJOGMzSmVMMHQwZHhNN3diM056Zz09。
- base64解密。
- 網絡解密平臺解密。
-
再次分析代碼—過濾,密碼錯就跳轉主頁,對就返回1,將_mozhe過濾—因此注入為: 1 and 1=1_mozhe。
-
修改注入,再進行加密。
4、某實際應用 URL 地址參數加密
搜索特定關鍵字加密字符串
- 搜素特定關鍵字加密字符串—搜索id=MQ==的網站。
- 解密為 — id=1的網站。
- 要注入的思路 ---- 注入的語句也應該加密:解密 - 注入 - 加密(由于加密工具掃不了)。
四、涉及資源
墨者學院:https://www.mozhe.cn
md5解密:https://www.cmd5.com
ASE加解密:http://tool.chacuo.net/cryptaes
Bufku:https://ctf.bugku.com/challenges
超級加解密轉換工具V2.1 綠色免費版:https://www.cr173.com/soft/21692.html
DiscuzX:https://gitee.com/ComsenzDiscuz/DiscuzX