目录
前言
在渗透测试中,常见的密码等敏感信息会采用加密处理,作为安全测试人员必须要了解常见的加密方式,才能为后续的安全测试做好准备,本次课程讲解各种加密编码等知识,便于后续学习发展。
常见加密编码等算法解析
MD5:密文16位或32位,加密密文字符串由A-Z,0-9随机分配,绝大多数网站采取MD5加密管理员或用户密码,理论上不可逆,某些网站提供解密(枚举方法,不是逆向。维护一个库)。如md5在线解密破解,md5解密加密
SHA:SHA1、SHA256、SHA384、SHA512。SHA1产生160位哈希值,长度都是固定的,密文由A-Z,0-9随机组合,不可逆。
SHA 参数的比较(单位:位) 算法 消息长度 分组长度 字长度 消息摘要长度 SHA-1 <2^64 512 32 160 SHA-224 <2^64 512 32 224 SHA-256 <2^64 512 32 256 SHA-384 <2^128 1024 64 384 SHA-512 <2^128 1024 64 512
进制:略
时间戳:网站或者服务器脚本语言里经常会使用,常在数据库里用户登录和注销
注册时使用。如时间戳(Unix timestamp)转换工具 - 在线工具
URL编码:%开始,后续跟0-9,A-Z就是URL编码。如将空格编码为%20,1编码为%31。网址的加密方式,浏览器只做一次加密,在渗透时做关键字绕过的时候可能会使用二、三次加密方式。
BASE64:由A-Z,0-9组成,A-Z部分区分大小写,长度固定,长度随明文长度依次增加,经常在字符串后按出现一个'='或者'=='。常见应用于:代码、密码、参数值,主要应用在Web应用中。
Unescape:%u开头,紧跟4位数字,对应两个字符。主要应用在Web。
AES:是一种安全的加密方式,涉及到密码、偏移量、数据块位数、填充,加密时涉及这4种随机性。必须得知密码、偏移量才有可能解密,如果不知道神仙也搞不出来~~解密难度大。有时看似是BASE64编码的密文,以BASE64解密出来是乱码的话就很有可能是还经过了一层AES加密。常出现于大型网站、安全比赛。有时‘/’会出现在密文字符串里。
DES 等:密文有些类似BASE64,有时‘+’会出现在密文字符串里。
了解常规加密算法的特性。通过长度、位数、字符规律、代码分析、搜索获取相关信息。
演示案例
1. 某CTF赛题解析:脚本自定义算法组合逆向
需要解密密文。下载提供的文件打开后如下所示:
观察到出现两种加密算法:md5、base64。以及PHP的ASCII编码函数chr、ord。
<?php echo ord("h")."<br>"; // 104 echo ord("hello")."<br>"; // 104 ?>
<?php echo chr(61) . "<br>"; // 十进制 = echo chr(061) . "<br>"; // 八进制值 1 echo chr(0x61) . "<br>"; // 十六进制值 a ?>
对‘ISCC’进行md5编码得到$mkey=729623334f0aa2784a1599fd374c120d。
编写解密脚本,解密密文,得到flag。
思路(逆着来):先BASE64解密、再ASCII解码、再MD5解密。
2. 某CMS密码加密解密
Discuz!是一种流行的免费开源中文社区论坛系统,可以用来建立在线社区、讨论版块、问答平台等。其数据库密码采用MD5加密。以小迪自己搭建的基于Discuz的网站为例:
进入网站数据库查看密码情况:
注意到‘salt' 'fbff52',说明采用BASE64+salt加密方式,即明文加上盐再进行加密(明文+干扰字符)。盐一般6位。没有盐无法解密。如何解密盐?密文:盐,成功解密。
3. 某URL加密地址的漏洞测试
以 SQL注入漏洞测试(参数加密)_数据库安全_在线靶场_墨者学院_专注于网络安全人才培养为例。
实训目标:
- 掌握信息泄露的方式;AES加密,无偏移量和密钥无法解密!
- 了解AES加解密;
- 了解PHP的基本语法;
- 掌握手工SQL注入;
- 了解MySQL数据库的结构;
点击“关于平台停机维护的通知”,猜测会通过可下载文件的形式给偏移量、密码:
直接nmap扫描219.153.49.228:42563,扫到地址 219.153.49.228/news/,打开:
分析《关于平台停机维护的通知》的地址:
219.153.49.228:42563/news/list.php?id=ZUUOGMzSmVMMHOwZHhNN3diM056Zz09
猜测AES加密使用到的偏移量和密码放在list.php文件内,下载并打开:
发现关于数据块位数、加密模式、密码、偏移量均给出。以及进行了两次BASE64加密。
mcrypt_generic_init()函数,第一个参数为密码,第二个参数为偏移量。
SQL注入时必须把整条语句按照网站的加密逻辑加密好后再注入,才能正常解密通讯。
ZUUOGMzSmVMMHOwZHhNN3diM056Zz09
先base64解密、再根据php文件提供的数据块位数、加密模式、密码、偏移量,AES解密出明文:1_mozhe,分析php代码发现网站过滤'_mozhe'
做SQL注入时是 219.153.49.228:42563/news/list.php?id=1 and 1=1_mozhe
把 1 and 1=1_mozhe 做AES加密,再作BASE64编码,附到地址栏传送即完成SQL注入。
4. 某实际应用URL地址参数加密
利用谷歌浏览器搜索语法,搜索URL中带有ID=1的网址。MQ==即BASE64编码后的1。
打开这些网址,发现网址格式都是类似的:
https://xxx.xxx.xxx/xxx,php?id=MQ==&name=xxx
对这样的网站进行安全检测时,注入的测试语句(Payload)也要按照网址的加密方式来。
这样的网站如果盲目用工具扫描或盲目注入,无视加密/编码方式的话,是没有用的。
所以有时找不到SQL注入点时,有可能是这方面的问题。
相关资源
在线AES加密解密、AES在线加密解密、AES encryption and decryption--查错网