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

news2024/11/15 11:09:52

站点是个靶场
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函数生成requestID

ctx = 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_CBC
    cipher = AES.new(key, AES.MODE_CBC, iv)
    # 字符串补位
    padded_data = pad(data.encode('utf-8'), AES.block_size)
    # 加密后得到的是bytes类型的数据
    encrypted = cipher.encrypt(padded_data)
    # 使用Base64进行编码,返回byte
    encodestrs = base64.b64encode(encrypted)
    # 对byte按utf-8进行解码转为字符串格式
    enctext = encodestrs.decode('utf8')
    return enctext
	
def 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函数生成requestId
    time_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_str
    sign_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" + param
    else:
        decry_param = AES_Decrypt(param)
        return headers + "\r\n\r\n\r\n\r\n" + decry_param


if __name__ == '__main__':
    app.run(host="127.0.0.1",port="8888")   #接口地址为本地8888端口

autoDecoder配置如图

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

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

请添加图片描述

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

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

请添加图片描述

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

请添加图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

35岁失业后,这3个AI副业,也能养活自己

不少粉丝曾问我,有没有用AI赚钱的方法。 *眼看就快到35岁中年危机,想提前安排个退路。* 对于大家的焦虑,我很能理解,花钱容易挣钱难,尤其是在当下,大环境不是那么好,很多人进入佛系状态&#…

【STM32】位带操作

一、位带操作 1.意义 回想以前写51代码 ​ P0 0x10; //将P0端口设置为0x10 P1_01; //将P1端口0号引脚设置为高电平 a P2_2; //获取P2端口2号引脚的电平 根据上述的方法,我们可以发现快速定位修改某个引脚的电平还有获取引脚的状态 2.原因 GPIO_SetBits、GPI…

2025深圳国际微波射频及天线技术应用展览会

2025深圳国际微波射频及天线技术应用展览会 2025 Shenzhen International Microwave RF and Antenna Technology Application Exhibition 时间:2025年04月9-11日 地点:深圳会展中心(福田) 详询主办方陆先生 I38(前三位&#…

CRMEB 多店版供应商订单管理

订单列表 一、功能介绍 查看所有供应商订单数据,详情,可以提醒发货 根据供应商筛选,可以查看不同类订单 二、操作流程 供应商 > 订单管理 > 订单列表 三、功能说明 售后列表 一、功能介绍 查看所有供应商售后订单数据&a…

一个案例讲透如何做好竞品分析!

随着国内互联网市场进入下半场,各个领域的相关产品层出不穷,即使是新鲜事物,一旦出现,也会迅速造成行业内部拥挤。行业发展如此之快,闭门造车绝对不是产品迭代更新应有的设计方式。敞开大门,出去看看别人家…

基于 Llama factory 微调 Llama3.1-70B-Chinese-Chat

​ 本文旨在探讨基于Llama factory使用LoRA(Low-Rank Adaptation)技术对Llama3.1-70B-Chinese-Chat模型进行微调的过程,重点介绍在单机多卡和多机多卡两种分布式训练环境下的实现方法。 1.环境准备 1.1 平台环境 微调Llama3.1-70B模型&…

Anthropic 公开 Claude AI 模型的系统提示词

硅纪元快讯栏目,每日追踪AI领域的最新动态,快速汇总最新科技新闻,助您时刻紧跟行业趋势。简明扼要的呈现资讯概要,让您快速了解前沿资讯。 1分钟速览新闻 特斯拉“Cortex”超级计算机亮相,预计10月全面运行 Anthropic…

Clickhouse集群化(一)k8s集群搭建

环境准备: vm 17 pro 有些功能必须pro版本才会提供(https://download.csdn.net/download/weixin_40663313/89677277?spm1001.2014.3001.5501)夸克下载链接 centos 7.9 docker:1.26 k8s:1.21.14 1. 创建虚拟机 …

图书馆自习预约选座小程序

一、项目概述 Hi,大家好,今天分享的项目是《图书馆自习预约选座小程序》。 图书馆是日常同学学习的好去处,但同学们日益高涨的学习热情和图书馆座位有限的矛盾也日益凸显。经常出现座位不够的情况,甚至部分同学会进行占座&#…

腾讯浙大提出定制化视频生成框架CustomCrafter,只需通过少量图像就可以完成高质量视频生成!

腾讯联合浙大提出了一种定制化视频生成框架-CustomCrafter,它能够基于文本提示和参考图像生成自定义视频,同时保留运动生成和概念组合的能力。通过设计一系列灵活的模块,使得模型实现了无需额外视频,通过少量图像学习,…

【开端】 进行页面升级或维护时不影响用户体验NGINX配置

一、绪论 在网站管理中,经常需要进行页面升级或维护,而为了不影响用户体验,我们可以设置一个访问页面,在页面升级期间,用户访问网站时会直接跳转到该页面。本文将介绍如何设置访问页面进行升级,以确保用户…

Vue(1)——创建实例

Vue创建实例 Vue是用于构建用户界面的渐进式框架。 创建Vue实例&#xff0c;初始化渲染 准备容器引包(开发版本/生产版本)创建Vue实例指定配置项&#xff0c;渲染数据 el指定挂载点 data提供数据 <!-- 准备容器 --><div id"app"><h1>{{msg}}<…

【论文阅读】Automatic Modulation Classification Based Deep Learning: A Review(2022)

摘要 Automatic Modulation Recognition&#xff08;自动调制识别&#xff09; (AMR) is a critical component of&#xff08;重要组成部分&#xff09; smart communication&#xff08;智能通信&#xff09; and it contributed&#xff08;促进了&#xff09; to the deve…

【中学教资科目二】04中学心理

04中学心理 第一节 认知过程1.1 注意的分类1.2 想象 第二节 学习概述以及知识的学习与技能的形成2.1 知识学习的分类2.2 分化和泛化2.3 强化理论 第三节 学习理论3.1 认知学习理论3.2 建构主义学习理论3.3 行为主义学习理论 第四节 学习心理4.1 奥苏贝尔成就动机分类4.2 学习迁…

【9月持续更新】国内ChatGPT-4o中文镜像网站整理~

以前我也是通过官网使用&#xff0c;但是经常被封号&#xff0c;就非常不方便&#xff0c;后来有朋友推荐国内工具&#xff0c;用了一阵之后&#xff0c;发现&#xff1a;稳定方便&#xff0c;用着也挺好的。 最新的 GPT-4o、4o mini&#xff0c;可搭配使用~ 1、 最新模型科普&…

ES6笔记总结:第四天(ES6完结)

Xmind鸟瞰图&#xff1a; 简单文字总结&#xff1a; node的模块化&#xff1a; 1.CommonJS 规范&#xff1a;Node.js 遵循 CommonJS 模块规范&#xff0c;该规范定义了如何在服务器环境中实现模块化&#xff0c;包括如何定义模块、如何引入和使用模块。 2.模块的定义&…

最新网站服务器CC压力测试系统源码

最新网站服务器CC压力测试系统源码 前后端全开源 一款可测压的系统&#xff0c;但不提供接口。 环境&#xff1a;php7.3 mysql5.6 Apache 2.4.53 上传后解压 访问域名/install进行安装 后台地址&#xff1a;域名/admin 账号&#xff1a;admin 密码&#xff1a;admin 代…

护眼落地灯十大品牌排行榜:十大口碑一流护眼大路灯汇总

十大护眼落地灯品牌哪个牌子好&#xff1f;孩子在读写时经常出现揉眼睛以及眼睛酸痛等现象&#xff0c;多半是因不良光线引起的&#xff0c;光线频闪、发光不均以及太暗太亮都会对眼睛有伤害&#xff0c;而想要改善室内光线环境&#xff0c;护眼大路灯就可以起到改善室内光线环…

JavaScript计算问题

项目场景&#xff1a; 使用JavaScript做 算数运算&#xff0c;比较大小时&#xff0c;没有区分数据类型&#xff0c;导致错误 问题描述 为什么这个数学运算&#xff0c;没有按照我的预期去执行呢&#xff1f; "123" > 123 //false 123 > 123 //false&…

Oracle taf高级特性使用

0、taf介绍 TAF是Oracle数据库提供的一个高级特性&#xff0c;旨在实现应用程序在数据库连接中断时的透明重连。它允许应用程序在数据库故障发生时&#xff0c;无需修改代码或手动干预&#xff0c;就能自动连接到新的数据库实例&#xff0c;保证了事务的连续性和应用的高可用性…