前言

  1. 本博客仅用于个人复习和学习,无商业用途

  2. 遇到问题,优先在本页搜索,检查是否有相关教程

  3. 请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者以及本博客无关

0x0. 密码存储加密

  • MD5:是由32或16位由数字“0-9”和字母“a-f”所组成的字符串,是一种不可逆的加密算法,不区分大小写,其中16位值取的是32位中的8-24位(但是不代表不可以解密,可以使用哈希碰撞进行解密)

  • MD5&salt:加盐操作,用于增强密码存储安全性的技术,由系统随机生成一个盐值(salt),将生成的盐值与用户密码进行拼接,拼接后进行哈希计算,将盐值和哈希值一起存储在数据库中,用以后续验证使用(DISCUZ网站)

  • SHA1(安全哈希算法):类似于MD5,只不过位数是40,同样是数字“0-9”和字母“a-f”所组成的字符串

  • NTLM:储存在windows的哈希密码,当密码为系统密码时,大概率是NTLM加密算法,和MD5类似,标准通讯安全协议

  • AES、DES、RC4是对称加密算法,引入对称密钥,密文特征与BASE64类似

0x1. 传输数据编码

  • BASE64:是由数字”0-9”和字母”a-f”所组成的字符串,大小写敏感,结尾通常有符号=,密文长度不固定,随着明文长度增加而增加

    例如:国外web:www.comresearch.org/researchDetails.php?id=MD== MD==为BASE64编码的1

  • BASE32:特点是明文超过十个后面就会有很多等号,Base32将任意字符串按照字节进行切分,并将每个字节对应的二进制值(不足8比特高位补0)串联起来,按照5比特一组进行切分,并将每组二进制值转换成十进制来对应32个可打印字符中的一个

  • 搜狐视频:https://tv.sohu.com/v/MjAyMTEyMzAvbjYwMTE0NTUxMC5zaHRtbA==.html 20211230/n601145510.shtml的base64就是MjAyMTEyMzAvbjYwMTE0NTUxMC5zaHRtbA==

  • URL:由数字”0-9”和字母”a-f”所组成的字符串,大小写敏感,通常以%数字字母间隔

    个人博客: http://www.xiaodi8.com/search.php?q=%E5%9F%B9%E8%AE%AD

  • HEX:是计算机中数据的一种表示方法,将数据进行十六进制转换,它由 0-9,A-F组成

  • ASCII编码:将 128 个字符进行进制数来表示,常见 ASCII 码表大小规则:0~9<A~Z<a~z,详情参考ASCII码表,均由数字组成

  • 应用场景:参数传递(注入影响),WAF绕过干扰写法应用,视频地址还原

0x2. JS前端代码加密

  • JS颜文字:一堆颜文字构成的js代码,AAencode可以直接解密

    image-20240411140734117

  • jother:只用!+()[]{} 这八个字符就能完成对任意字符串的编码

  • JSFUCK:与jother很像,只是没有{}

0x3. 后端代码加密

三种常见的后端代码:PHP、.NET、JAVA

加密原因:某些厂商开发了一些程序后,不想自己开发了几年的程序被别的厂商直接使用并且在上面扩展,此时会对后端源代码进行相应的加密

  • PHP:加密后会乱码,一般头部会显示相应的加密方式
  • .NET:加密后会变成DLL封装代码,相应的解密工具:ILSpy
  • JAVA:JAR&CLASS文件,相应工具:IDEA (和逆向相关联)

0x4. 识别算法编码类型

  1. 看密文位数
  2. 看密文的组成特征(数字、字母、大小写、符号等)
  3. 当前密码存在的地方(Web、数据库、操作系统等应用)

0x5. 拓展补充资料

30余种加密编码类型的密文特征分析

CTF中常见密码题解密网站总结

CTF密码学常见加密解密总结

0x6. CTF实战

SQL注入漏洞测试(参数加密)综合

题目链接:https://www.mozhe.cn/bug/detail/110

启动靶场环境,如下图

image-20240411153031865

先拿御剑扫一扫后台,看一看有没有相应的隐藏目录

image-20240411153427345

访问一下第一个地址

发现有一个list.zip,点击下载

image-20240411153627355

点击list.php,里面有这么一串解密代码,通过搜索mcrypt_module_open函数可以知道,这是一种AES加密算法

image-20240411153723434

同时,以下两行代码告诉了我们一些AES加密的参数

$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128,'',MCRYPT_MODE_CBC,'');
mcrypt_generic_init($td,'ydhaqPQnexoaDuW3','2018201920202021');

同时,$data = mdecrypt_generic($td,base64_decode(base64_decode($data)));告诉我们data又被进行了两次base64加密

image-20240411154920767

查看网站源码,将id拿去解密,根据加密的逆过程,解密先拿去base64解密,再去以加密模式CBC,加密位数128位,加密密码ydhaqPQnexoaDuW3,加密偏移量2018201920202021的解密方式去解密

image-20240411155540257

AES加密后默认的输出结果是base64编码格式的,所以后续只需进行一次base64加密即可。

base64解密为:eII8c3JeL0t0dxM7wb3Nzg==

拿去AES解密,如下图所示

image-20240411160146974

后续涉及SQL注入,就不在这继续写下去

学逆向-Jsfuck-JSFUCK

题目链接:jsfuck - CTF练习平台_ - 学逆向论坛 - Powered by Discuz! (xuenixiang.cn)

打开附件,如下图所示

image-20240411170553718

查看页面源码

image-20240411170613875

发现是一堆符号,联想题目,应该是JSfuck加密,复制去解密,解密为CTF{whatfk}