利用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下面才可以

请添加图片描述

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

请添加图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/412531.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于ThinkPHP 5 框架开启自动搜索控制器 无法访问的问题坑

假如当前有一个登陆接口功能 因为后续会有不同版本的 登陆接口 这时候 我们可以在控制器中 新建文件夹 做区分 方便管理即 新建了一个 api 模块 文件路径是 api/controller/V1/Login 正常情况下 controller 目录下 是 控制器文件 login.php 文件,由于我们有多个…

Qt text-align和padding属性

1. text-align属性是用来设置文本的水平对齐方式。 text-align: center 文本将居中显示text-align: left 文本将左对齐显示text-align: right 文本将右对齐显示 2. 内边距padding: 内边距是元素内容与其边框之间的空间 padding-left: 10px; 距离内左边距10个像素点padding-r…

时序预测 | 基于WTC+transformer时间序列组合预测模型(pytorch)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 WTCtransformer时间序列组合预测模型 WTC,transformer 创新点,超级新。先发先得,高精度代码。 预测主模型transformer也可以改其他WTC-former系列,比如WTC-informer/autoformer等等…

LLaMA Factory微调Llama3模型

LLaMA Factory是一款开源低代码大模型微调框架,集成了业界最广泛使用的微调技术,支持通过Web UI界面零代码微调大模型,目前已经成为开源社区内最受欢迎的微调框架。 💥GPU推荐使用24GB显存的A10(ecs.gn7i-c8g1.2xlarg…

论文泛读: DETRs Beat YOLOs on Real-time Object Detection

[toc[ DETRs Beat YOLOs on Real-time Object Detection 论文地址: https://openaccess.thecvf.com/content/CVPR2024/html/Zhao_DETRs_Beat_YOLOs_on_Real-time_Object_Detection_CVPR_2024_paper.html 代码地址: https://zhao-yian.github.io/RTDETR 动机 现状 YOLO系列因…

ubuntu设置为自己需要的屏幕分辨率

先说一下我处理该问题的大体背景:我是学习Linux的新手,刚学完嵌入式Linux驱动开发相关课程。现在想接着学习一下QT开发。我是在电脑上装了虚拟机之后安装的ubuntu系统。因为换了电脑,所以重新装了ubuntu系统。但是,装完ubuntu系统…

SELF-INSTRUCT: Aligning Language Modelswith Self-Generated Instructions 学习

指令微调就是要训练模型执行用户的要求的能力。 文章首先说“指令微调”数据集经常是人工生成,有数量少等缺点。文章提供了一个让语言模型自己生成指令微调数据,自己学习的方法。首先会让一个语言模型自己生成要求,输入和输出,然…

【JS】使用MessageChannel实现深度克隆

前言 通常使用简便快捷的JSON 序列化与反序列化实现深克隆,也可以递归实现或者直接使用lodash。 但 JSON 序列化与反序列化 无法处理如下的循环引用: 实现 MessageChannel 内部使用了浏览器内置的结构化克隆算法,该算法可以在不同的浏览器上…

redis集群部署

因为Redis是c开发的,因此安装redis需要c语言的编译环境,即先需要安装gcc. 1.解压包 [rootredis01 Redis]# tar -zvxf redis-3.2.9.tar.gz 查看是否存在Makefile文件,存在则直接make编译redis源码 2.编译文件 [rootredis01 redis-3.2.9]# make 安装编译好的文件 [rootredi…

上传拍摄素材和后期剪辑素材太慢?镭速助力企业加速大文件传输

随着时光的流逝,当代人对视觉体验的要求越来越高,每一帧画面都追求极致的清晰度与细腻感。这无疑为影视制作带来了机遇,同时也带来了挑战。高清4K、8K视频等大文件的传输需求日益增长,传统的FTP、HTTP等数据传输方式已难以满足行业…

华硕天选Air:开学季的性价比之巅

正值开学季,华硕天选Air全能本以8999元的首发价回归,为学生和需求高性能笔记本的用户带来了超值的选择。 这款笔记本以其轻薄设计和强悍性能,成为市场上的热点。 轻薄设计,潮流先锋 华硕天选Air 2024采用了全新模具设计&#xf…

零基础学习Python(七)

1. 字符串常用方法 lower()、upper():转换为小写字符串、大写字符串 split(str):按照指定字符串str进行分割,结果为列表: email "123qq.com" print(email.split("")) [123, qq.com] count(str)&#xf…

python12 中,No module named‘distutils‘错误

python12跑redis的时候,突然发现报错“ No module nameddistutils ” distutils在python标准库从2012年就开始断更了,python12中已经移除该库,可以安装以下库进行解决。 pip install setuptools --upgrade “setuptools”是一个处理Python软…

OceanBase 功能解析之 Binlog Service

前言 MySQL,是在全球广泛应用的开源关系型数据库,除了其稳定性、可靠性和易用性,他早期推出的二进制日志功能,即binlog,也是MySQL广受欢迎的原因。 MySQL binlog,即二进制日志,是 MySQL 中用于…

爆品是测出来的,不是选出来的

我在亚马逊摸爬滚打了五年,深深感受到了"七分选品,三分运营"的重要性。不管你的产品图片、描述多么精美,如果不去精选和测试,很难保证能出单。我见过很多跨境新手在选品上卡了几个月,纠结于卖什么。但实际上…

光敏电阻传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.光敏电阻传感器介绍 2.原理图 三、程序设计 main.c文件 ldr.h文件 ldr.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 光敏电阻器是利用半导体的光电导效应制成的一种电阻值随入射光的强弱而改变的电阻器,又称为光…

上新!Matlab实现基于QRGRU-Attention分位数回归门控循环单元注意力机制的时间序列区间预测模型

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于QRGRU-Attention分位数回归门控循环单元注意力机制的时间序列区间预测模型; 2.多图输出、多指标输出(MAE、RMSE、MSE、R2),多输入单输出,含不同置信区间图、概率…

[000-01-015].第03节:SpringBoot中数据源的自动配置

我的后端学习大纲 SpringBoot学习大纲 1.数据访问流程: 2.搭建数据库开发场景: 2.1.导入JDBC场景: 2.2.分析自动导入的内容: 2.3.分析为何没有导入数据库驱动: 1.因为人家也不知道我要用啥数据库,所以在自…

衡石科技BI的API如何授权文档解析

授权说明​ 授权模式​ 使用凭证式(client credentials)授权模式。 授权模式流程说明​ 第一步,A 应用在命令行向 B 发出请求。 第二步,B 网站验证通过以后,直接返回令牌。 授权模式结构说明​ 接口说明​ 获取a…

如何禁止电脑访问网站

一、修改Hosts文件 找到Hosts文件:在Windows系统中,Hosts文件通常位于C:\Windows\System32\drivers\etc\目录下。 编辑Hosts文件:以管理员身份打开记事本或任意文本编辑器,然后找到并打开Hosts文件。 添加禁止访问的域名&#…