06:基础入门-加密编码算法
前言:在渗透测试中,常见的密码等敏感信息会采用加密处理,其中作为安全测试人员必须要了解常见的加密方式,才能为后续的安全测试做好准备,本次课程将讲解各种加密编码等知识,便于后期的学习和发展。
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 绿色免费版