前言
在渗透测试中,常见的密码等敏感信息会采用加密处理,作为安全测试人员必须要了解常见的加密方式,才能为后续的安全测试做好准备。
1、常见加密编码等算法分析
MD5、SHA、ASC、进制、时间戳、URL、base64、Unescape、AES、DES
(1)MD5(Hash)
一般会有32或16位,解密一般是枚举对比。
由数字(0-9)和字母(a-z)组合
(2)SHA(Hash)
有四种:
每种加密的位数是固定的,后面的数字越大,加密后的字符串越长。
由数字(0-9)和字母(a-z)组合
(3)时间戳
禁止缓存css、js,使浏览器同步更新到服务器端最新的静态内容。

(4)URL编码
From:https://www.cnblogs.com/coco1s/p/5038412.html
如果一样东西需要编码,说明这样东西并不适合传输。对于URL来说,是因为URL中有些字符会引起歧义。
例如,URL参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者&,那么势必会造成接收URL的服务器解析错误,因此必须将引起歧义的&和=符号进行转义,也就是对其进行编码。
又如,URL 的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不能在URL中包含任何非ASCII字符,例如中文。否则如果客户端浏览器和服务端浏览器支持的字符集不同的情况下,中文可能会造成问题。
格式:%xx(A-Z、0-9)

在原来的URL后输入“ 1=1”后,URL变为“%201=1”即空格被编码为%20
(5)base64编码
使用64个可打印字符来表示二进制数据的方法,完成数据在HTTP协议上的传输
特点:
明文越长,编码越长。
A-Z、a-z、0-9、= 、+、/ 的随机组合
(6)Unescape
格式:%uxxxx (数字和小写字母)
明文为奇数个字母时:最后一位编码为%u00xx
明文为偶数个字母时:最后一位编码为%u0000
(7)AES加密(对称加密)
From:https://zhuanlan.zhihu.com/p/131324301
http://blog.csdn.net/zhaoyanjun6/article/details/120285594
实际上是:分组密码加密
AES的区块长度固定为128位,密钥长度则可以是128 bit,192 bit 或256位 bit 。换算成字节长度,就是密码必须是 16个字节,24个字节,32个字节。AES密码的长度更长了,破解难度就增大了,更安全。
将明文简单的按照128bit为一个分块进行切割,把每个分块分别进行AES加密,然后再将得到的密文简单的拼接一下即可。
注意到AES加密只能加密128bit的分块,那问题就产生了:如果明文的长度不是128bit的倍数,就会存在一个分块不足128bit,那如何对这个分块进行加密?
为了解决这个问题,发明了一种叫做填充的东西。OFB和CTR不需要填充!
AES加密需要:明文 + 密钥+ 偏移量(IV)+密码模式(算法/模式/填充)
AES解密需要:密文 + 密钥+ 偏移量(IV)+密码模式(算法/模式/填充)
AES的算法模式一般为 AES/CBC/PKCS7Padding
加密模式:
- 电码本模式(ECB)
- 密码分组链接模式(CBC)
- 计算器模式(CTR)
- 密码反馈模式(CFB)
- 输出反馈模式(OFB)
模式: 在除ECB以外的所有加密方式中,都需要用到IV(初始化向量/偏移量)对加密结果进行随机化。
偏移量:一般是为了增加 AES加密的复杂度,增加数据的安全性。一般在 AES_256中会使用到 偏移量 ,而在 AES_128 加密中不会使用到。(不明白偏移量是什么)
在 AES加密中,一般用到的字符集是 utf-8 和 gbk 。
注:
- AES 加密/解密 使用相同的密钥
- 若涉及到偏移量,则AES 加密/解密 使用的偏移量要一样
- AES 加密/解密 要使用相同加密数位,如都使用
AES_256 - AES 加密/解密 使用相同的字符集
- AES 加密/解密 使用相同的加密,填充模式,如都使用
AES/CBC/PKCS7Padding模式 - 由于不同开发语言(如C 和 Java)及不同开发环境(如 Java 和 Android)的影响,可能相同的加解密算法在实现上出现差异,若你们注意到这个差异,就可能导致加解密出现问题

实际上虽然最后的加密编码可以选择base64/hex(十六进制)但直接用其解密是不可行的
(8)DES加密
A-Z、a-z、0-9、= 、+、/ 的随机组合
并且可以组合密钥加密

2、常见加密形式算法解析
直接加密,带 salt,带密码,带偏移,带位数,带模式,带干扰,自定义组合
salt:
From:https://blog.csdn.net/JBlock/article/details/78446604
Salt 可以是任意字母、数字、或是字母或数字的组合,但必须是随机产生的,每个用户的 Salt 都不一样。
3、常见解密方式(针对)
枚举,自定义逆向算法,可逆向
4、了解常规加密算法的特性
长度位数,字符规律,代码分析,搜索获取等
5、CMS加密解密
MD5+salt
eg:
md5(md5($pass).$salt);Vbulletin:IceBB dz
6、某URL加密地址的漏洞测试
AES+Base64+自定义
观察参数值加密字符串,下载源代码分析,函数定义 AES 加密,涉及模式 CBC,128 位,加密密码,偏移量,两次 base64 减去常规一次,填充模式。