加密算法

常见加密编码等算法解析

加密算法分为可逆以及不可逆,部分加密算法会有其他的参数,逆向解密需要知道这些参数

  • MD5
  • SHA
  • ASC
  • URL
  • BASE64
  • Unescape
  • AES
  • DES

加密形式算法解析

有些加密算法本身是依据现有算法进行添加内容,多次加密,以及偏移等方式进行,目的是加强密文的强度

  • 直接使用加密算法加密
  • 对明文加salt后进行加密
  • 偏移
  • 位数
  • 模式
  • 干扰
  • 自定义组合

常见解密方式

  • 撞库
  • 逆向
  • 自定义逆向算法

某 CTF 比赛题目解析

脚本自定义算法组合逆向,密文如果在没有加密算法的情况下基本无法破解,但是获取到加密算法后,可以根据加密的规则进行逆向破解

<?php
function encrypt($data, $key) {
    $key = md5('ISCC');
    #print $key;
    $x = 0;
    $len = strlen($data);
    $klen = strlen ($key);
    #print $len;
    for ($i=0; $i < $len; $i++) {
        if($x == $klen)
        $x = 0 ;
        $char .= $key[$x];
        $x += 1;
        #print $key[$X];
    }
    #print $char[0].$char[1].$char[2];
    for ($i=0;$i<$len; $i++) {
        $str .= chr ((ord ($data[$i]) + ord ($char[$i]))%128);
    }
    return base64_encode ($str);
}
echo encrypt('helloword');
?>
  • 逆向解密算法
<?php
function decrypt($str) {
    $mkey = md5('ISCC');
    $klen = strlen($mkey);
    $tmp = $str;
    $tmp = base64_decode($tmp);
    //解密base64
    $md_len = strlen($tmp);
    //获取输入加密字符长度
    $x = 0;
    $char = "";
    //临时数组
    for ($i=0; $i<$md_len; $i++) {
        if ($x == $klen) {
            //当加密字符串长度超出key
            $x = 0;
            //的长度时查重头开始和获取
        }
        $char .= $mkey[$x];
        //.= 累积函数
        $x += 1;
    }
    $md_data = array();
    //获取加密字符中的ASCII数据
    for ($i=0; $i<$md_len; $i++) {
        array_push($md_data,ord($tmp[$i]));
    }
    $md_data_source = array();
    $data1 = "";
    $data2 = "";
    foreach ($md_data as $key => $value) {
        //最终还原
        $i = $key;
        if($i >= strlen($mkey)) {
            $i = $i - strlen($mkey);
        }
        $dd = $value;
        $od = ord($mkey[$i]);
        array_push($md_data_source,$dd);
        $data1 .=chr(($dd+128)-$od);
        //原数据加key的Ascii大于128
        $data2 .=chr($dd-$od);
        //原数据加key的Ascii小于128
    }
    print "data1 =>".$data1."<br>\n";
    print "data2 =>".$data2."<br>\n";
}
$str = 'HxclIiEqIiUY';
decrypt($str);
?>

某 CMS 密码加密解密

为了加强密文强度,有些加密算法会对明文或加密后的密文进行再次加密

  • discuz论坛查表后,获得密文进行解密

某 URL 加密地址的漏洞测试

观察参数值加密字符串,下载源代码分析,函数定义 AES 加密,涉及模式 CBC,128 位,加密密码,偏移量,两次 base64 减去常规一次,填充模式

  • 扫描目录
  • 获得源码
  • 分析加密算法
  • 逆算密文
  • 获得明文后,加入sql注入语句再加密代入进行尝试

base64加密参数

通过搜索inurl:id=MQ==获得一些网站,在base64解密中,MQ==原文为1也就是说,完整的参数为id=1,可以通过对参数值进行注入,然后将参数值进行base64加密尝试注入

QQ截图20211115163039.png

QQ截图20211115163109.png

QQ截图20211115163210.png

资源