数据包签名校验的Web安全测试实践

图片

01

测试场景

在金融类的Web安全测试中,经常可以见到Web请求和响应数据包加密和签名保护,由于参数不可见,不能重放请求包,这类应用通常不能直接进行有效的安全测试,爬虫也爬不到数据。

图片

图片

图片

02

解决思路

对于这类应用,不管是手工测试还是借助工具,需要先还原加密算法(或者签名保护算法),了解加密逻辑后可以开发Burp插件完成明文状态下的安全测试,最后借助密文数据天然对WAF免疫的优势联动漏扫工具完成自动化的安全测试(但逻辑漏洞还得需要手工挖掘)。

本文笔者通过几个案例介绍这类应用的通用测试流程:

加密算法分析→Burp插件开发→联动漏扫。

03

案例说明

1

签名校验示例

许多应用的常见签名的生成算法是:

sign = MD5(sort(业务参数+时间戳+其他参数))

客户端和服务端使用相同的算法生成sign,服务端接收到请求后,先计算一次sign,如果业务参数、时间戳、其他参数中有一个被修改过,得到的sign与客户端发送的sign就会不一致,签名校验就会失败,服务端便不再处理请求。

以下是判断签名校验算法的示例步骤:

1、不修改数据包,重放请求,此时可以正常响应。

图片

2、修改参数icon_type的值为11,再次重放,此时会提示"message":"sign invalid",请求中的api_sign就是签名值,所以首先需要知道api_sign的计算逻辑。

图片

3、用URL参数作为关键字搜索,在JS文件中定位api_sign,设置断点。

图片

4、刷新网页,JS脚本执行停在断点位置,单步步入进入函数内部,可以看到app_key和app_pwd的两个参数,然后单步往下走,参数c的值此时为

device_id=069c8db0-af49-11ed-9a08-3b99f11ff116×tamp=1676725825997&session_token=G2de7f3ab78910b46ad8c07d6e25c627&app_key=f6aefd6691f04573bdf9e044137372bc

也就是请求头的参数值。

图片

5、继续单步走,进行了一次排序,c的值为

app_key=f6aefd6691f04573bdf9e044137372bc&device_id=069c8db0-af49-11ed-9a08-3b99f11ff116&session_token=G2de7f3ab78910b46ad8c07d6e25c627×tamp=1676725825997

图片

6、之后就是拼接字符串

app_key+"Oic"+app_pwd+"QeeeS99u3d"+c+app_key+app_pwd

图片

7、最终函数返回的字符串为:

f6aefd6691f04573bdf9e044137372bcOic72e78efefe6b4577a1f7afbca56b6e28993c06ea4bb84cde8dd70e582dbc76cbQeeeS99u3dapp_key=f6aefd6691f04573bdf9e044137372bc&device_id=069c8db0-af49-11ed-9a08-3b99f11ff116&session_token=G2de7f3ab78910b46ad8c07d6e25c627×tamp=1676725825997f6aefd6691f04573bdf9e044137372bc72e78efefe6b4577a1f7afbca56b6e28993c06ea4bb84cde8dd70e582dbc76cb

8、获取这个字符串的MD5值,就是签名api_sign的值。

图片

9、还原了api_sign的计算方式,接着就可以开发Burp插件自动更新签名校验的参数api_sign。

2

插件编写示例

1、用Python编写Burp插件可能会带来这些问题:语法差异可能出现未知异常,后期联动Xray高并发包时容易丢包,影响漏洞检测准确性。

图片

图片

2、Burp插件的API接口文件,可以从Burp的Extender的APIs中导出。

图片

图片

另外,Burp的API接口调用也可以使用maven或者gradle从公共仓库获取,这种方式更方便一些。Burp插件开发规范要求包名定义为Burp,类名为BurpExtender。

Burp的API的maven pom坐标如下:

    <dependency>      <groupId>net.portswigger.Burp.extender</groupId>      <artifactId>Burp-extender-api</artifactId>      <version>1.7.22</version></dependency>

图片

3、Burp的API文档提供了详尽的开发规范,介绍了如何在Burp中对HTTP包的请求参数、请求头、请求体、返回包等进行自定义处理:

https://portswigger.net/Burp/extender/api/index.html

4、根据上述JS文件中的逻辑:首先是检查URI参数,移除原来参数api_sign。

图片

5、根据修改后的URI参数,使用api_sign生成算法生成新的api_sign。

图片

6、应用插件后再通过repeat功能修改参数,插件会自动更新api_sign的值从而通过签名校验,数据包可以正常重放。

图片

图片

7、在控制台查看更新的api_sign。

图片

3

分段加密示例

1、首先在待测试的应用中输入测试内容,抓包查看请求头。

图片

2、发现数据包都是加密状态。

图片

3、任意修改一个密文字符,把第一个字符c改成1,发现服务端不能正常处理密文。

图片

4、直接发明文包也不行,明文会被当成密文去解密。

图片

5、使用数据包的参数encryptData定位加密代码位置,展开JS文件,搜索关键字。

图片

6、单击{}格式化js,方便阅读,单步步入调试进入pten函数。

图片

7、查看setMd5的入参,可以debug一行一行看。

图片

也可以在控制台执行后查看入参。

图片

8、第一部分MD5的构造:MD5(原始参数json+DES密钥)。

图片

9、setDES函数说明了加密模式:ECB模式,Pkcs7填充的DES加密。

图片

10、参数n是rsa加密DES密钥得到的密文。最后返回MD5+splitStr+DES加密后参数+splitStr+rsa加密的DES密钥。

图片

11、splitStr是一个分割字符,用于将不同加密方式得到的密文分割开,服务端收到密文后,按splitStr分割密文,再逐段解密。

图片

12、拿到控制台看看是什么字符。

图片

13、’\X1D’ 也就是数据包中见到的\u001d。

图片

图片

14、验证一下:解密中间部分的密文, 得到原始参数的JSON。

图片

15、ptde函数用于解密返回包的密文。

图片

图片

16、单步步入getDESModeEBC函数,使用密钥e进行DES解密,没有其他处理。

图片

17、在线解密验证下。

图片

18、请求包的加密方式可知是:

MD5(原始参数+DES密钥)+”\u001d”+DES(原始参数) +”\u001d”+RSA(DES密钥)

19、返回包的解密直接用DES密钥解密即可。

4

分段解密示例

通过Burp插件自动完成对明文数据包分段加密,用正则获取两个\u001d中间的密文,解密后在Burp控制台打印。

图片

解密两个\u001d中间的密文,得到原始参数。

图片

获取明文请求的请求体:

图片

加密后重新封包:

图片

这时候使用明文发包就没问题了。

图片

查看控制台输出的密文请求。

图片

使用IMessageEditorTab在Burp中增加一个控件,用于获取解密后的完整请求包,在IMessageEditorTab中填入请求头和解密后的原始参数。

图片

先判断是否请求中包含参数encryptData。

图片

包含则说明是密文包,再启用控件,解密密文。

图片

图片

点击“参数明文”控件,获取到了解密后的完整请求包,对明文参数进行安全测试,重放后插件会自动完成密文构造。

图片

因为密钥会变,可以提供一个UI界面,在输入框设置密钥,RSA等动态变化的值。

图片

最后需要把返回包的密文也解密,由于在Burp插件开发中返回包没有参数的概念,只能通过偏移获取响应体。

图片

响应体中密文部分存放在encryptData参数中。

图片

解密后,用明文替换密文,再用IMessageEditorTab即可展示解密后的数据包。

图片

此时原始响应还是密文,因为客户端需要解密这个密文,IMessageEditorTab中明文只是展示作用,辅助安全测试,不会返回给客户端。

图片

encryptData中的密文被替换为明文展示,之后的安全测试就完全是明文了。

图片

数据包加密的好处天然对WAF等防火墙免疫,自带绕过属性,比如:

明文的payload会被WAF识别。

图片

加密后WAF没法再识别,如果还原了加密算法,也就间接绕过了WAF。

图片

控制台打印加密的payload。

图片

5

漏扫联动示例

最后是结合漏扫工具做自动化的安全测试(逻辑漏洞还是需要手工测试)。

图片

Burp A中联动Xray。

图片

开启联动Xray的开关。

图片

设置Xray的代理。

图片

Burp B作为Xray的代理。

图片

将插件代码拷贝一份,修改BurpExtender.java中processHttpMessage方法代码,用来处理经过Proxy的HTTP流量,这个部分做两件事:加密请求体,解密响应体。

图片

启动Xray监听127.0.0.1:7777, 在Burp A的Repeater中重放明文请求包。

图片

Xray收到请求,开始扫描,从Xray日志可以看到,未触发WAF。

图片

如果直接扫描原始请求,会触发WAF拦截,返回包都是WAF拦截的405页面。

图片

Burp B收到Xray的请求,加密请求中明文,未触发WAF拦截,扫描器能正常工作。

图片

查看控制台打印的密文信息:

图片

Burp B解密响应的密文后返回给Xray,Xray再根据明文响应包内容判断是否存在漏洞。

图片

作者:罗晟

2024年9月23日

洞源实验室 

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

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

相关文章

STaR: Bootstrapping Reasoning With Reasoning

STaR: Bootstrapping Reasoning With Reasoning 基本信息 博客贡献人 燕青 作者 Eric Zelikman, Yuhuai Wu, Jesse Mu, et al. from Stanford University and Google Research 标签 Large Language Model, Chain-of-thought, Fine-tuning 摘要 生成逐步的“思维链”逻…

揭秘!高校如何逆袭,在算法与科技竞技场中脱颖而出?

目录 揭秘!高校如何逆袭,在算法与科技竞技场中脱颖而出? 一、算法秘境:深度挖掘,教学相长 二、跨界融合:场景为王,合作共赢 企业和高校之间在:场景,算法,数据,算力的优势,高校优势不明显,仅仅在算法方面存在一些优势但并不明显。高校怎样做 揭秘!高校如何逆袭…

2024最新盘点:国内外主流的10款流程管理系统!

本文将盘点十款流程管理系统&#xff0c;为企业选型提供参考&#xff01; 想象一下&#xff0c;在一个企业中&#xff0c;各个部门的工作流程混乱&#xff0c;审批环节繁琐&#xff0c;信息传递不及时。这时&#xff0c;流程管理系统就如同一位高效的指挥官&#xff0c;将企业的…

软件测试干了5年,都白忙活了。。。

本科非计算机专业&#xff0c;在深圳做了5年软件测试工作&#xff0c;从一开始一脸懵的点点点&#xff0c;到现在会自动化测试了&#xff0c;浅谈一下从事软件测试的一点点心得体会&#xff0c;仅供参考交流。如果你本科且非计算机专业的话可以试下&#xff08;但就目前环境建议…

使用Fiddler Classic抓包工具批量下载音频资料

1. 通过F12开发者工具&#xff0c;下载音频文件 浏览器打开音频列表->F12快捷键->网络->媒体&#xff0c;播放一个音频文件&#xff0c;右边媒体下生成一个音频文件&#xff0c;右击“在新标签页中打开”&#xff0c;可以下载这个音频文件。 2.通过Fiddler Classic抓…

简单题100. 相同的树 (python)20240922

问题描述&#xff1a; python&#xff1a; # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right rightclass Solution(object)…

浅谈EXT2文件系统----inode table

Inode table概述 在 EXT2 文件系统中&#xff0c;inode 表&#xff08;Inode Table&#xff09;是一个非常重要的结构&#xff0c;用于存储文件和目录的元数据。每个文件和目录都由一个 inode&#xff08;索引节点&#xff09;来表示&#xff0c;inode 中包含了关于该文件或目…

中兴交换机三层配置

中兴交换机三层配置 目的&#xff1a;将1-10端口划分到3001vlan&#xff0c;11-20端口划分到3002vlan中去 客户端客户端IPvlan网关主机A88.88.1.1203001192.168.1.254主机B192.168.100.1303002192.168.100.254 1、通过Console线登录设备 **********************************…

CCPQT:2024年10月珠海学术会议

第三届计算、通信、感知与量子技术国际会议&#xff08;CCPQT 2024&#xff09; The 3rd International Conference on Computing, Communication, Perception and Quantum Technology 会议地点&#xff1a;中国珠海 会议时间&#xff1a;2024年10月25日-27日 主办单位&…

D盘格式化了,数据怎么恢复?

在日常使用电脑的过程中&#xff0c;我们有时可能会遇到一些意外情况&#xff0c;比如不小心格式化了D盘&#xff0c;导致重要数据丢失。面对这种情况&#xff0c;很多人可能会感到手足无措&#xff0c;不知道该如何恢复丢失的数据。其实&#xff0c;只要掌握正确的方法&#x…

精益生产管理咨询公司哪家好?这份攻略请拿好

面对市场上琳琅满目的精益生产管理咨询公司&#xff0c;企业往往难以抉择&#xff1a;精益生产管理咨询公司哪家好&#xff1f;本文&#xff0c;天行健咨询将从专业性、实战经验、定制化服务、持续支持等多个维度&#xff0c;深入探讨如何评估并选择一家优秀的精益生产管理咨询…

24 C 语言常用的字符串处理函数详解:strlen、strcat、strcpy、strcmp、strchr、strrchr、strstr、strtok

目录 1 strlen 1.1 函数原型 1.2 功能说明 1.3 案例演示 1.4 注意事项 2 strcat 2.1 函数原型 2.2 功能说明 2.3 案例演示 2.4 注意事项 3 strcpy 3.1 函数原型 3.2 功能说明 3.3 案例演示 3.4 注意事项 4 strcmp 4.1 函数原型 4.2 功能说明 4.3 案例演示 …

2021 电子设计大赛-周期信号波形识别及参数测量装置( j 题)-SZPT领跑团队-凌云

目录 一、团队介绍 二、队伍介绍 三、题目要求 四、设计摘要 五、题目分析 1.基本要求 2.发挥部分 六、总体设计框图 七、硬件电路组成 &#xff08;1&#xff09;挡位检测 &#xff08;2&#xff09;挡位选择 &#xff08;3&#xff09;电压抬升电路 &#xff08;…

商标管理软件如何实现高效商标申请与管理?

在数字化时代&#xff0c;商标管理正逐步向智能化、自动化转型。企业对于商标管理软件的需求不再仅仅局限于内部流程的优化&#xff0c;更希望这些软件能够与外部系统无缝对接&#xff0c;实现一键递交官方的高效体验。启服云商标管理软件凭借其强大的技术实力和丰富的行业经验…

Python之一些列表的练习题

1.比较和对比字符串、列表和元组。例如&#xff0c;它们可以容纳哪类内容以及在数据结构上可以做哪些操作。 1. 内容类型:- 字符串: 只能包含字符(文本)。- 列表: 可以包含任意类型的数据,如数字、字符串、其他列表等。- 元组: 可以包含任意类型的数据,与列表类似。3. 操作:(1…

RK3568教学实验箱_操作教程:5-15 直流电机控制实验

一、产品简介 TL3568-PlusTEB人工智能实验箱 国产高性能处理器 64 位 4 核低功耗 2.0 GHz超高主频 1T 超高算力 NPU 兼容鸿蒙等国产操作系统 二、实验目的 1、熟悉Qt程序的开发流程&#xff1b; 2、掌握Qt Creator的基础开发使用&#xff1b; 3、通过编写Qt程序实现直流…

操作无法完成,因为文件已在 SWVisualize2022.BoostService 中打开

在使用 Windows 卸载文件的时候&#xff0c;会出现下面的情况 类似于Linux的强制删除&#xff0c;我们需要首先停止服务&#xff0c;解决方案如下&#xff0c; 进入 cmd 命令行窗口&#xff0c;首先停止服务 net stop "SWVisualize2022.BoostService" 如果需要&am…

ANSYS Workbench三维随机多面体骨料混凝土细观

在三维混凝土细观的有限元模拟中&#xff0c;混凝土细观几何模型的建立是仿真前提&#xff0c;也是其难点。在ANSYS内高效的建立三维几何模型以匹配混凝土中多面体骨料的外形、分布、级配等参数&#xff0c;是三维混凝土细观有限元仿真模拟的关键。 随机多面体骨料3D模型的建…

香港科技大学广州|金融科技学域博士招生宣讲会——武汉大学、华中科技大学

&#x1f514;&#x1f514;&#x1f514;明日宣讲&#x1f514;&#x1f514;&#x1f514; &#x1f490;香港科技大学广州&#xff5c;金融科技学域博士招生宣讲会 &#x1f4cd;武汉大学专场 &#x1f559;时间&#xff1a;2024年9月24日&#xff08;星期二&#xff09;1…

fmql之字符驱动设备(1)

上一篇文章&#xff0c;记录了模块入口和出口函数的编写。 这一篇要继续编写字符驱动程序了。 仍然参考正点原子&#xff1a; 第3.3讲 我的第一个Linux驱动-字符设备驱动框架搭建实验_哔哩哔哩_bilibili 驱动注册和卸载 字符驱动设备的注册函数位register_chrdev 卸载函数…