漏洞挖掘JS构造新手向

前置思路文章

JS逆向混淆前端对抗

油猴JS逆向插件

JS加解密之mitmproxy工具联动Burp

JS挖掘基础

伪协议

JavaScript伪协议是一种在浏览器中模拟网络请求的方法。它使用window.XMLHttpRequest对象或fetch()方法来模拟发送HTTP请求,而不是通过实际的网络请求来获取数据。

例如,以下代码使用fetch()方法模拟发送一个GET请求到example.com,并处理返回的数据

fetch('https://example.com').then(response => response.text()).then(data => console.log(data));

在这个例子中,我们使用fetch()方法发送一个GET请求到https://example.com,然后使用.text()方法获取响应的文本内容,最后使用console.log()方法将响应的内容输出到控制台。

需要注意的是,虽然使用JavaScript伪协议可以模拟网络请求,但它并不能完全取代实际的网络请求,因为它的性能和可靠性都比实际的网络请求要差。此外,使用JavaScript伪协议可能会导致一些安全问题,因为它可以被恶意代码利用来获取敏感信息

XSS利用JS变量提升

XSS案例

JavaScript 中的变量提升是指在代码执行过程中,JavaScript 引擎会将变量声明提升到其作用域的顶部,但不会提升变量的赋值。这意味着您可以在变量声明之前访问变量,但变量的值将是 undefined


undefinedVar是个未命名的变量,如果我们直接使用的话会被变量未定义错误.但是如果我们在下面再次去使用这个变量并且去声明它赋值,那么上面的就不会报错了

下方代码前者是未定义就使用的,但下面还是正常的去声明使用了,整体并没有报错出现,这是因为变量提升的原因,把var``undefinedVar 提升到了顶部,最开头 所以往下的 undefinedVar = null 并不会报错

F12控制台参数

F12查看接口出参入参

F12数据包接口信息

Fkalis文章接口测试

获取接口信息

F12 打开控制台下方就是整体的数据,包括选择的接口,以Edge为例在网络选项中打开此页面,如果对响应头或者是请求头不明白直接ChatGPT审计就是

Fetch/XHR :

这个功能可以帮助开发人员分析和调试网络请求,包括请求的URL、请求方法、请求头、请求体、响应状态码、响应头、响应体等信息。通过查看Fetch/XHR选项中的请求和响应信息,开发人员可以快速定位网络请求的问题,例如请求失败、响应慢、响应数据异常等,其实也就是一个筛选器, 选项右边我们还可以只查看CSS JS这些

测试中接口地址响应后返回了相关的数据,那么我们就可以尝试对这个 /ums/ums/getRole 接口的getRole 参数进行Fuzz

观察数据包的请求和响应就可以确定这个接口获取请求是否存在漏洞

数据包:

POST /ums/ums/getRole HTTP/1.1
Host: user.xxxxxxx.sjtu.edu.cn
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Content-Length: 0
Origin: https://user.xxxxxxx.sjtu.edu.cn
Referer: https://user.xxxxxxx.sjtu.edu.cn/ums/user/index.html
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36
sec-ch-ua: "Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "macOS"

响应包:

HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Credentials: false
Access-Control-Allow-Headers: X-Requested-With,Content-Type
Access-Control-Allow-Methods: PUT,POST,GET,DELETE,OPTIONS
Access-Control-Allow-Origin: https://user.xxxxxxx.sjtu.edu.cn
Connection: keep-alive
Content-Type: application/json; charset=utf-8
Date: Tue, 07 Feb 2023 10:40:42 GMT
Etag: W/"4d4-d17bqK52VNY2JQ4ODTzgbhOimVQ"
Server: nginx
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Nginx-Debug-Variables: host:user.xxxxxxx.sjtu.edu.cn,request_uri:/ums/ums/getRole,
X-Powered-By: Express
X-Xss-Protection: 1; mode=block
Content-Length: 2721{"code": 100,"msg": "请求成功","extend": {"returnMsg": [{"roleId": "10","name": "用户联络员","energyValid": "0","imsValid": "0","meetingValid": "1","visitorValid": "1","limsValid": "1","param01": null,"param02": "1","param03": "3"},{"roleId": "11","name": "运行管理员","energyValid": "1","imsValid": "1","meetingValid": "1","visitorValid": "1","limsValid": "1","param01": null,"param02": "2","param03": "1"},{"roleId": "13","name": "系统管理员","energyValid": "1","imsValid": "1","meetingValid": "1","visitorValid": "1","limsValid": "1","param01": null,"param02": "3","param03": "1"},

请求标头可以获取到Cookie

查看入参

请求就是入参 响应就是出参,这里的入参格式有key-value格式也有json格式

关于二者区别

它们的区别在于数据的组织方式和传输效率

Key-value形式的数据是一种简单的数据组织方式,它由一系列键值对组成,每个键值对之间用特定的分隔符分隔。这种数据格式通常用于传输简单的数据,例如表单数据、查询参数等。Key-value形式的数据传输效率较高,因为数据量较小,传输速度较快

JSON格式的数据是一种轻量级的数据交换格式,它由一组键值对或数组组成,可以嵌套使用。JSON格式的数据通常用于传输复杂的数据结构,例如对象、数组等。JSON格式的数据传输效率较低,因为数据量较大,传输速度较慢。但JSON格式的数据具有良好的可读性和可扩展性,可以方便地进行解析和处理

选择何种数据格式取决于具体的应用场景和数据传输需求。如果需要传输简单的数据,可以选择key-value形式的数据;如果需要传输复杂的数据结构,可以选择JSON格式的数据

在负载这里看到查询字符串参数,[//]: # (不同浏览器看入参的选项不同 goole : 标头拉到最下方可以看到 Query String Parameters 这个就是入参数据, 火狐 : 有效载荷页面和Edge类似)就是入参数据并且可以查看请求源,它是拼接后的数据 下方拼接后为

positionId=644&queryWord=&articleId=0&adId=5518

查看出参

响应页面看出参数据…

查看Cookie数据格式

选择请求右侧Cookie它的组成其实就是一个个的 key 和 value

JS审计

JS文件可以看是否存在版本或者名称信息这样可以去网上找相关漏洞

手动搜索参数

控制台直接搜索这种api语句就可以找到不同的接口,获取到特殊的路径,获取其他的敏感字眼

Path
GET
POST
url
ajax
onBoardTabconfig.js   // 拼接全局配置文件

找到的是隐藏的接口 类似 api/login/name 拼接到主站域名中,普通的路由也就网站的路径,接口指后端中的函数,调用接口等于调用了后端某个函数功能实现增删改查等等

网站路径 = url = 目录 = 路由

如果拼接出来是空白的,就按照路径慢慢删掉,回到上级目录有的.net网站会有接口管理器,找到一个接口返回上级目录就可以看到所有接口,而且有的aspx接口是可以看到参数值的)

baidu.com/api/login/name

找到的是url 在浏览器执行即可 一般会得到JSON格式的数据

类似这种路径下存在参数,可以路径带参数构造

http://xx.xx.xx.xx /commonServletfromflag=queryWorkUserBySectionId&sectionId_search=1

控制台查看了一下 RPC函数的js源码,也算是一个审计js源码的小trickjs函数名+‘’ 会自动调用js函数对象的toString方法,从而输出对应的js函数的源码,避免了自己一步步从一堆源码里寻找这个函数

console.log(RPC+'')

审计源码

在控制台应用程序选项,拉到底部可以在这里看到这个页面所有的 JS脚本,一般 JS文件通常会报出 CMS版本 ,和一些验证判断响应值 有了CMS 可以尝试去网上找通杀Nday攻击,并且还有有其他注释没有来的及删除的信息,渗透测试的本质就是信息收集

在挖掘时别人能挖掘出水平越权垂直越权,是因为这个越权漏洞的传参值都是在接口中进行的,所以我们要在挖掘的时候利用Burp抓住每一个包 然后再去看Burp里面的http历史记录 查看接口信息

`Webpack`会包含很多接口信息

如果在站点页面是无法看见?id这个参数的,而你在burp历史包中即可以看见此参数,这个参数就是个人身份的参数

接使用浏览器的控制台中的网络即可查找,重发刷新页面就会再进行一次请求,如果再下方找到隐藏的身份参数后,讲 uid=xxx 修改为别人的数值 即是测试越权

Python解决JS加密

逆向出参数是由什么加密而来的,首尾加入了什么固定的字符串,加密几个参数就写一个方法解密出这些参数

import execjs
with open("",r) as  f   // 引入函数a = execjs.compile(f.read()) result1 =a.call("md5","")  // 对应函数 md5是函数名 后面是形参print(result1)

passwd是 保存明文密码的文件

反编译`js.map

反编译Webpakc js.map

提取WebPack打包站点接口

JSFuzz接口导致铭感信息泄露

Vue使用webpack(静态资源打包器)的时候,如果未进行正确配置,会产生一个js.map文件,而这个js.map可以通过工具来反编译还原Vue源代码,产生代码泄露,并且前后端分析网站前端使用Vue重点找xxx.app.js再从中提取新的接口

reverse-sourcemap --output-dir . xxx.js.map

数据包接口构造

前端JavaScript渗透测试步步为营

JSFuzz接口实现SSRF

JS更换请求方式构造

JSFuzz接口导致铭感信息泄露

JS拼接杂谈

fkalis关于JS研究

JS接口系列文章

Fuzz前置目录

JS找到的接口某些情况下不能直接访问, 前置或者还有一层目录,这个就需要我们去进行fuzz或者信息收集寻找接口间的共性再进行爆破,直接的话只能使用字典

/data/teach/hr/search?key= // 可疑接口,后面带入参数可疑搜索更多/data/teach/hr/search?key=1 2 3roleid  // 角色ID

构造接口

其实很好理解,如果网站功能点只能允许查看 info 那么在查询接口功能抓包,构造参数为删除delete,接口有的是主动构造有的是工具熊猫头或其他审计得到的接口,整理后GET``POS方法访问

api/info?id=1   // 正常查询接口api/delete?id=1  //   构造删除接口 /api/v1/api-docs //  尝试/api/v2/api-docs  /api/v3/api-docs------------------------------------------------------前置接口/user/saber 无法直接访问**api**/user/saber/  fuzz前置接口,递归扫描重要性就出现了

常见业务接口格式如果js文件中只有查询的接口,那么自己可以尝试一下构造添加、修改和删除接口

多观察接口,推测其功能,然后根据功能去FUZZ,毕竟你要实现一个web功能,基本都要有对应的增删改查接口

// 后台的模块的接口格式OST /PUT  /api/模块名  // 添加
POST /api/模块名/add   // 删除接口DELETE /api/模块名/id GET /api/模块名/del?id=POST /api/模块名/// 修改接口POST /api/模块名/modifyPOST /api/模块名/// 查询接口GET /api/模块名/list/api/模块名/all
查询(获取信息)
search list select query get find删除(删除某个数据)
del Delete编辑(更新某个信息)
Update Up edit Change添加(增加某个信息)
add create new

构造参数

JS寻找关键参数

应该如何寻找参数的蛛丝马迹

无论是熊猫头还是其他工具得到的接口其实是不完整的,直接拼接的话缺少参数是无法访问接口会报错,需要构造**参数,**如果我们直接去fuzz猜参数,那基本上是属于大海捞针,几乎不太可能成功。那这时候就需要去JS源码里面找一下它的调用代码,看看它是怎么请求的,都有什么参数

GET请求参数拼接到链接中,POST请求构造参数拼接到下方Body

构造JS文件

实战某金融SRC通过JS接口进入后台

当接口参数无法操作,信息收集只要少量JS文件既可以使用爆破模块对JS进行fuzz 如果响应了新的文件再从响应包中审计新的接口,案例见标题

实战FuzzJS文件

文章展示了针对古老的站点测试手段,野战和edu测试功能点无从下手的时候可以回来看看这篇文章看看有没有启发PHP/ASP.NET``fuzzjs 可以利用BP 配合字典直接开测,观察响应接口 文章推荐了FFUF工具操作 对与403页面尝试绕过和dr工具爆破

Fuzz爆破/接口路径

api接口猜测爆破

观察抓取到的数据包的接口,寻找共同函数的特征,爆破后面的数字或许会有未授权访问的接口或者功能可以先猜目录再猜参数网站就一个文件夹存放了很多的文件

/funtion123   
/fun2334  
/fun345

响应包出现我们不知道参数,第一先去JS中全局找这个参数看看有没有相似的路径拼接构造,有就拼;无则fuzz

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

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

相关文章

碰到这个问题请更新或重新安装fastapi版本

ValueError: too many values to unpack (expected 2) ERROR: Exception in ASGI application Traceback (most recent call last) File "/usr/local/lib/python3.8/site-packages… Ubuntu,容器中, 碰到上面这个问题,请更新fastapi的版…

微信小程序——编写一个表白墙小程序

一、前期准备 注册微信小程序账号 在微信公众平台上注册小程序账号,获取小程序的 AppID。 安装开发工具 下载并安装微信开发者工具,用于小程序的开发、调试和预览。 二、界面设计 首页 展示最新的表白内容列表,每条表白可以包括发布者昵称、…

⌈ 传知代码 ⌋ 无监督动画中关节动画的运动表示

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

开发规范 - mac系统1小时装机极速装机开发环境

idea 官网下载,然后想办法破解 idea必备配置 设置自动import IDEA插件安装 idea必备插件 maven helperlombokMybatisX jdk配置 jdk不用单配配置,在idea中,选择一个语言环境(jdk8/jdk11/jdk17…),然后默认下载j…

unity学习笔记-Text mesh Pro

Text mesh Pro组件 组件使用的大致流程细节导入之后字体没有显示可能一可能二 注意事项 好久没更了…最近在学习使用别人的框架进行开发,坑也不少,不过学习到了很多设计思维。 言归正传。忘了是什么是时候的版本开始,unity多了这个组件&#…

WPF入门_02依赖属性

1、依赖属性主要有以下三个优点 1)依赖属性加入了属性变化通知、限制、验证等功能。这样可以使我们更方便地实现应用,同时大大减少了代码量 2)节约内存:在WinForm中,每个UI控件的属性都赋予了初始值,这样每个相同的控件在内存中都会保存一份初始值。而WPF依赖属性很好地…

uiautomatorviewer安卓9以上正常使用及问题处理

一、安卓9以上使用uiautomatorviewer问题现象 打开Unexpected error while obtaining UI hierarchy 问题详情 Unexpected error while obtaining UI hierarchy java.lang.reflect.InvocationTargetException 二、问题处理 需要的是替换对应D:\software\android-sdk-windows…

python将照片集导出成视频

shigen坚持更新文章的博客写手,记录成长,分享认知,留住感动。个人IP:shigen 背景 一个安静的下午,看着电脑里乱七八糟的照片,有大有小,宽高不一,突然想找个方式把他们统一起来&…

PC企业微信自动回复,群发管理,定时发送,朋友圈

服务提供了丰富的API和SDK,可以在企微的功能之上进行应用开发和功能扩展 自建应用可以调用企微hook或协议提供的接口来实现数据交互,可以直接调用hook或协议接口提供的功能来进行消息的发送与接收、用户管理、应用管理等操作,通过接口可以实…

Vue前端预览docx文档

Vue前端预览docx文档 实现效果 vue代码 <el-dialog title"预览" :visible.sync"filePreview"><div ref"file"></div></el-dialog>引入依赖文件 官方文档地址 https://www.npmjs.com/package/docx-preview?activeTabre…

MacOS安装BurpSuite

文章目录 一、下载地址二、下载注册机三、安装教程四、启动burpsuit五、免责声明 一、下载地址 https://portswigger-cdn.net/burp/releases/download?productpro&version2024.7.1&typeMacOsx二、下载注册机 https://github.com/NepoloHebo/BurpSuite-BurpLoaderKey…

数据库中存储树状关系的数据

三张表的文字描述 表1&#xff1a;包含字段A1,字段A2,字段A3. 字段A1是主键 表2&#xff1a;包含字段B1&#xff0c;字段B2&#xff0c;字段A1 字段B1是主键&#xff0c;字段A1是其外键。 1个字段A1的值可以匹配多条表2的记录. 表3&#xff1a;包含字段C1&#xff0c;字段C2&am…

下午题数据库设计15分

一、考什么 题目会给场景&#xff0c;和数据库的设计过程&#xff0c;让你补充残缺的E-R图&#xff0c;关系模式&#xff0c;找主键外键。还有1-2分的随机题型。 二、答题技巧 熟练基本知识结合题干 三、例题

构建高效在线考试平台:Spring Boot与JavaWeb的融合

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于JavaWeb技术的在线考试系统设计与实现…

颜廷利:东方智慧的现代诠释者

人文公社 2024年10月21日 东方智者颜廷利, 哲学思想论古今, 和善互爱满天下, 无私奉献情意深… 在当代哲学与文化交融的浪潮中,颜廷利以其深邃的东方智慧和对古今思想的独到见解,成为了一位备受瞩目的思想家。他不仅倡导和谐共处、互爱互助的理念,更以自身的行动践行着无私…

Hi3061M——VL53L0X激光测距(IIC)(同样适用于其他MCU)2

目录 前言资源下载移植基本使用IO配置调用测量 总结 前言 昨晚太晚了&#xff0c;草草结束了上一篇&#xff0c;今天更新下半部分。 昨天已经讲了VL53L0X的使用流程&#xff0c;无非就是进行6步的效准初始化&#xff0c;然后配置下模式和时间&#xff0c;开始采样&#xff0c;…

Yolov10训练的餐盘菜品目标检测软件(包含源码及数据集)

本文摘要 摘要&#xff1a;本文主要使用YOLOV10深度学习框架自训练了一个“餐盘菜品目标检测模型”&#xff0c;基于此模型使用PYQT5实现了一款界面软件用于功能演示。让您可以更好的了解和学习&#xff0c;该软件支持图片、视频以及摄像头进行目标检测&#xff0c;本系统所涉…

【python】OpenCV—Fun Mirrors

文章目录 1、准备工作2、原理介绍3、代码实现4、效果展示5、参考 1、准备工作 pip install vacm2、原理介绍 在OpenCV中&#xff0c;VCAM 库是一个用于简化创建三维曲面、定义虚拟摄像机、设置参数以及进行投影任务的工具。它特别适用于实现如哈哈镜等图像变形效果。 一、VC…

AI自动生成PPT哪个软件好?智能生成PPT不再熬夜做课件

大概这世上&#xff0c;都是职场牛马对“PPT”这三个字母的头痛反应最大吧&#xff01; 是的&#xff0c;就连各个年级段的老师也是很头痛——愁着怎样能在排版整齐的情况下&#xff0c;将必考知识点都呈现在PPT每一张幻灯片页面里...... 近期打听到用人工智能生成ppt课件&am…

React 项目热更新失效问题的解决方案和产生的原因

背景和意义 在修复React项目热更新失效的问题时&#xff0c;经过一系列问题排查和依赖升级&#xff0c;最终成功修复了问题并为后续开发规避了类似的问题。 依赖升级 Vite版本升级 原React项目Vite版本升级到^4.4.5 Vite 4 在构建和开发服务器的性能上进行了优化&#xff…