当前位置: 首页 > news >正文

#渗透测试#漏洞挖掘#红蓝攻防#js分析(上)

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。

目录

一、漏洞挖掘中的JS(JavaScript)分析概述

JS分析的重要性

JS分析的方法

静态分析

动态分析

JS分析的注意事项

(一)常见的与JS相关的漏洞类型

(二)JS分析在漏洞挖掘中的重要性

 二、JavaScript 断点调试

设置断点的方法

手动设置断点

使用 debugger 关键字

调试工具的使用

实际应用案例

 


一、漏洞挖掘中的JS(JavaScript)分析概述

在漏洞挖掘过程中,对JavaScript的分析具有重要意义。JavaScript在现代Web应用中广泛使用,许多交互功能和业务逻辑都依赖于它,因此其中可能存在多种漏洞。

JavaScript (JS) 是一种广泛使用的编程语言,主要用于创建动态和交互性的网页内容。随着Web技术的发展,JS的应用范围不断扩大,不仅限于浏览器环境,还扩展到了服务器端(如Node.js )。因此,对JS进行分析变得尤为重要,特别是在漏洞挖掘和安全性评估方面。

JS分析的重要性

  1. 安全性评估:JS代码中可能存在各种安全漏洞,如跨站脚本攻击(XSS)、模板注入、逻辑错误等。通过对JS代码进行详细分析,可以发现这些潜在的安全风险,从而采取相应的措施进行修复。
  2. 性能优化:JS代码的执行效率直接影响网页的加载速度和用户体验。通过分析JS代码,可以找出性能瓶颈,优化代码结构和算法,提高网页的响应速度。
  3. 功能验证:在开发过程中,需要确保JS代码实现的功能符合预期。通过对JS代码进行分析和测试,可以验证代码的正确性和稳定性,减少BUG的发生。

JS分析的方法

静态分析

静态分析是指在不执行代码的情况下,通过检查代码的语法、结构和逻辑来发现问题。常用的方法包括:

  • 代码审查:人工阅读代码,检查是否存在潜在的安全风险、性能问题或逻辑错误。例如,检查是否有未定义变量的使用、可疑的函数调用等。
  • 工具辅助:使用静态分析工具(如ESLint、JSHint等)对代码进行自动检查。这些工具可以根据预设的规则对代码进行扫描,发现潜在的问题并给出修复建议。

动态分析

动态分析是指在代码执行的过程中,通过监控和调试来发现问题。常用的方法包括:

  • 调试工具:使用浏览器内置的开发者工具(如Chrome DevTools)或第三方调试工具(如Node.js 的调试器)来监控代码的执行过程。可以设置断点、查看变量值、跟踪函数调用等,帮助定位问题所在。
  • Fuzzing测试:向JS代码输入大量随机或半随机的数据,观察代码的反应,看是否会导致程序崩溃、异常行为或产生安全漏洞。这种方法特别适用于发现边界情况下的问题。

JS分析的注意事项

  1. 关注数据流:在分析JS代码时,需要特别关注数据的流向,特别是从外部输入到内部处理的过程。任何未经过滤或验证的外部输入都可能是潜在的安全风险。
  2. 考虑环境差异:JS代码可能在不同的环境中运行(如不同的浏览器、Node.js 等),需要考虑环境差异对代码执行的影响。例如,某些浏览器可能不支持某些JS特性,或者对某些API的实现有所不同。
  3. 持续更新知识:JS技术和生态系统不断发展,新的特性和工具不断涌现。需要持续关注最新的发展趋势,更新自己的知识和技能,以便更好地进行JS分析。

通过对JS代码进行详细的分析,可以发现潜在的安全风险、性能问题和逻辑错误,从而提高代码的质量和安全性。

(一)常见的与JS相关的漏洞类型

  • 跨站脚本攻击(XSS)漏洞
    • 如果在JavaScript代码中对用户输入未进行充分的过滤和转义,就可能导致XSS漏洞。例如,当将用户输入直接嵌入到HTML页面中而不做处理时,攻击者可以注入恶意脚本,这些脚本能够在其他用户浏览该页面时执行,从而窃取用户信息或执行其他恶意操作。在分析JS代码时,需要关注从外部获取数据(如用户输入、网络请求数据等)并在页面上渲染的部分,查看是否存在潜在的XSS风险。
  • 模板注入漏洞
    • 像AngularJS这样的前端框架,若在模板处理中存在缺陷,可能会引发模板注入漏洞。如在对模板表达式的解析过程中,如果对输入的验证和安全检查不严格,攻击者可能构造恶意的模板表达式来执行未授权的代码。分析时要特别留意模板表达式的构建、解析以及安全限制相关的代码部分,例如AngularJS中的安全沙箱机制相关代码,如果存在绕过这些安全机制的可能,就可能存在漏洞。

(二)JS分析在漏洞挖掘中的重要性

  • 发现隐藏的逻辑漏洞:JavaScript常常包含大量的业务逻辑,如用户身份验证、权限管理、数据处理等逻辑。通过分析JS代码,可以发现其中存在的逻辑错误,例如权限校验不严格导致的越权访问漏洞。例如,在某些应用中,可能通过JS代码来判断用户权限,若逻辑编写有误,攻击者可能通过篡改相关的JS变量或者函数调用,绕过权限检查,访问到未经授权的资源。
  • 辅助挖掘其他类型漏洞:很多时候,JS代码与后端服务交互,分析JS可以帮助找到如SQL注入、命令执行等漏洞的入口。因为JS可能会构造发送到后端的请求,其中包含的数据可能被恶意构造从而攻击后端服务。例如,在构建SQL查询语句的JS函数中,如果没有对用户输入进行严格的过滤,就可能将恶意输入传递到后端,引发SQL注入漏洞。

 二、JavaScript 断点调试

在JavaScript开发过程中,断点调试是一种非常有效的调试方法。它允许开发者在代码执行到特定行时暂停,从而检查变量的值、程序的状态以及执行路径。以下是关于如何在JavaScript中使用断点进行调试的详细介绍。

设置断点的方法

手动设置断点

在现代浏览器(如Chrome、Firefox等)中,开发者工具提供了手动设置断点的功能。具体步骤如下:

  1. 打开开发者工具:通常可以通过按下 F12 或者右键点击页面并选择“检查”来打开。
  2. 选择“Sources”选项卡:在这个选项卡中,你可以看到当前页面的所有JavaScript文件。
  3. 找到需要调试的文件:在文件列表中找到你想要调试的JavaScript文件。
  4. 设置断点:点击代码行号的左侧,你会看到一个红色的小圆点出现,这表示已经成功设置了断点。

使用 debugger 关键字

除了手动设置断点外,还可以在代码中使用 debugger 关键字来设置断点。当代码执行到这一行时,会自动暂停,进入调试模式。例如:

function myFunction() {debugger; // 设置断点 let x = 1;let y = 2;return x + y;
}

调试工具的使用

一旦设置了断点,你就可以开始调试了。以下是一些常用的调试工具和操作:

  • 暂停/恢复脚本执行:通常可以通过点击开发者工具中的暂停按钮来暂停或恢复脚本的执行。
  • 单步执行:可以逐行执行代码,查看每一步的变化。通常有三种单步执行方式:
    • Step Over:执行下一行代码,但不进入函数内部。
    • Step Into:进入函数内部,逐行执行函数代码。
    • Step Out:跳出当前函数,返回到调用该函数的代码行。
  • 查看变量值:在调试过程中,可以将鼠标悬停在变量上,查看其当前值。此外,还可以在“Scope”面板中查看当前作用域内的所有变量及其值。
  • 控制台:可以在控制台中执行任意JavaScript代码,查看结果。这对于测试和验证某些假设非常有用。

实际应用案例

假设你有一个简单的投票功能,代码如下:

function votePost(postId, voteType) {let url = `/api/posts/${postId}/vote`;let data = { type: voteType };fetch(url, {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify(data) }).then(response => response.json()) .then(result => {console.log('Vote  successful:', result);}).catch(error => {console.error('Error  voting:', error);});
}

如果你想调试这个函数,可以在 fetch 调用之前设置一个断点,然后调用 votePost 函数。这样,你可以在暂停状态下检查 urldata 的值,确保它们是正确的。接着,你可以单步执行 fetch 调用,查看网络请求的结果,确保投票操作成功执行。

相关文章:

#渗透测试#漏洞挖掘#红蓝攻防#js分析(上)

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...

数智读书笔记系列006 协同进化:人类与机器融合的未来

书名:协同进化:人类与机器融合的未来 作者:[美]爱德华阿什福德李 译者:李杨 出版时间:2022-06-01 ISBN:9787521741476 中信出版集团制作发行 爱德华・阿什福德・李(Edward Ashford Lee)是一位在计算机科学与工程领域颇具影响力的学者&am…...

操作系统(7)处理机调度

前言 操作系统中的处理机调度是一个核心概念,它涉及如何从就绪队列中选择进程并将处理机分配给它以运行,从而实现进程的并发执行。 一、调度的层次 高级调度(作业调度): 调度对象:作业(包含程序…...

folly之侵入式链表

侵入式链表 侵入式链表(Intrusive Linked List)是一种数据结构,它的节点不是通过包含链表节点的对象来实现的(像非侵入式链表那样),而是通过在节点对象中直接包含指向其他节点的指针来实现的。这意味着链表节点对象本身需要被修改以包含指向链表其他部分的指针。 直接上…...

GPT-5 训练遇阻:预期目标难达成与交付延期的深度剖析

# GPT-5 训练遇阻:预期目标难达成与交付延期的深度剖析 近期,GPT-5 的训练进展引发了广泛关注与诸多讨论,令人遗憾的是,其训练并未达到预期目标,且难以在规定时间内交付。这一状况不仅让期待它的人们大感意外&#xf…...

C缺陷与陷阱 — 3 深入理解表达式

目录 1 表达式的运算次序 1.1 自增或自减操作符 1.2 函数参数 1.3 函数指针 1.4 函数调用 1.5 嵌套赋值语句 2 函数调用不作为函数参数 3 赋值语句的谨慎使用 1 表达式的运算次序 除了少数操作符(函数调用操作符 ( )、&&、| |、? : 和 ,&#xff…...

Linux常用指令-----中

Linux常用指令----上 Linux常用指令----下 Linux系列 文章目录 Linux系列前言一、man指令(重要)二、cp指令(重要)三、echo指令四、cat指令五、mv指令六、which指令七、alias指令总结 前言 接下来我们介绍的指令是承接上篇&#…...

k8s 部署方式kustomization和helm的区别

Kustomize 和 Helm 是 Kubernetes 中两种流行的配置管理工具,它们都用于管理 Kubernetes 资源,但它们的设计理念、功能和适用场景有所不同。以下是两者的详细对比: 1. 基本概念 Kustomize 功能:原生于 Kubernetes 的工具&#x…...

Alogrithm:骑士走棋盘

1. 说明 骑士旅游(Knights tour)在十八世纪初倍受数学家与拼图迷的注意,它什么时候被提出已不可考,骑士的走法为西洋棋的走法,骑士可以由任一个位置出发,它要如何走完所有的位置? 2. 解法 骑士旅…...

Oracle 与 达梦 数据库 对比

当尝试安装了达梦数据库后,发现达梦真的和Oracle数据库太像了,甚至很多语法都相同。 比如:Oracle登录数据库采用sqlplus,达梦采用disql。 比如查看数据视图:达梦和Oracle都有 v$instance、v$database、dba_users等&a…...

[COLM 2024] V-STaR: Training Verifiers for Self-Taught Reasoners

本文是对 STaR 的改进方法,COLM 是 Conference On Language Models,大模型领域新出的会议,在国际上很知名,不过目前还没有被列入 ccf list(新会议一般不会列入);作者来自高校、微软研究院和 Goo…...

【Python】使用Selenium的find_element模块获取网页上的大段文字和表格的方法(建议收藏!)

发现了一个使用Selenium的find_element模块,快速获取文字和表格的方法,很实在,以后爬网的时候,就不用beautifulSoup 和 pandas的read_html 混起来用了! 文字部分:实现网络节点下,某个节点下的其…...

蓝桥杯刷题——day4

蓝桥杯刷题——day4 题目一题干题目解析代码 题目二题干题目解析代码 题目一 题干 小蓝和朋友们在玩一个报数游戏。由于今年是2024 年,他们决定要从小到大轮流报出是20或24倍数的正整数。前10个被报出的数是:20,24,40,48,60,72,80,96,100,120。请问第2…...

内网是如何访问到互联网(H3C源NAT)

H3C设备NAPT配置 直接打开29篇的拓扑,之前都配置好了 「模拟器、工具合集」复制整段内容 链接:https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab7ulgil 现在是出口路由器可以直接访问61.128.1.1,下面的终端访问不了,需要做NAPT源…...

源码分析之Openlayers中的Zoom缩放控件

概述 放大或缩小是地图中最基本的功能,本文主要介绍分析 Openlayers 中Zoom缩放控件的源码实现。 源码分析 Zoom控件继承Control类,关于Control类,可以参考这篇文章源码分析之Openlayers中的控件篇Control基类介绍 如果直接实例化Zoom类&…...

k8s的ConfigMap是什么, 为什么设计ConfigMap, 如何使用ConfigMap

ConfigMap简介, 为什么设计ConfigMap 在k8s中, ConfigMap是一种API对象, 用于将非机密的配置数据存储到键值对中。 Configmap作用是, 把配置数据从应用代码中分隔开, 让镜像和配置文件解耦,实现了镜像的可移植性。 举例: 我有一个Squid(正向代理)的Pod…...

fiddler设置抓取https,还抓取不到https如何解决?

一、清楚 C:\Users\Admin\AppData\Roaming\Microsoft\Crypto\RSA 目录下所有文件(首次安装fiddler请忽略) 二、清除电脑上的根证书,WINR快捷键,输入:certmgr.msc, 然后回车,查找所有fiddler证书…...

Python高性能web框架-FastApi教程:(1)创建一个简单的FastApi

(1)创建一个简单的FastApi 1. 导入必要的库 from fastapi import FastAPI import uvicornFastAPI 是一个用于构建现代、快速(高性能)的Web API的Python框架。uvicorn 是一个ASGI服务器,用于运行异步的Python Web应用…...

Django基础之模板

一.前言 前面我们讲了视图,我们今天来讲一下模板,模板其实也就是视图中render返回的html进行的渲染,然后展示到浏览器页面上去,那我们今天就来和大家来说一下模板的基本用法 二.寻找html模板 这个也就是我们前面说了的找html&a…...

RabbitMQ Work Queues (工作队列模式) 使用案例

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:RabbitMQ 📚本系列文章为个人学…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

Linux --进程控制

本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...