如何绕过api的防重放做安全测试

一、问题引入:api接口测试,会检测请求头中的nonce参数的值,每次请求的值必须不同,否则发包失败

        笔者在进行api接口的测试时(因为菜没有工具,只能另辟蹊跷),使用postman+xray进行安全测试,但是因为nonce参数检测的缘故,导致xray的发出的扫描包全部失效,导致无法使用xray进行安全扫描,由此引入问题。

二、解决思路

 2.1 给xray配置http请求的Header头的nonce参数(pass)

 这种方式,流量走向还是 postman --> xray --> 服务器

 查看xray的配置文件,我的版本为1.9,配置文件config.yaml

但是在这个配置文件中,headers的配置的值是静态的,nonce的值并不能动态变化,也就是说每次发包的nonce值还是一致的,并没有解决问题。此条思路pass,或者是我理解的不够,没有配置好,希望知道的大佬告知一声。

2.2 在xray之后再配置一条代理,流量postman-->xray-->代理--> 服务器

        后来决定另辟一条线,就是给xray加代理,在xray的上层代理处将xray发出扫描的扫描请求包的header头中nonce替换掉,已实现绕过api防止重放的验证。

在xray的配置文件中配置代理即可,当前xray支持 https http socket5的代理

三、实践(postman --> xray --> burpsuite --> 服务器)

我这里为了实现上述的解决方案,用了postman+xray+burpsuite的结局方案。

整理思路及配置如下:

  • 1、postman配置代理为xray

  • 2、主机安装xray和burp的证书

双击对应的证书文件即可

  • 3、xray配置代理为burpsuite监听端口

  • 4、burp创建扩展脚本(当前bp版本为2023.1),将所有请求包的nonce参数的值替换

# -*- coding: utf-8 -*-
from burp import IBurpExtender
from burp import IHttpListener
import random
import stringclass BurpExtender(IBurpExtender, IHttpListener):def registerExtenderCallbacks(self, callbacks):# 获取 Burp 的回调对象self._callbacks = callbacks# 获取扩展工具self._helpers = callbacks.getHelpers()# 设置扩展名callbacks.setExtensionName("Nonce Modifier")# 注册 HTTP 监听器callbacks.registerHttpListener(self)def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):# 仅处理请求if messageIsRequest:print("Processing HTTP request message")# 获取请求信息request_info = self._helpers.analyzeRequest(messageInfo.getRequest())headers = request_info.getHeaders()# 修改请求头中的 nonce 参数modified_headers = self.modifyNonceHeader(headers)# 打印修改后的请求头print("Modified Headers:", modified_headers)# 构造修改后的请求modified_request = self._helpers.buildHttpMessage(modified_headers, messageInfo.getRequest()[request_info.getBodyOffset():])# 更新请求消息messageInfo.setRequest(modified_request)def modifyNonceHeader(self, headers):# 寻找并修改 nonce 参数for i in range(len(headers)):if headers[i].lower().startswith("nonce:"):headers[i] = "Nonce: {}".format(self.generateRandomNonce())return headersdef generateRandomNonce(self):# 生成随机 8 位字符串# 生成随机 8 位字符串,并去除两侧空白字符nonce = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(8)).strip()print("Generated Nonce:", nonce)return nonce

至此,所有配置完毕。

ps:也可以使用其他代理工具,只要能实现对应功能即可,比如mitmproxy代理工具

四、可能存在的问题

1、如果服务器必须使用https请求,这里涉及证书的问题,因为比较经过多层代理转发,xray可能会有tls连接失败的问题

[ERRO] 2023-10-17 16:09:16 [sqldet:detector.go:307] Post "https://xxx.xxx.xxx.xxx/open/api/groups": remote error: tls: user canceled

目前推测还是证书的问题,还希望有大佬看到能详解。

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

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

相关文章

Excel文件带有密码的只读模式,如何设置?

Excel带有密码的除了打开密码和工作表保护以外,其实还有一种可以设置密码的方法,今天给大家分享如何设置带有密码的只读模式。 打开excel文件,将文件进行【另存为】设置,然后停留在保存路径的界面中,我们点击下面的工…

计算机网络第2章-CDN(4)

视频流和内容分发网 HTTP流和DASH 在HTTP流中,视频只是存储在HTTP服务器中作为一个普通的文件,每个文件有有一个特定的URL。当用户要看视频时,客户与服务器之间创建一个TCP连接并发送HTTP GET请求。 HTTP流具有严重缺陷,即所有…

笔记本触摸板没反应?实用技巧助你成功修复!

笔记本电脑是我们日常工作和学习的得力工具之一,而触摸板作为一个重要的输入设备,对于操作的流畅性至关重要。然而,有时候我们可能会遇到笔记本触摸板没反应的问题,这可能会导致困扰和不便。本文将介绍解决笔记本触摸板无响应问题…

虚拟机来安装Linux的优势

笔者认为,通过虚拟机软件学习是初学者学习 Linux 的最佳方式。在与部分读者的交流中,笔者发现,很多初学者都认为,学习 Linux 就必须将自己的电脑装成 Linux 系统或者必须要有真正的服务器设备。而实际上,这是一些机构、…

MSQL系列(四) Mysql实战-索引分析Explain命令详解

Mysql实战-索引分析Explain命令详解 前面我们讲解了索引的存储结构,我们知道了BTree的索引结构,也了解了索引最左侧匹配原则,到底最左侧匹配原则在我们的项目中有什么用?或者说有什么影响?今天我们来实战操作一下&…

腾讯云服务器端口localhost可以访问,外部无法访问解决

搭建frp跳板,发现无法使用。ssh 连接不上。 主要检查2个东西: 1. ubuntu ufw系统防火墙。这个默认是关掉的 2. tencent这个防火墙规则设置后,还要设置到实例上。 以前不是这样的。就掉坑里了。 # systemctl rootVM-4-4-ubuntu:/lib/syst…

从头开始机器学习:线性回归

一、说明 本篇实现线性回归的先决知识是:基本线性代数,微积分(偏导数)、梯度和、Python (NumPy);从线性方程入手。 代码/注释存储库链接 拉曼欣德 GitHub - ramanthind02/Machine_learning_from…

数据可视化素材分享 | 数十图表、无数模板

很多人在后台求分享报表、源代码,其实何必这么麻烦,在奥威BI数据可视化平台上点击即可获得大量的可视化素材,如数十种可视化图表,适用于不同分析场景;又如大量不同主题的BI数据可视化报表模板,套用后替换数…

[1Panel]开源,现代化,新一代的 Linux 服务器运维管理面板

测评介绍 本期测评试用一下1Panel这款面板。1Panel是国内飞致云旗下开源产品。整个界面简洁清爽,后端使用GO开发,前端使用VUE的Element-Plus作为UI框架,整个面板的管理都是基于docker的,想法很先进。官方还提供了视频的使用教程&…

C语言初学者工具选择:vscode + MSYS2 + cmake 搭建 C环境

文章目录 前言1. MSYS2 安装1. 下载安装包2. 安装3. pacman 换清华大学源4. 安装 mingw-w64 toolchain 和 cmake ninja5. 将 toolchain 加入系统环境变量 2. 设置 vscode1. 必要的插件2. 一个简单的 vscode cmake 项目 最后C数据结构与算法CMake 前言 网上关于使用 vscode 配…

GO-实现简单文本格式 文本字体颜色、大小、突出

毫无疑问GO的生态就是一坨大便。老子英文水平小学啊。 实现简单文本格式 文本字体颜色、大小、突出显示等。 创建要给docx文件容器【我估算的】 doc : document.New() defer doc.Close() doc.SaveToFile("simple.docx") 把容器保存为文件 设置标题 创建自然段…

微服务docker部署实战

docker基础和进阶(*已掌握的可以跳过 *) 基础 docker基础 进阶 docker进阶 准备工作 提前准备好mysql和redis的配置,如下 在/zzq/mysql/conf目录下配置mysql配置文件my.cnf [client] #设置客户端字符集 default_character_setutf8 [mysqld] #开启定时任务 event_s…