渗透测试中的前端调试(上)

news2024/12/25 22:21:52

一、前言

前端调试是安全测试的重要组成部分。它能够帮助我们掌握网页的运行原理,包括js脚本的逻辑、加解密的方法、网络请求的参数等。利用这些信息,我们就可以更准确地发现网站的漏洞,制定出有效的攻击策略。前端知识对于安全来说,不但可以提高测试效率,还可以拓宽测试思路。

以下的一个案例是我在测试一个后台管理系统时遇到的问题,本来在登录页面通过js已经发现了接口和字段,但是请求的时候发现不是未授权漏洞,但是字段只有新密码和用户名,那么这个大概率是存在漏洞的。

二、正文

本次为授权测试,客户有提供账号密码。在后台的修改密码处:

ef52f1bb0586a7ce3f4a649adc0af83e.png

1、JavaScript分析

当我输入正确密码时,又消失,说明存在校验。要么后端校验,要么前端校验。通过前面登录前的js内容,大致可以猜到这个就是前端校验。

我使用burp进行抓取数据包,发现没有请求通过:

5f562b66beb86b0cbc15f5525b13cbf4.png

说明大概率前端校验(也有可能是抓不到,但是概率很小)接下来就是要分析前端js了。这边我主要分析的是文本框的“与初始密码不一致”这个提示信息的判断逻辑:

我这边分析主要有两种方法:

①事件监听器:

通过事件监听器去找对应的js事件,通过正向去查看js,跟着对应的函数一层一层进行代码审计:

fe5ce4ae786ea93a1dbd3f2324c0521d.png

d3fc54e52b524bd1b0ac0aa1588c0e7f.png

但是通过正向找过去,发现是经过多层调用的。且所有代码经过高度压缩混淆。

这时候还可以通过其他的按钮去找,大概率处理逻辑的js都是在一起的。当然只是可能。

找到提交按钮。

62737b8e2feb45519e47c1a9d16679cb.png

点击是会报错的。查看下这个提交的逻辑:

d5f6727664e914e39ddbea56b840d858.png

找到submit,去查看调用的js代码:

fc0ba4f09a1d950a3faeab0fb6ea4eb0.png

很不幸,还是这个混淆过的看不懂的js。按住ctrl还进不去函数,不知道为什么。

②直接搜对应的关键字,去js里面翻

这个方法应该是大家比较常用的方法了。直接搜索关键字,比如加解密就直接搜索encrypt,一般都有效。

比如这边,可以直接搜索报错信息:与初始密码不一致:

ede6c6c7db26f93f0b862578ff268e5f.png

cd65c19f5b48538392860259c791cf62.png

找过去都是0。这时候就应该考虑,他是否有可能保存在css里面,或者使用urlencode或者Unicode编码。

(PS:因为没有对于后端请求,我们就不做从后端响应的情况假设。不然正常的字符串在前端找不到的情况下,有可能是后端返回的。)

先把这些字符转为Unicode编码查看。作为字符去查询的时候,建议不要全部字符去查询,因为有时候他可能会把对应的字符串分开放,或者做拼接。使用可以直接搜索比如不容易重复的几个关键字。比如这边的“一致”。

2eb6b2508a2950e9e742cebd9ded7faa.png

对于搜索,可以把js和html页面都代理从burp出去,然后使用burp自带的搜索,可能会比较方便。我这边就是采用这种方法进行查询:

很幸运,找到了!

function At(n, o) {
            1 & n && (t.TgZ(0, "mat-hint"),
            t._uU(1, "\u4e0e\u521d\u59cb\u5bc6\u7801\u4e0d\u4e00\u81f4"),
            t.qZA())
        }
        function bt(n, o) {
            1 & n && (t.TgZ(0, "mat-hint"),
            t._uU(1, "\u4e0e\u8bbe\u7f6e\u7684\u5bc6\u7801\u4e0d\u4e00\u81f4"),
            t.qZA())
        }

可以看到js高度混淆。

对于审计很难。这边我们只需要查看是谁调用了这个函数,网上找这个逻辑即可。

有几种方法可以找到,这边借用new bing的回答:

您好,这是Bing。

根据我的搜索结果,有几种方法可以在Chrome中实现这个功能。我将为您介绍其中的一些方法:

1、使用Chrome开发者工具的搜索功能¹。您可以按下`ctrl + shift + F`(Windows)或`cmd + optn + F`(macOS)打开一个跨所有脚本的搜索窗口。然后,您可以勾选“正则表达式”复选框,并搜索函数的名称和定义方式。例如,如果您想要查找名为`foo`的函数,您可以搜索`foo\s*=\s*function`(表示`foo = function`之间有任意数量的空格)或者`function\s*foo\s*\(`(表示`function foo (`之间有任意数量的空格)。搜索结果将显示函数定义所在的脚本和位置,您可以点击它们跳转到相应的代码行。

2、使用Chrome开发者工具的调用栈功能。如果您想要查找一个函数是从哪里被调用的,您可以在函数体内部添加一个断点,然后运行代码。当代码执行到断点处时,开发者工具会暂停,并显示当前的调用栈。您可以在调用栈面板中查看函数被调用的顺序和位置,以及每个函数的参数和局部变量。

3、使用JavaScript代码获取函数的调用者³。如果您想要在代码中获取一个函数是从哪里被调用的,您可以使用`arguments.callee.caller`属性来访问当前函数的调用者。这个属性会返回一个函数对象,您可以使用它的`name`属性来获取函数的名称,或者使用它的`toString()`方法来获取函数的源代码。如果当前函数是从全局作用域被调用的,那么这个属性会返回`null`,您可以使用条件判断来处理这种情况。

我这边采用了第二点,可以在这边看到栈的调用。

996b1f8dc6dadab5d6f2c544dcaaf6c4.png

成功找到密码判断点:

24a602bb32366f5645c133057256158a.png

接下来就可以看你想改什么就改什么了。

2、JavaScript本地修改调试

找到对应函数后,接下来就是修改js里面的内容了。如果想修改js,在前端调试,需要在替换里面添加一个文件夹,然后在js编辑界面保存即可。保存成功会有紫色的小点点:

7e24b2e9c6c158768a9ccfa6add61f86.png

f54b957c5d97887d96d750bc88cbe430.png

在js里面添加一个console.log,测试调试。触发该函数后,成功打印:

acdc0afdcf62fe7183fd66d9f63b2c82.png

后续如果想通过前端绕过,可以同样去调试提交按钮。

三、结尾

可能有些人会说,这么麻烦去绕过做什么?本文只是讲解一些调试思路,和本次的漏洞没有太大关系,只是作为案例讲解。我本身不是做前端出身,主做分享使用。很多方面的知识我也是自己有接触到才去学习,可能对于一些大佬来说,这些都是很基础,勿喷。给自己挖个坑,如果本文反响不错的话,后续给大家分享一些遇到js前端加解密的web站点,该怎么去进行调试和测试。

原创稿件征集

征集原创技术文章中,欢迎投递

投稿邮箱:edu@antvsion.com

文章类型:黑客极客技术、信息安全热点安全研究分析等安全相关

通过审核并发布能收获200-800元不等的稿酬。

更多详情,点我查看!

1184c3cf3cb254287f2a4d678427d3cf.gif

开学大狂欢,戳“阅读原文”

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

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

相关文章

私域运营丨用户运营SOP,批量成交私域新老客户!

私域运营的重点内容除了社群外,还包括1对1的沟通成交。特别是针对价格高、决策成本高、需要定制化和深度服务、具有私密性的产品,非常适合进行1对1的成交。 通过建立标准化的用户运营SOP,可以更科学地管理私域客户,并根据客户所处…

AO天鹰优化算法|含源码(元启发式算法)|跑23个经典函数(含源码)

-------往期目录------ 1、灰狼优化算法 文章目录 天鹰优化器一、第一种搜索方法二、第二种搜素方法三、第三种搜素方法四、第四种搜索方法 代码实现 天鹰优化器 Aquila Optimizer(AO),灵感来自Aquila在捕捉猎物过程中的自然界行为。因此&a…

华为云云耀云服务器L实例评测|云耀云服务器L实例部署HertzBeat实时监控系统

华为云云耀云服务器L实例评测|云耀云服务器L实例部署HertzBeat实时监控系统 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例特点 二、HertzBeat介绍2.1 HertzBeat简介2.2 HertzBeat特点 三、本次实践介绍3.1 本次实践简介3.2 本次环境规…

Activiti7工作流 二【Activiti7入门、Activiti7进阶】

文章目录 六、Activiti7入门6.1 业务流程建模6.1.1 绘制流程图6.1.2 指定任务负责人6.1.3 生成png格式流程图 6.2 部署流程定义6.3 启动流程实例6.4 任务查询6.5 任务处理6.6 添加审批意见6.6 查看历史审批 七、Activiti7进阶7.1 流程定义相关7.1.1 流程定义查询7.1.2 流程资源…

基于Spring Boot的体育馆管理系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 本基于Spring Boot的海滨体育馆管理系统设计目标是实现海滨体育馆的信息化管理,提高管理效率,使得海滨体育馆管理工作规范化、高效化。 本文重…

fonts什么文件夹可以删除吗?fonts文件夹删除了怎么恢复

在电脑上,fonts文件夹是存放字体文件的目录之一。尽管有时可能考虑删除该文件夹以节省硬盘空间或出于其他原因,但删除该文件夹可能会导致系统字体问题,影响用户的正常使用。因此,在删除之前需要考虑是否可以删除fonts文件夹&#…

golang优先级坑

看如下代码,我本以为a1, a2是相同的 package mainimport "fmt"func main() {b, c, d : 1, 0, 1a1 : b ^ c&(^d) // 1 ^a2 : c ^ b&(^d) // 0 ^fmt.Println(a1, a2) // 1 0 }但结果却是不同的,在golang中&的优先级^和|…

Edge 浏览器『版本回退』和『关闭更新』

前言 最近 Edge 浏览器又更新了,给整体浏览器页面布局进行大改动,之前苗条的标签页和收藏夹栏瞬间变得臃肿了,我实在无法忍受这种布局,所以我索性直接进行版本回退和设置永久关闭更新,详细步骤请看下文 Edge 浏览器版…

【新版】系统架构设计师 - 案例分析 - 架构设计<架构风格和质量属性>

个人总结,仅供参考,欢迎加好友一起讨论 文章目录 架构 - 案例分析 - 架构设计<架构风格和质量属性>例题1例题2例题3例题4例题5例题6 架构 - 案例分析 - 架构设计<架构风格和质量属性> 例题1 某软件公司为…

大数据开发工程师面试题

一、选择题 1、哪个程序负责HDFS数据存储? Datanode 2、HDFS中的block默认保存几份? 默认3份 3、哪个程序通常与NameNode在一个节点启动? Jobtracker 4、HDFS默认Block Size是多少? 64MB 5、什么通常是集群的最主要瓶颈 …

typedef与define定义类型

#define _CRT_SECURE_NO_WARNINGS #define DataType2 int* #include<iostream> typedef int* DataType1; int main() {DataType1 a, b;DataType2 c, d;printf("%d %d %d %d", sizeof(a), sizeof(b), sizeof(c), sizeof(d));return 0; } 输出结果如何&#xf…

MySQL集群高可用架构之MMM

一、MMM概述 1.1 MMM 简介 MMM&#xff08;Master-Master replication manager for MvSQL&#xff0c;MySQL主主复制管理器&#xff09;是一套支持双主故障切换和双主日常管理的脚本程序。 MMM 使用 Perl 语言开发&#xff0c;主要用来监控和管理 MySQL Master-Master &#…

免费玩云上大数据--海汼部落实验室

玩大数据遇到的问题 大家好&#xff0c;这次分享一个免费的大数据部署工具&#xff0c;并非是给人家打广告&#xff0c;试过了真的爽。 学习大数据的人都知道&#xff0c;如果用VMware模拟Linux搭建大数据集群的话我们需要很高的内存和硬盘内存&#xff0c;随随便便跑一下mapre…

机器学习笔记:adaBoost

1 介绍 AdaBoost&#xff08;Adaptive Boosting&#xff09;是一种集成学习方法&#xff0c;它的目标是将多个弱分类器组合成一个强分类器 通过反复修改训练数据的权重&#xff0c;使得之前分类错误的样本在后续的分类器中得到更多的关注每一轮中&#xff0c;都会增加一个新的…

eCognition易康操作教程(一):如何利用eCognition易康软件进行影像分割之棋盘分割、四叉树分割、光谱差异分割

一、新建工程 使用eCognition新建工程ImageSegmentation&#xff0c;加载影像数据&#xff0c;并编辑图层名称&#xff0c;将Layer 1、Layer 2、Layer 3、Layer 4的 Layer Alias 分别改为 Blue、Green、Red、如图1-1&#xff0c;图1-2所示&#xff1a; 图 1-1 图 1-2 设置加载…

十三、直流电机驱动

十三、直流电机驱动 介绍直流电机调数 介绍 PWM PWM是脉冲宽度调制&#xff0c;在具有惯性的系统中&#xff0c;可以通过对一系列脉冲的宽度进行调制&#xff0c;等效的获取需要的模拟参量&#xff0c;常应用于电机控速、开关电源等领域。通过改变一个周期信号的占空比&#xf…

为什么做测试既要懂开发又要懂产品?这3点看完,你就懂了!

本篇讨论的是什么呢&#xff1f;何谓一个真正的测试&#xff1f; 纯粹是个人的理解&#xff0c;仅供参考。 ● 论一个真正的软件测试工程师 ● 自动化在项目中的应用 ● 性能专项在项目中的应用 半个产品、半个开发 有人觉得这个标题有点讽刺&#xff0c;真正的测试&…

关于RestTemplate postForObject方法请求 服务端Controller接受不到值的问题解决

本文适合有SSM框架基础和springboot开发基础的同学查阅 这里postForObject 方法有三个参数&#xff0c;没有使用四个参数的。 restTemplate.postForObject(String url, Object request, Class<T> responseType); 1.String url > 顾名思义 这个参数是请求的url路径。…

Spring面试题10:Spring的XMLBeanFactory怎么使用

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring的XMLBeanFactory怎么使用 XmlBeanFactory是Spring框架中的一个实现类,它是BeanFactory接口的一个具体实现。XmlBeanFactory的主要作用是通…

【C语言】指针经典笔试题(上)

C语言的一大重头戏就是指针。 对于指针有一些认识&#xff1a; 1.指针是存放变量的地址&#xff0c;一般说的指针和指针变量是一个概念。 2.地址的单位是字节&#xff0c;大小在不同编译器环境下有所不同&#xff0c;32位机器是4个字节&#xff0c;64位机器是8个字节。 3.数组名…