【安全研究】某黑产网站后台滲透与逆向分析

文章目录

  • x01. 前言
  • x02. 分析

【🏠作者主页】:吴秋霖
【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作!
【🌟作者推荐】:对爬虫领域以及JS逆向分析感兴趣的朋友可以关注《爬虫JS逆向实战》《深耕爬虫领域》
未来作者会持续更新所用到、学到、看到的技术知识!包括但不限于:各类验证码突防、爬虫APP与JS逆向分析、RPA自动化、分布式爬虫、Python领域等相关文章

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!

x01. 前言

  本次案例为非公开站点分析,源于协助某省公安厅开展的一次黑产打击溯源取证行动。近年来,境内外黑产活动猖獗,涉及领域广泛

在本次行动中,通过对目标团队某成员设备中获取的提权信息进行短时间内的分析与还原,成功抽取到了一批有价值的数据,一般后台普通的网站防护都是较低的(但是它的后台很硬!防护很高

此类黑产平台也许时常会顾虑到被滲透的风险,所以在里面加固了一套JS层面防护较高的整套产品,因为加上日志登录记录就算短时被黑掉只要能够发现就会被阻断(想要收集数据还需要花费时间逆向所有的加密跟数据解密

这里作者据回忆复盘画了一下它后台防护的概览图,如下所示:

在这里插入图片描述

本案例中所需解决的防护措施主要集中在加密与逆向分析(验签、解密)由于需要快速获取 member的信息身份、手机号、银行卡等,破解加密防护后还需面对验证检测机制(U盾触发)这一环节是较为棘手的。触发风控机制将直接导致操作被阻断

在有限的时间内,需要尽可能完成分析与信息收集,因为系统会实时记录登录活动

据说此类防护流程在此类黑产平台应用广泛,价值高达数百万一套!并且会配备几名专业开发人员升级、开发、维护

再说个题外话,member的数量如果我没记错的话高达近10W,涉及的资金流水规模庞大~可见其黑产运作的复杂性和广泛性

x02. 分析

后台页面呈现的数据来源于多个独立接口,其中较为敏感和有价值的信息姓名、手机号、银行卡…这些字段的明文信息经过了两层解密,如下所示:

在这里插入图片描述

点击页面上红色形状的锁将弹出第一层(U盾验证码)进行数据解密,如下所示:

在这里插入图片描述

查看网络发包,可以看到所有的API接口地址都是经过动态加密处理的,如下所示:

在这里插入图片描述

接口请求参数跟响应数据同样全部也是经过加密处理的,如下所示:

在这里插入图片描述

在这里插入图片描述

通过对堆栈调用和 JS 代码的静态分析,发现了相关的加密特征。起初猜测目标可能采用了第三方 WAF(Web 应用防火墙)服务,但进一步分析发现其加密核心算法基于 WebAssembly(WASM)。加密逻辑可能由 C/C++ 编写后转换为 WASM 文件,并通过 JS 调用,具体如下图所示:

在这里插入图片描述

WASM 的引入在一定程度上提高了对 JS 逆向分析的防护能力,有效阻断了常规的 XHR 断点调试方式。对此,采用堆栈调用静态分析法,定位 API 接口加密前的明文数据及请求参数成为主要破解手段。好在目标常规的JS代码并未进行混淆或VMP

在这里插入图片描述

直接快速打日志点找到明文的接口发包以及头部所有参数的加密流程梳理快速进行验签还原,如下所示:

在这里插入图片描述

在这里插入图片描述

首先分析头部里面的第一个参数XXXXX1,对JS算法中生成的字符进行替换与反转最后再拼接,这里可以直接将一些无关的依赖函数去掉,使用任意语言可实现,如下所示:

def generate_result(self):def r(p):h = p.replace("&", "8").replace("*", "c").replace("%", "a")return h[::-1]def d(p, h, m): return ''.join([p, h, m][::-1])h = "" # 动态字符m = "" # 动态字符E = "" # 动态字符return d(r(h), r(m), r(E))

请求头内的第二个XXXXX2参数的话通过分析JS发现是固定的,如下所示:

在这里插入图片描述

如上可看到它会对wasm处理后的API、参数都会进行二次校验,接下来分析头部的(3、4、5)三个参数,都是动态更新通过两层AES解密得到,第一层的话它将密文放在了localStorage中,通过对应的Key获取经过第一层AES解密后将得到新的密文(一串JSON),新的密文则放在JSON中某个Key下面,获取后再次经过AES解密即可得到最终参数的正确值如下所示:

在这里插入图片描述

在这里插入图片描述

所有加密相关的参数都处理完之后,拿到的都是密文数据,如下所示:

在这里插入图片描述

在上图的基础之上需要再次经过两层数据解密才能拿到完整的明文数据!第一层的话就是上面提到的U盾,这一步就省略不细说,直接看第二层的解密方法,所有字段的密文都交由一个独立的接口去进行解密,接受三个参数,如下所示:

_encryptedString(密文)、_signature(密钥)、_fingerprint(指纹)

这里逆向分析完数据的解密流程及算法后开始编写程序进行快速验证,明文数据如下所示:

在这里插入图片描述

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

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

相关文章

ESP32外设学习部分--SPI篇

SPI学习 前言 我个人以为开始学习一个新的单片机最好的方法就是先把他各个外设给跑一遍,整体了解一下他的功能,由此记录一下我学习ESP32外设的过程,防止以后忘记。 SPI 配置步骤 SPI总线初始化 spi_bus_config_t buscfg {.miso_io_num …

禅道Bug的一次迁移

一、场景 平时工作记录在公司禅道上的问题想备份一份到本地,但是又没有公司禅道的数据库信息,有时候出测试报告想批量调整数据方便截图很困难,同时也为了学习禅道数据流转过程,所以有了把缺陷保存到本地一份的想法。 实际上禅道支…

Redis - 消息队列 Stream

一、概述 消息队列 定义 消息队列模型:一种分布式系统中的消息传递方案,由消息队列、生产者和消费者组成消息队列:负责存储和管理消息的中间件,也称为消息代理(Message Broker)生产者:负责 产…

C语言数组和字符串笔记

C语言数组和字符串笔记 1. 数组及其相关概念 1.1 为什么需要使用数组? 数组是一个有序的、类型相同的数据集合。这些数据被称为数组的元素。每个数组都有一个名字,数组名代表数组的起始地址。数组的元素通过索引或下标访问,索引从0开始。 …

双目摄像头标定方法

打开matlab 找到这个标定 将双目左右目拍的图像上传(左右目最好不少于20张) 等待即可 此时已经完成标定,左下角为反投影误差,右边为外参可视化 把这些误差大的删除即可。 点击导出 此时回到主页面,即可看到成功导出 Ca…

数据结构开始——时间复杂度和空间复杂度知识点笔记总结

好了,经过了漫长的时间学习c语言语法知识,现在我们到了数据结构的学习。 首先,我们得思考一下 什么是数据结构? 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素…

什么是MMD Maximum Mean Discrepancy 最大均值差异?

9多次在迁移学习看到了,居然还是Bernhard Schlkopf大佬的论文,仔细看看。 一.什么是MMD? 1. MMD要做什么? 判断两个样本(族)是不是来自于同一分布 2.怎么做?(直观上)…

电梯内电动车识别数据集,可准确识别电梯内是否有电动车 支持YOLO,COCO,VOC三种格式的标注 7111张图片

电梯内电动车识别数据集,可识别电梯内是否有电动车 支持YOLO,COCO,VOC三种格式的标注 7111张图片 7111总图像数 数据集分割 训练组 74% 5291图片 有效集 16% 1168图片 测试集 9% 652…

Collection接口

目录 一. Collection基本介绍 二. Collection中的方法及其使用 1. 添加元素 (1) 添加单个元素 (2) 添加另一集合中的所有元素 2. 删除元素 (1) 删除单个元素 (2) 删除某个集合中包含在其他集合中的元素 (3) 保留两个集合中的交集部分, 删除其他元素. 3. 遍历元素 (1) …

Mybatis Plus 3.0 快速入门

1、简介 MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 2、创建并初始化数据库 2.1、创建数据库 mybatis_plus 2.2、创建 User 表 其表结构如下: idnameageemail1Jone18test1@baomidou.com2Jack…

Verilog实现图像处理的行缓存Line Buffer

在图像处理中,难免会遇到对图像进行卷积或者模板的局部处理,例如ISP中的一些算法,很大部分都需要一个窗口,在实时视频处理中,可以利用行缓存Line buffer可以暂存几行数据,然后同时输出每行中的对应列的像素…

【银河麒麟高级服务器操作系统】有关dd及cp测试差异的现象分析详解

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn dd现象 使用银河麒麟高级服务器操作系统执行两次…

ORACLE逗号分隔的字符串字段,关联表查询

使用场景如下: oracle12 以前的写法: selectt.pro_ids,wm_concat(t1.name) pro_names from info t,product t1 where instr(,||t.pro_ids|| ,,,|| t1.id|| ,) > 0 group by pro_ids oracle12 以后的写法: selectt.pro_ids,listagg(DIS…

记录2024-leetcode-字符串DP

10. 正则表达式匹配 - 力扣(LeetCode)

微信开发者工具(小程序)的版本管理,Git Push 和 Pull

微信开发者工具(小程序)的版本管理,Git Push 和 Pull 一、设置 第一次用微信开发者工具自带的版本管理的拉取和推送功能,稍稍的研究了下。 1、首先要先设置 “用户”,名字和邮箱,不一定要真名&#xff0c…

2020-12-07 光棍数

由光棍数的特征可推导其商的个位数不存在偶数且只有1、3、7、9这4个数。一个数可匹配多个光棍数且必定是中间隔着0的循环数。 void 光棍数(int n) {//缘由http://ask.csdn.net/questions/3444069 做乘法运行时间超长int w 0; long long x 111111111111111, j 0;//j x*n;/…

【Linux系统】—— 初识 shell 与 Linux 中的用户

【Linux系统】—— 初识shell 与 Linux 中的用户 1 Xshell 运行原理1.1 命令行的组成1.2 外壳程序 2 Linux中的用户2.1 两种用户2.2 创建普通用户2.3 用户切换2.3.1 普通->超级2.3.2 超级->普通 3 指令的短暂提权3.1 为什么要提权3.2 sudo 指令3.3 人人都能提权吗 1 Xshe…

.NET平台使用C#设置Excel单元格数值格式

设置Excel单元格的数字格式是创建、修改和格式化Excel文档的关键步骤之一,它不仅确保了数据的正确表示,还能够增强数据的可读性和专业性。正确的数字格式可以帮助用户更直观地理解数值的意义,减少误解,并且对于自动化报告生成、财…

Android显示系统(10)- SurfaceFlinger内部结构

一、前言: 之前讲述了native层如何使用SurfaceFlinger,我们只是看到了简单的API调用,从本文开始,我们逐步进行SurfaceFlinger内部结构的分析。话不多说,莱茨狗~ 二、类图: 2.1、总体架构: 先看下SurfaceFlinger的关键成员和我们BootAnimation侧关键成员如何对应起来…

深度学习中的多通道卷积与偏置过程详解

目录 ​编辑 多通道卷积的深入理解 🔍 卷积核的多维特性 🌌 卷积操作的细节 🔧 多通道卷积的优势 🌟 偏置过程的深入理解 🎯 偏置的两种实现方式 🛠️ 偏置的作用与重要性 🌈 多通道卷…