知識點:
0、算法類型-單向散列&對稱性&非對稱性
1、算法識別加解密-MD5&AES&DES&RSA
2、解密條件尋找-邏輯特征&源碼中&JS分析
應用場景:
1、發送數據的時候自動將數據加密發送(只需加密即可)
安全測試思路:我們需要將我們的Payload也要加密發送過去,這樣才符合正常的業務邏輯,所以我們就只需要調用應用的JS加密邏輯進行提交發送測試即可!
2、比如要得到數據的明文(必須要拿到解密算法)
由于各種算法的解密條件不一,密鑰,偏移量,私鑰等不一定能拿到。
一、演示案例-算法識別加解密-MD5&AES&DES&RSA
1、算法加密-概念&分類&類型
單向散列加密 -MD5
單向散列加密算法的優點有(以MD5為例):
方便存儲,損耗低:加密/加密對于性能的損耗微乎其微。
單向散列加密的缺點就是存在暴力破解的可能性,最好通過加鹽值的方式提高安全性,此外可能存在散列沖突。我們都知道MD5加密也是可以破解的。
常見的單向散列加密算法有:
MD5 SHA MAC CRC
解密條件:密文即可,采用碰撞解密,幾率看明文復雜程度
對稱加密 -AES
對稱加密優點是算法公開、計算量小、加密速度快、加密效率高。
缺點是發送方和接收方必須商定好密鑰,然后使雙方都能保存好密鑰,密鑰管理成為雙方的負擔。
常見的對稱加密算法有:
DES AES RC4
解密條件:密文及密鑰偏移量加密模式(固定的3-4種),采用逆向算法解密,條件成立即可解密成功
非對稱加密 -RSA
非對稱加密的優點是與對稱加密相比,安全性更好,加解密需要不同的密鑰,公鑰和私鑰都可進行相互的加解密。
缺點是加密和解密花費時間長、速度慢,只適合對少量數據進行加密。
常見的非對稱加密算法:
RSA RSA2 PKCS
解密條件:密文和公鑰或私鑰,采用逆向算法解密,條件成立即可解密成功
2、加密解密-識別特征&解密條件
MD5密文特點
1、由數字“0-9”和字母“a-f”所組成的字符串
2、固定的位數 16 和 32位
解密需求:密文即可,但復雜明文可能解不出
BASE64編碼特點
0、大小寫區分,通過數字和字母的組合
1、一般情況下密文尾部都會有兩個等號,明文很少的時候則沒有
2、明文越長密文越長,一般不會出現"/“”+"在密文中
AES、DES密文特點
同BASE64基本類似,但一般會出現"/“和”+"在密文中,明文越長,數據越長。
解密需求:密文,加密模式,加密Key,偏移量,條件滿足才可解出
RSA密文特點
特征同AES,DES相似,但是長度較長,哪怕明文數據少,加密后的數據也長
解密需求:密文,公鑰或私鑰即可解出
3、其他密文特點
30余種加密編碼類型的密文特征分析(建議收藏)
https://mp.weixin.qq.com/s?__biz=MzAwNDcxMjI2MA==&mid=2247484455&idx=1&sn=e1b4324ddcf7d6123be30d9a5613e17b&chksm=9b26f60cac517f1a920cf3b73b3212a645aeef78882c47957b9f3c2135cb7ce051c73fe77bb2&mpshare=1&scene=23&srcid=1111auAYWmr1N0NAs9Wp2hGz&sharer_sharetime=1605145141579&sharer_shareid=5051b3eddbbe2cb698aedf9452370026#rd
CTF中常見密碼題解密網站總結(建議收藏)
https://blog.csdn.net/qq_41638851/article/details/100526839
CTF密碼學常見加密解密總結(建議收藏)
https://blog.csdn.net/qq_40837276/article/details/83080460
二、演示案例-解密條件-有源碼找邏輯&無源碼JS逆向
安全測試中:
1、密文-有源碼直接看源碼分析算法(后端必須要有源碼才能徹底知道)
X3.2-md5&salt-密碼存儲(后端處理)
DZ對應代碼段-/uc_server/model/user.php
function add_user() {
$password = md5(md5($password).$salt);}
<?PHP
$h = 'd7192407bb4bfc83d28f374b6812fbcd';
$hash=md5(md5('123456').'3946d5');
if($h==$hash){
echo 'ok';
}else{
echo 'no';
}
?>
<?php
function reverse_md5_hash_with_salt($final_hash, $salt, $dictionary_file) {// 打開字典文件$file = fopen($dictionary_file, "r");if (!$file) {die("無法打開字典文件!");}// 遍歷字典文件中的每一行(即每一個密碼)while (($password = fgets($file)) !== false) {// 去除密碼兩側的空白字符(包括換行符)$password = trim($password);// 第一次 MD5 加密密碼$md5_hash = md5($password);// 拼接 md5($password) 和 salt$salted_hash = $md5_hash . $salt;// 第二次 MD5 加密$final_attempt = md5($salted_hash);// 檢查是否匹配if ($final_attempt === $final_hash) {fclose($file);return $password; // 找到匹配的密碼}}// 如果沒有找到匹配的密碼fclose($file);return null;
}
// 給定的目標加密值和鹽值
$final_hash = "125648dbf16531ab7e6b2f8ec8003ea7"; // 目標 MD5 值
$salt = "3e3790"; // 鹽值
// 字典文件路徑
$dictionary_file = "weaksauce.txt"; // 字典文件路徑
// 調用函數進行密碼破解
$password = reverse_md5_hash_with_salt($final_hash, $salt, $dictionary_file);
// 輸出結果
if ($password) {echo "破解成功,密碼是: $password";
} else {echo "密碼破解失敗";
}
?>
X3.5-hash-密碼存儲(后端處理)
DZ對應代碼段-/uc_server/model/user.php
function add_user() {
$salt = '';
$password = $this->generate_password($password);}
function generate_password($password) {
$algo = $this->get_passwordalgo();
$options = $this->get_passwordoptions();
$hash = password_hash($password, $algo, $options);
}
<?PHP
$hash = '$2y$10$KA.7VYVheqod8F3X65tWjO3ZXfozNA2fC4oIZoDSu/TbfgKmiw7xO';
if (password_verify('123456', $hash)) {echo 'ok';
} else {echo 'error';
}
?>
<?PHP
$hash = '$2y$10$PDACNCRyZzcsknF8zvL4yu7YHIPQTN8F635PxQeXSB8QxxDZSXrd.';
$dictionary_file = "weaksauce.txt";
$file = fopen($dictionary_file, "r");if (!$file) {die("無法打開字典文件!");}// 遍歷字典文件中的每一行(即每一個密碼)while (($password = fgets($file)) !== false) {// 去除密碼兩側的空白字符(包括換行符)$password = trim($password);echo $password."<br>";if (password_verify($password, $hash)) {echo 'ok';} else {echo 'error';} }
?>
2、密文-沒有源碼1、猜識別 2、看前端JS(加密邏輯是不是在前端)
博客登錄-zblog(前端處理)-數據通訊
<script src="script/md5.js" type="text/javascript"></script>
$("#btnPost").click(function(){var strPassWord=$("#edtPassWord").val();
$("form").attr("action","cmd.php?act=verify");
$("#password").val(MD5(strPassWord));
console.log-(MD5("123456"));
某通快遞登錄-混合加密(前端處理)-數據通訊
<script src="/Scripts/Vip/Login.js?v=20241202154949"></script>
function Login() {
logindata.UserName = encodeURI(encrypt.encrypt(numMobile));
logindata.Mobile = encodeURI(encrypt.encrypt(numMobile));;
logindata.Password = encodeURI(encrypt.encrypt(numPassword));
}
var encrypt = new JSEncrypt();
encodeURI(encrypt.encrypt('13554365566'));
3、密文
解密網站:http://tool.chacuo.net/cryptdes
明確以下三種加密算法加解密條件
對稱AES加解密
對稱DES加解密
非對稱RSA加解密