009-基础入门-算法逆向&散列对称非对称&JS源码逆向&AES&DES&RSA&SHA

image-20250924214040155

知识点

1、单向散列加密 -MD5,HASH

2、对称加密 -AES DES

3、非对称加密 -RSA

4、解密-识别&需求&寻找(前后端)&操作

演示案例

算法加密-概念&分类&类型

安全测试中:

密文-有源码直接看源码分析算法(后端必须要有源码才能彻底知道)

密文-没有源码1、猜识别 2、看前端JS(加密逻辑是不是在前端)

单向散列加密 -MD5,HASH

单向散列加密算法的优点有(以MD5为例):

方便存储,损耗低:加密/加密对于性能的损耗微乎其微。

单向散列加密的缺点就是存在暴力破解的可能性,最好通过加盐值的方式提高安全性,此外可能存在散列冲突。我们都知道MD5加密也是可以破解的。

常见的单向散列加密算法有:

  • MD5
  • SHA
  • MAC
  • CRC

对称加密 -AES DES

image-20250924221228832

对称加密优点是算法公开、计算量小、加密速度快、加密效率高。

缺点是发送方和接收方必须商定好密钥,然后使双方都能保存好密钥,密钥管理成为双方的负担。

常见的对称加密算法有:

  • DES
  • AES
  • RC4

非对称加密 -RSA

image-20250924221246942

image-20250924221301665

非对称加密的优点是与对称加密相比,安全性更好,加解密需要不同的密钥,公钥和私钥都可进行相互的加解密。

缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

常见的非对称加密算法

  • RSA
  • RSA2
  • PKCS

加密解密-识别特征&解密条件

MD5

MD5密文特点:

  1. 由数字“0-9”和字母“a-f”所组成的字符串

  2. 固定的位数:16 和 32位

解密需求:密文即可,但复杂明文可能解不出

BASE64

BASE64编码特点:

  1. 大小写区分,通常是数字和字母的组合
  2. 一般情况下密文尾部都会有两个等号,明文很少的时候则没有
  3. 明文越长密文越长,一般不会出现”/“”+”在密文中

AES、DES

AES、DES密文特点:同BASE64基本类似,但一般会出现”/“和”+”在密文中

image-20250924221642978

解密需求:密文,模式,加密Key,偏移量,条件满足才可解出

RSA

RSA密文特点:特征同AES,DES相似,但是长度较长

相比其他加密方式,密文长度极长而且是一个固定长度

image-20250924221831953

解密需求:密文,公钥或私钥即可解出

其他密文特点见:

  1. 30余种加密编码类型的密文特征分析(建议收藏)

  2. CTF中常见密码题解密网站总结(建议收藏)

  3. CTF密码学常见加密解密总结(建议收藏)

解密实例-密文存储&数据传输

密码存储(后端处理)

Dsicuzx3.2使用了md5&salt加密

DZ对应代码段位置:/uc_server/model/user.php

1
2
3
function add_user() {
$password = md5(md5($password).$salt); //两次md5,加盐实际上是字符串拼接
}

据此我们可以用php写一个碰撞密码的脚本

1
2
3
4
5
6
7
8
9
10
11
<?PHP
$testPassword = "123456";
$salt = "3946d5";
$h = 'd7192407bb4bfc83d28f374b6812fbcd';
$hash=md5(md5($testPassword).$salt); //此后利用字典不断变换$testPassword的值就可实现碰撞
if($h==$hash){
echo 'ok';
}else{
echo 'no';
}
?>

Dsicuzx3.5-使用了PHP提供的password_hash()

password_hash() 函数用于创建密码的散列(hash)

PHP 版本要求: PHP 5 >= 5.5.0, PHP 7

语法格式:string password_hash ( string $password , int $algo [, array $options ] )

password_hash() 使用足够强度的单向散列算法创建密码的散列(hash)。

password_hash() 兼容 crypt()。 所以, crypt() 创建的密码散列也可用于 password_hash()。

DZ对应代码段位置:/uc_server/model/user.php

1
2
3
4
5
6
7
8
9
10
11
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写一个碰撞密码的脚本

1
2
3
4
5
6
7
8
<?PHP
$hash = '$2y$10$KA.7VYVheqod8F3X65tWjO3ZXfozNA2fC4oIZoDSu/TbfgKmiw7xO';
if (password_verify('123456', $hash)) { //password_verify — 验证密码是否和散列值匹配
echo 'ok';
} else {
echo 'error';
}
?>
数据通讯
博客登录-zblog(前端处理)
1
2
3
4
5
<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)); //前端使用了MD5加密处理
墨者靶场-(后端处理)

该题目提供了后端源码,得知后端解密算法是AES+2次Base64编码,反推构造加密结构,将注入语句以密文形式提交才能注入

1
2
3
-1 union select 1,database(),user(),4_mozhe
xgd58ipTrnx8VzSBJicqCibZxIRsZKgXOYUrNQP8fCCtx9JZ+6K1hHt7RKkzV305
eGdkNThpcFRybng4VnpTQkppY3FDaWJaeElSc1pLZ1hPWVVyTlFQOGZDQ3R4OUpaKzZLMWhIdDdSS2t6VjMwNQ==

站内搜索

没有找到内容!