利用autoDecoder工具在数据包加密+签名验证站点流畅测试

本文主要是介绍利用autoDecoder工具在数据包加密+签名验证站点流畅测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

站点是个靶场
https://github.com/0ctDay/encrypt-decrypt-vuls

演示地址http://39.98.108.20:8085/

不是仅登录位置暴力破解的那种场景,使用autoDecoder(https://github.com/f0ng/autoDecoder)的好处就是每个请求自动加解密,测试起来比较流畅

如何查找js加密代码这里就不详细写了,网上很多文章,直接贴出关键部分信息
请添加图片描述

程序会校验三个header,timestamp、requestId、sign,每个都不能错

timestamp由Date.parse(new Date)生成

requestId由p函数生成

sign为MD5(明文参数的json串+requestId+timestamp)

p函数的代码为

请添加图片描述
关键的加密函数l(n),跟进看一下
请添加图片描述

用了AES_CBC加密,填充方式是Pkcs7,iv与key都是1234567891234567
明白了这些逻辑,参考https://github.com/f0ng/autoDecoder-usages/blob/main/%E5%8A%A0%E8%A7%A3%E5%AF%86%E4%BB%A3%E7%A0%81%E4%BE%8B%E5%AD%90/aes_cbc_zeropadding.py
写出了本次的加解密逻辑代码,因为还有签名等逻辑,改动略大,不过后面遇到类似的照这个结构做些逻辑变更即可

from flask import Flask
import base64
import execjs
import time
import hashlib
import re
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from flask import request# 密钥(key), 偏移量(vi)
app = Flask(__name__)
key = b'1234567891234567'  
iv = b'1234567891234567'#从站点js文件中拷贝出来的一些函数,dtime生成时间戳,p函数生成requestIDctx = execjs.compile("""function dtime() {return Date.parse(new Date)   }function p() {var t = "0123456789abcdef", e = Array.from({length: 32}, (function() {return t.substr(Math.floor(16 * Math.random()), 1)}));return e[14] = "4",e[19] = t.substr(3 & e[19] | 8, 1),e[8] = e[13] = e[18] = e[23],e.join("")}
""")#生成md5,用于签名的生成
def md5_string(text):md5 = hashlib.md5()md5.update(text.encode('utf-8'))return md5.hexdigest()def AES_Encrypt(data):# 定义加密算法为AES_CBCcipher = AES.new(key, AES.MODE_CBC, iv)# 字符串补位padded_data = pad(data.encode('utf-8'), AES.block_size)# 加密后得到的是bytes类型的数据encrypted = cipher.encrypt(padded_data)# 使用Base64进行编码,返回byteencodestrs = base64.b64encode(encrypted)# 对byte按utf-8进行解码转为字符串格式enctext = encodestrs.decode('utf8')return enctextdef AES_Decrypt(data):# base64解密encrypted_data = base64.b64decode(data)# 根据AES_CBC算法解密cipher = AES.new(key, AES.MODE_CBC, iv)decrypted_padded = cipher.decrypt(encrypted_data)try:  #去除填充decrypted = unpad(decrypted_padded, AES.block_size)  # 返回字符串格式明文return decrypted.decode('utf-8')  except ValueError:  # 如果解密后数据格式不正确,比如填充错误,则抛出异常  raise ValueError("解密失败,可能密文已损坏或密钥/IV不正确")@app.route('/encode',methods=["POST"])  #定义加密接口
def encrypt():param = request.form.get('dataBody')  # 获取body内容param_headers = request.form.get('dataHeaders')  # 获取headers内容request_id = ctx.call("p")     #调用js代码中的p函数生成requestIdtime_str = str(ctx.call("dtime"))  #调用js代码中的dtime函数生成过期时间戳json_body = param    #body内容为json串,如{"password":"123456789","username":"test","validCode":"d0f6"}#签名算法为MD5(参数信息+requestId+时间戳)sign_str = json_body + request_id + time_strsign_md5 = md5_string(sign_str)#获取的headers内容为字符串,这里替换header中timestamp、requestId、sign的值,否则校验不通过param_headers = re.sub(r'\btimestamp:\s*(.*?)(?=\s+)', f'timestamp: {time_str}', param_headers)param_headers = re.sub(r'\brequestId:\s*(.*?)(?=\s+)', f'requestId: {request_id}', param_headers)param_headers = re.sub(r'\bsign:\s*(.*?)(?=\s+)', f'sign: {sign_md5}', param_headers)#调用AES加密body数据encry_param = AES_Encrypt(param)#返回整个http包,headers与body中间通过多个换行分隔return param_headers.strip() + "\r\n\r\n\r\n\r\n" + encry_param.strip()@app.route('/decode',methods=["POST"]) # 定义解密接口
def decrypt():param = request.form.get('dataBody')  # 获取body内容headers = request.form.get('dataHeaders')  # 获取headers内容# 如果body内容中有"存在,则表示数据包为明文,不需要解密,不包含则调用AES解密if '"' in param:return headers + "\r\n\r\n\r\n\r\n" + paramelse:decry_param = AES_Decrypt(param)return headers + "\r\n\r\n\r\n\r\n" + decry_paramif __name__ == '__main__':app.run(host="127.0.0.1",port="8888")   #接口地址为本地8888端口

autoDecoder配置如图

请添加图片描述
加解密接口配置
请添加图片描述
本地运行python启动接口
在这里插入图片描述

看下最终效果
实际数据包内容
请添加图片描述
在autoDecoder标签处可看到明文

请添加图片描述

在明文包中右键,选择"Send to Repeater"可以更改参数测试
请添加图片描述

把password值修改下提交,可看到返回包也会自动解密(注意要把明文包拷贝到Pretty或Raw下面才可以

请添加图片描述

暴力破解场景也是轻松拿捏,但需要限制为单个线程,否则验签会失败

请添加图片描述

成功获取密码
请添加图片描述

这篇关于利用autoDecoder工具在数据包加密+签名验证站点流畅测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1108862

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

超强的截图工具:PixPin

你是否还在为寻找一款功能强大、操作简便的截图工具而烦恼?市面上那么多工具,常常让人无从选择。今天,想给大家安利一款神器——PixPin,一款真正解放双手的截图工具。 想象一下,你只需要按下快捷键就能轻松完成多种截图任务,还能快速编辑、标注甚至保存多种格式的图片。这款工具能满足这些需求吗? PixPin不仅支持全屏、窗口、区域截图等基础功能,它还可以进行延时截图,让你捕捉到每个关键画面。不仅如此