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

文章目录

  • 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(指纹)

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux SH脚本】LinuxCheck 应急检查信息脚本

LinuxCheck 1.下载地址 【Linux SH脚本】LinuxCheck 应急检查信息脚本 2.简介 LinuxCheck 是一个开源的自动化检查脚本,旨在快速检测 Linux 系统的安全配置和潜在问题。它支持多种发行版,能够扫描并生成详细的报告,涵盖用户管理、权限配置…

JaxaFx学习(一)

目录: (1)基本结构 (2)Application (3)Stage窗口显示 (4)Scene场景切换 (5)UI控件通用属性 (6)UI控件属性绑定很属性…

悬赏任务源码(悬赏发布web+APP+小程序)开发附源码

悬赏任务源码是指一个软件或网站的源代码,用于实现悬赏任务的功能。悬赏任务是指发布方提供一定的奖励,希望能够找到解决特定问题或完成特定任务的人。悬赏任务源码通常包括任务发布、任务接受、任务完成和奖励发放等功能的实现。搭建悬赏任务源码是一个…

Java集合操作中的包含性判断:深入探讨List.contains()方法

文章目录 Java集合操作中的包含性判断:深入探讨List.contains()方法问题分析与解答1. 为什么list.contains(filterValueList)返回false?2. 正确的实现方法方法一:使用containsAll()方法二:Stream流操作方法三:传统循环…

帆软的无数据展示方案

文章目录 需求描述第一步、设置控件第二步、设置数据集优化改进 在日常工作中,使用到帆软报表工具,以下记录日常使用的过程, 需求描述 用帆软报表展示销量的信息,选择不同的订单状态,展示其订单数和总金额。 第一步、…

ubuntu20.04安装qt creator

以上三种,选择其一安装即可 回答1: 您可以按照以下步骤在ubuntu 20.04上安装Qt Creator: 打开终端并输入以下命令以更新软件包列表: sudo apt update 安装Qt Creator和Qt库: sudo apt install qtcreator qt5-def…

MySQL系列之数据类型(String)

导览 前言一、字符串类型知多少1. 类型说明2. 字符和字节的转换 二、字符串类型的异同1. CHAR & VARCHAR2. BINARY & VARBINARY3. BLOB & TEXT4. ENUM & SET 结语精彩回放 前言 MySQL数据类型第三弹闪亮登场,欢迎关注O。 本篇博主开始谈谈MySQL是如…

linux网络编程 | c | select实现多路IO转接服务器

poll实现多路IO转接服务器 基于该视频完成 04-poll函数实现服务器_哔哩哔哩_bilibili 通过响应式–多路IO转接实现 要求:能看懂看,看不懂也没啥大事,现在基本都用epoll代替了 大家看视频思路吧,代码就是从讲义里面copy了一份…

数组专题leetcode

链表适合插入、删除,时间复杂度 O(1) 数组是适合查找操作,但是查找的时间复杂度并不为 O(1)。即便是排好序的数组,你用二分查找,时间复杂度也是 O(logn) 数组:内存连续的存储相同类型 【数组插入】: 如果在数组的末…

开源 AI 智能名片 S2B2C 商城小程序对私域流量运营的全方位助力

在当今竞争激烈的商业环境中,私域流量运营已成为企业实现可持续发展和提升竞争力的关键策略之一。开源 AI 智能名片 S2B2C 商城小程序凭借其独特的功能与特性,从多个维度为私域流量运营提供了强有力的支持与推动,以下将详细阐述其在各个方面的…

nginx中的root和alias的区别

alias 在E:\\test\\目录下创建一个index.html文件 在nginx.conf文件配置alias,路径填写为绝对路径,但是要注意,这里结尾是文件夹的名字 然后下面的/aa/ 是随便起的名字,也不是文件夹的名字,在浏览器访问的使用的 在浏览器使用 …

MySQL之数据库三大范式

一、什么是范式? 范式是数据库遵循设计时遵循的一种规范,不同的规范要求遵循不同的范式。 (范式是具有最小冗余的表结构) 范式可以 提高数据的一致性和 减少数据冗余和 更新异常的问题 数据库有六种范式(1NF/2NF/3NF…

【昇腾】NPU ID:物理ID、逻辑ID、芯片映射关系

起因: https://www.hiascend.com/document/detail/zh/Atlas%20200I%20A2/23.0.0/re/npu/npusmi_013.html npu-smi info -l查询所有NPU设备: [naienotebook-npu-bd130045-55bbffd786-lr6t8 DCNN]$ npu-smi info -lTotal Count : 1NPU…

TcpServer 服务器优化之后,加了多线程,对心跳包进行优化

TcpServer 服务器优化之后&#xff0c;加了多线程&#xff0c;对心跳包进行优化 TcpServer.h #ifndef TCPSERVER_H #define TCPSERVER_H#include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <vector> #include <map> #…

ansible自动化运维(一)简介及清单,模块

相关文章ansible自动化运维&#xff08;二&#xff09;playbook模式详解-CSDN博客ansible自动化运维&#xff08;三&#xff09;jinja2模板&&roles角色管理-CSDN博客ansible自动化运维&#xff08;四&#xff09;运维实战-CSDN博客 ansible自动化运维工具 1.什么是自…

MATLAB四种逻辑运算

MATLAB中的四种逻辑运算包括逻辑与用&或 a n d 表示 ( 全为 1 时才为 1 &#xff0c;否则为 0 ) and表示(全为1时才为1&#xff0c;否则为0) and表示(全为1时才为1&#xff0c;否则为0)&#xff0c;逻辑或用|或 o r 表示 ( 有 1 就为 1 &#xff0c;都为 0 才为 0 ) or表示…

基于Spring Boot + Vue的摄影师分享交流社区的设计与实现

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

鸿蒙NEXT开发案例:世界时间表

【引言】 本案例将展示如何使用鸿蒙NEXT框架开发一个简单的世界时钟应用程序。该应用程序能够展示多个城市的当前时间&#xff0c;并支持搜索功能&#xff0c;方便用户快速查找所需城市的时间信息。在本文中&#xff0c;我们将详细介绍应用程序的实现思路&#xff0c;包括如何…

Windows如何安装Php 7.4

一、进入官网&#xff0c;选择其他版本 https://windows.php.net/download/ 二、配置环境变量 将解压后的php 路径在系统环境变量中配置一下 cmd 后输入 php-v

yosys内部数据结构

一、参考链接 1.Yosys内部结构doxygen文件 yosys-master: RTLIL Namespace Reference 2.yosys内部结构介绍 https://yosyshq.readthedocs.io/projects/yosys/en/docs-preview-cellhelp/yosys_internals/formats/rtlil_rep.html 二、概览 图 1 网表核心数据结构 如图 1所示…