一文教你学会数据包加解密(一)之关键词定位

前言

在进行渗透测试项目时,我们常常会遭遇数据包加密所带来的挑战。随着信息安全保护等级的要求日益严苛,以及人们对网络安全的意识逐步提升,现在越来越多的系统和应用都将数据安全性放在了首位。

对于渗透测试人员而言,熟练掌握各种常见的加解密技术非常关键。无论是从个人能力发展还是行业发展趋势来看,掌握加解密知识都是迈向专业渗透测试人员的必经之路。

知识点:本篇主要讲解通过关键词定位到加解密函数,作为最基础的JS逆向方法,后续会讲解通过工具和编写脚本来实现自动化处理

1、环境准备

通过使用0ctDay师傅写的一个加解密靶场,用于演示使用,感谢师傅。

https://github.com/0ctDay/encrypt-decrypt-vuls/

在这里插入图片描述

2、抓取数据包

经测试发现“明镜Lab”系统请求和响应数据包都进行了加密处理

现在我想进行修改数据包,该如何做到呢?

在这里插入图片描述

3、加密逻辑梳理

关键词定位法

常用的关键词如:encrypt、decrypt、 encode、decode等,适用于前端JS代码未混淆的状态下使用。

如果数据包中有关键词,也可以搜索关键词进行定位,例如{“data_text”:“xxxxxxxxx”},这时候可直接尝试搜索data_text关键词。

本案例使用的是全加密方式,那么就尝试搜索加解密的关键词进行定位。

首先F12打开DevTools

在这里插入图片描述
打开DevTools的搜索模块

在这里插入图片描述

搜索encrypt关键词,发现可疑的函数,点击跳转到函数地址

在这里插入图片描述
可以看到此处采用了aes对称加密,加密key为f,偏移量(iv)为h。

梳理加密逻辑可知,aes加密,cbc模式,pkcs7填充 key:1234567891234567,iv:1234567891234567

什么是aes加密
AES加密算法(Advanced Encryption Standard)是一种对称加密算法。AES加密算法使用128位、192位或256位密钥对数据进行加密和解密,具有高强度、高速度和易于实现等优点。

关键JS代码

f = a.a.enc.Utf8.parse("1234567891234567")
h = a.a.enc.Utf8.parse("1234567891234567");
        function l(t) {
            var e = a.a.AES.encrypt(t, f, {
                iv: h,
                mode: a.a.mode.CBC,
                padding: a.a.pad.Pkcs7
            });
            return e.toString()
        }

现在拿到了key和偏移量(iv),在函数地址处打上断点并重新输入账号密码进行登录。

在这里插入图片描述
现在已经在断点处停止,可以通过控制台打印我们需要的数据或者调用函数来进行测试。

通过断点可以看到参数“t”显示了我们提交的明文数据,在控制台打印一下看看

在这里插入图片描述

提交的明文被打印,这时候如果想测试加密函数是否可用,替换为我们想修改的数据可以通过在控制台调用。

此处我想修改的话应该运行这个函数,然后把参数“t”替换为自己的内容,记得带上toString()

a.a.AES.encrypt('这是我想加密的数据', f, {
                iv: h,
                mode: a.a.mode.CBC,
                padding: a.a.pad.Pkcs7
            }).toString()

在这里插入图片描述

因为我们直接定位的函数地址是加密函数本身,所以在控制台需要输入完整的JS代码,如果想简便的调用可通过调试断点来找到他的调用处,此函数名称为“l”。

在这里插入图片描述

通过挨个跳转下一个函数运行我们发现了它的调用点:t.data = l(n);

此刻可以在控制台验证一下,直接输入:l(‘这是我想加密的数据’),可以看到和之前加密的结果一致。

在这里插入图片描述

使用工具进行加密验证

在这里插入图片描述

ok,继续梳理其他逻辑,请求包中还包含了timestamp、requestId、sign

timestamp不用多说,一般都是当前的时间戳。

requestId可以理解为数据包的UUID,请求包的唯一值,一般为了提高速度会存储在服务器的redis数据库里,用来做数据包一次性校验。第二次重放数据包将会无法使用。

在这里插入图片描述

同样打上断点跟进函数可以看到逻辑,生成一个32位的字符串

在这里插入图片描述

在这里插入图片描述

现在还剩一个sign,sign一般用作签名使用,主要作用是校验原数据有没有被篡改。

同样打上断点看下sign的逻辑:s = a.a.MD5(n + i + r);

在这里插入图片描述
可以看到:n为明文数据,i为requestId,r为时间戳,也就是timestamp,然后将他们拼接在一起做了md5

在这里插入图片描述
在这里插入图片描述
至此所有逻辑都梳理清楚了,剩下的就可以达到自己任意修改数据包和解密响应包

总结

本文通过使用靶场环境对基本的加密方法进行了讲解,在实战过程中会遇到更复杂的算法和JS代码混淆,如非对称加密RSA SM2,对称加密AES SM4等等,它们往往会搭配使用。

后续会讲解使用工具完成对加密函数的远程调用和编写脚本与burp联动完成自动化处理,尽量写的更细致一些,对刚接触加解密的兄弟会更友好一些,敬请期待…

在这里插入图片描述

Eclipse是一个开放源代码的集成开发环境(IDE),可用于Java开发,但也可以用于其他编程语言的开发。在本文中,我将向你展示如何使用Eclipse进行Java开发。 1. 下载Eclipse 首先,你需要从Eclipse官方网站下载Eclipse IDE。下载页面上将提供几个不同的版本,包括Eclipse IDE for Java Developers、Eclipse IDE for JavaScript and Web Developers,以及Eclipse IDE for C/C++ Developers等。选择适合你的版本,然后按照安装向导进行安装。 2. 创建Java项目 一旦你安装了Eclipse,你可以启动它并创建一个新的Java项目。选择“File”->“New”->“Java Project”,然后按照向导创建一个新的Java项目。在创建项目时,你需要指定项目名称、项目类型以及JRE版本等信息。 3. 创建Java类 一旦你创建了一个Java项目,你就可以创建一个Java类。选择你的Java项目,在“src”文件夹上右键单击,然后选择“New”->“Class”。输入类名和选择要继承的类(如果有的话),然后点击“Finish”。 4. 编写Java代码 现在你已经创建了一个Java类,可以开始编写Java代码了。在Eclipse的编辑器中,你可以输入Java代码并保存它。当你保存Java文件时,Eclipse会自动编译你的代码,并在Problems视图中显示任何编译错误。 5. 运行Java程序 一旦你编写了Java代码并保存了它,你可以运行Java程序。右键单击Java文件,然后选择“Run As”->“Java Application”。如果一切顺利,你的Java程序将在控制台中输出结果。 6. 调试Java程序 如果你的Java程序出现了错误或不按预期运行,你可以使用Eclipse的调试器来调试它。在Eclipse的编辑器中,你可以设置断点并启动调试器。当程序执行到断点时,调试器会暂停程序并允许你检查变量、运行代码等。 7. 导入外部JAR包 有时,你可能需要使用外部JAR包来完成你的Java项目。在Eclipse中,你可以简单地将外部JAR包导入到你的项目中。右键单击Java项目,然后选择“Build Path”->“Configure Build Path”。在“Libraries”选项卡上,你可以添加外部JAR包。 总结 在本文中,我们介绍了如何使用Eclipse进行Java开发。我们学习了如何创建Java项目、创建Java类、编写Java代码、运行Java程序、调试Java程序以及导入外部JAR包。Eclipse具有强大的功能,可以大大提高Java开发的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值