目录
一、算法识别加解密-MD5&AES&DES&RSA
#算法加密-概念&分类&类型
二、 解密条件-有源码找逻辑&无源码JS逆向
#加密解密-识别特征&解密条件
#密码存储
一、算法识别加解密-MD5&AES&DES&RSA
安全测试中:
密文-有源码直接看源码分析算法(后端必须要有源码才能彻底知道)
密文-没有源码1、猜识别 2、看前端JS(加密逻辑是不是在前端)
#算法加密-概念&分类&类型
-
单向散列加密 -MD5
单向散列加密算法的优点有(以MD5为例):
方便存储,损耗低:加密/加密对于性能的损耗微乎其微。
单向散列加密的缺点就是存在暴力破解的可能性,最好通过加盐值的方式提高安全性,此外可能存在散列冲突。我们都知道MD5加密也是可以破解的。
常见的单向散列加密算法有:
MD5 SHA MAC CRC
*解密条件:密文即可,采用碰撞解密,几率看明文复杂程度
-
对称加密 -AES
对称加密优点是算法公开、计算量小、加密速度快、加密效率高。
缺点是发送方和接收方必须商定好密钥,然后使双方都能保存好密钥,密钥管理成为双方的负担。
常见的对称加密算法有:
DES AES RC4
*解密条件:密文及密钥偏移量,采用逆向算法解密,条件成立即可解密成功
-
非对称加密 -RSA
非对称加密的优点是与对称加密相比,安全性更好,加解密需要不同的密钥,公钥和私钥都可进行相互的加解密。
缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
常见的非对称加密算法:
RSA RSA2 PKCS
*解密条件:密文和公钥或私钥,采用逆向算法解密,条件成立即可解密成功
二、 解密条件-有源码找逻辑&无源码JS逆向
#加密解密-识别特征&解密条件
MD5密文特点:
1、由数字“0-9”和字母“a-f”所组成的字符串
2、固定的位数 16 和 32位
解密需求:密文即可,但复杂明文可能解不出
BASE64编码特点:
0、大小写区分,通过数字和字母的组合
1、一般情况下密文尾部都会有两个等号,明文很少的时候则没有
2、明文越长密文越长,一般不会出现"/""+"在密文中
AES、DES密文特点:
同BASE64基本类似,但一般会出现"/"和"+"在密文中
解密需求:密文,模式,加密Key,偏移量,条件满足才可解出
RSA密文特点:
特征同AES,DES相似,但是长度较长
解密需求:密文,公钥或私钥即可解出
其他密文特点见:
1.30余种加密编码类型的密文特征分析(建议收藏)
30余种加密编码类型的密文特征分析(建议收藏)
2.CTF中常见密码题解密网站总结(建议收藏)
CTF中常见密码题解密网站总结_ctf解密网站-CSDN博客
3.CTF密码学常见加密解密总结(建议收藏)
CTF密码学常见加密解密总结_wydfxjmgvswodododod-CSDN博客
#密码存储
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、数据通讯
-博客登录-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、密文
明确以下三种加密算法加解密条件
对称AES/DES加解密,非对称RSA加解密
解密:在线DES加密解密、DES在线加密解密、DES encryption and decryption--查错网
应用场景:
1、发送数据的时候自动将数据加密发送(自需加密即可)
安全测试思路:我们需要将我们的Payload也要加密发送过去,这样才符合正常的业务逻辑,所以我们就只需要调用应用的JS加密逻辑进行提交发送测试即可!
2、比如要得到数据的明文(必须要拿到解密算法)
由于各种算法的解密条件不一,密钥,偏移量,私钥等不一定能拿到。