数据在传输时会进行编码,为什么需要了解?
例:https://indialms.in/wfp_login.php?r_id=MQ== (base64编码)MQ==即为1
对方服务器可能会在接收的时候进行解码再带入
如果还按照原有的思路不对自己的PayLoad进行同样的编码的话,传入的东西就是不被识别的东西,测试就不会生效;比如上面网址id需要传入一个base64编码的1,如果直接传1的话,就不会被解析
正确的做法是:测试的时候对payload进行同样的加密或者编码信息提交;安全测试漏洞的时候,通常都会对数据修改增加提交测试,以正确的格式发送,才会被正确解析;
一、存储密码格式–应用对象
密码存储-Web&系统&三方应用
- web
- zzzcms网站:admin/123456
密码直接采用md5加密 - dz3.2网站:admin/123456
密码采用MD5加盐(salt:随机数串)的方式进行加密
md5(md5(密码).salt) = 密文
解密:密码的密文:salt - dz3.5网站:admin/12345
密码采用类似AES、DES的加密算法进行加密(密匙,偏移量,填充,模式等);如果想要解密,需要知道上面的信息,才可尝试解密;
$2y 10 10 10OtsSmawENczg1BLcQCEn5OdLqJC9GLiDrClwEUooNnn8b609DfJc.
难度极大,建议遇到直接跳过
- 系统
- Win:NTML加密方式
- Linux:待查证
注:目前大部分的解密方式都是碰撞式解密,不是算法的逆向的还原解密;
- 数据库
- MySQL:mysql5加密算法
- 影响:安全后渗透测试
二、传输加密编码–发送回显
传输数据–编码型&加密型
- 例: 博客登录
抓包可以获取到传输的用户名和密码数据包
登录的数据包为:admin 12345
抓到的数据包进行了Md5加密:username=admin&password=e10adc3949ba59abbe56e057f20f883e
如果现在要进行密码的暴力破解
字典文件中:
账号的话不用变更格式,直接去替换username=的值就行
但是密码需要进行密码算法,保证和password=值同等的加密算法才行
- 影响:漏洞探针(人为寻找漏洞去测试)
三、数据传输格式–统一格式
传输格式-常规&JSON&XML等
-
例:博客登录
通过抓包可以发现用户名和密码数据包的传参格式为text格式,btnPost=%E7%99%BB%E5%BD%95&username=admin and &password=e10adc3949ba59abbe56e057f20f883e&savedate=1
有的数据包可能传参格式为Json:
{btnPost:“%E7%99%BB%E5%BD%95”;
username:“admin”;
password:“e10adc3949ba59abbe56e057f20f883e and”;
savedate:1;
}
或者为XML、HTML等,都可在Burp上一目了然
这种测试时就需要对payLoad以同样的格式进行上传,否则就会无法解析 -
影响:发送的话就会影响漏洞探针;回显过来如果不了解对应格式,会影响数据分析
四、代码特性混淆–开发语言
代码混淆-源代码加密&逆向保护
- PHP /JS源码加密混淆
- EXE、Jar代码保护,返逆向
影响:代码审计、逆向破解
五、识别算法编码方法
- 看密文位数。比如MD5,固定为16位或32位
- 看密文特征。(数字,字母,大小写,符号等),例如上面Base64:就会有大小写;AES会有特殊符号$
- 看当前密文存在的地方(Web,数据库,操作系统等应用)
六、拓展
- 传输数据编码
- BASE64 URL HEX ASCII
- BASE64
值由数字"0-9"和字母"a-f"所组成的字符串,大小写敏感,结尾通常由符号= - URL
URL编码通常由数字"0-9"和字母"a-f"组成的字符串,大小写敏感,通常以%数字字母间隔 - HEX
HEX编码是计算机中数据的一种表示方法,将数据进行十六进制转换,有0-9,A-F组成 - ASCII
ASCII编码是将128个字符进行进制数来表示,常见的ASCII码表大小规则0-9<A-Z<a-z
- 传输数据加密:同密码存储加密
- 传输数据格式:常规鬼字符串,JSON,XML等
- 密码存储加密:
- MD5 SHA1 NTML AES DES RC4
- MD5
MD5值由32位或16位由数字0-9和字母a-f组成的字符串 - SHA1
SHA1这种加密的密文特征与MD5差不多,只不过位数为40位 - NTML
NTML这种加密是Windows的哈希密码,标准通讯安全协议 - AES DES RC4
三种均是非对称性加密算法,引入密钥,密文特征与Base64类似
- 代码混淆
- JS前端代码加密
- JS颜文字 jother JSFUCK
- JS颜文字
颜文字特征:一堆颜文字构成的JS代码,在F12中可直接解密执行 - jother
特征:只用"! + [] {}"这八个只读就能完成对任意字符串的编码,也可在F12中解密执行 - JSFUCK
特征:与jother很像,但是少了{ }
- JS颜文字
- JS颜文字 jother JSFUCK
- 后端代码混淆
- PHP .NET JAVA
- PHP
乱码,头部有信息 - .NET
DLL封装代码文件,加保护 - Java
JAR&Class文件,加保护
- PHP
- 举例:加密平台 ZEND ILSpy IDEA
- 应用场景:版权代码加密,开发特性,CTF比赛
- PHP .NET JAVA
- 特定应用- 数据库密文加密
MySQL MSSQL Oracle Redis等 - 数据显示编码
UTF-8 GBK2312等 - 拓展资源
- 部分资源:
https://www.cmd5.com
http://tmxk.org/jother
http://www.jsfuck.com
http://www.hiencode.com
http://tool.chacuo.net/cryptaes
https://utf-8.jp/public/aaencode.html
https://github.com/guyoung/CaptfEncoder - 30余种加密编码类型的密文特征分析
- CTF中常见密码题解密网站总结
- CTF密码学常见加密解密总结
七、意义
- 了解加密编码进制在安全测试中的存在
- 掌握常见的加密解密编码解码进制互转的操作
- 了解常见的加密解密编码解码进制互转的影响