06:基础入门-加密编码算法

发布时间 2023-04-22 15:50:51作者: zhengna

  前言:在渗透测试中,常见的密码等敏感信息会采用加密处理,其中作为安全测试人员必须要了解常见的加密方式,才能为后续的安全测试做好准备,本次课程将讲解各种加密编码等知识,便于后期的学习和发展。

1、知识点

#常见加密编码等算法解析
MD5, SHA, ASC,进制,时间戳, URL, BASE64, Unescape, AES, DES 等

#常见加密形式算法解析
直接加密, 带 salt,带密码,带偏移,带位数,带模式,带干扰,自定义组合等

#常见解密方式(针对)
枚举,自定义逆向算法,可逆向

#了解常规加密算法的特性
长度位数,字符规律,代码分析,搜索获取等

md5

  • 全称是md5信息摘要算法(英文:MD5 Message-Digest Algorithm ),一种被广泛使用的密码散列函数,可以产生一个128位(16字节,1字节8位)的散列值(常见的是用32位的16进制表示,比如:0caa3b23b8da53f9e4e041d95dc8fa2c),用于确保信息传输的完整一致。
  • md5特性
    • 不可逆
    • 具有高度的离散性
    • 压缩性(任意长度的数据,算出的md5值得长度都是固定的)
    • 弱碰撞性(现在网上有很多彩虹表,挺容易碰撞的)

几种哈希算法比较:

  • md5--------32位的16进制表示
  • sha1-------40位的16进制表示
  • sha256-----64位的16进制表示
  • sm3--------64位的16进制表示

URL 编码(百分比编码)

  • URL 编码将字符转换为可通过因特网传输的格式。
  • URL 只能使用 ASCII 字符集 通过因特网进行发送。
  • 由于 URL 通常包含 ASCII 集之外的字符,因此必须将 URL 转换为有效的 ASCII 格式。
  • URL 编码使用后跟十六进制数字的 "%" 替代不安全的 ASCII 字符。
  • URL 不能包含空格。URL 编码通常使用加号(+)或 %20 替代空格。

base64编码

  • Base64编码就是使用64个字符作为一个基本字符集:小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"(再加上作为垫字的"=",实际上是65个字符)。然后,所有其他符号都根据一定规则转换成这个字符集中的字符。
  • Base64 编码是用64(2的6次方)个特定的ASCII字符来表示256(2的8次方)个ASCII字符,也就是说三个ASCII字符经过Base64编码后变为四个的ASCII字符显示(公约数为24),编码后数据长度比原来增加1/3,不足3n用“=”补足。

推荐工具:

  • 超级加解密转换工具V2.1 绿色免费版 https://www.cr173.com/soft/21692.html 

2、演示案例

1.某 CTF 比赛题目解析-脚本自定义算法组合逆向

打开bugku,找到

给的数据为   fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=

加密算法如下

<?php
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];
        $x+=1;
    }
    for ($i=0; $i < $len; $i++) {
        $str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
    }
    return base64_encode($str);
} 
?>

大概读了一下是用一个MD5后ISCC为密钥,对密钥重复扩展到待加密数据的长度,然后对它们的每个字节进行了密钥与明文的acill的数字值相加后对128取余,再恢复成字符串,然后进行base64编码,题目中给出的一串字符串明显用了base64编码,所以我们反向推出data

<?php
error_reporting(0);

$data = 'fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=';
$data = base64_decode($data);
$len = strlen($data);
$key = md5('ISCC');
$klen = strlen($key);

$char = $key;
for($i=0;$i<($len-$klen);$i++){
    $char .= $key[$i];
}

$flag = '';
for($i=0;$i<$len;$i++){
    if(ord($data[$i])>=ord($char[$i])){
        $flag .= chr(ord($data[$i])-ord($char[$i]));
    }else{
        $flag .= chr(128+ord($data[$i])-ord($char[$i]));
    }
}
echo $flag;

?>

或者

Flag:{asdqwdfasfdawfefqwdqwdadwqadawd}

2.某 CMS 密码加密解密-MD5+salt

某CMS密码是加盐md5,如下图所示,找到盐值

直接解密,无法成功

加盐解密,成功,但是需要付费

付费后 成功查到结果

3.某 URL 加密地址的漏洞测试-AES+Base64+自定义

 打开墨者学院-sql注入漏洞测试(参数加密)

进入靶场

点击通知

扫描地址,找到一个目录

打开,泄露备份文件

下载,解压,查看源码

分析

了解了加解密过程,接下来注入即可。

参考:https://blog.csdn.net/qq_36585338/article/details/128057663

4.某实际应用 URL 地址参数加密-搜索特定关键字加密字符串

谷歌搜索url中带有id=1(1进行base64编码)的url,可以看看

inurl:id=MQ==

3、涉及资源

https://tool.lu/timestamp/ 在线时间戳转换
http://tool.chacuo.net/cryptaes 在线AES加密解密
https://www.mozhe.cn/ 墨者学院
https://www.cmd5.com/ MD5在线解密
https://ctf.bugku.com/challenges BUGKU靶场
https://www.cr173.com/soft/21692.html 超级加解密转换工具V2.1 绿色免费版