JavaScript审计

article/2025/8/15 20:08:55

前言

Javascript (.js) 文件一般存储的是客户端代码,Javascript 文件可帮助网站执行某些功能,例如监视单击某个按钮的时间,或者当用户将鼠标移到图像上,甚至代表用户发出请求(例如检索信息)时。有时开发人员可以混淆他们的 javascript 代码,使人无法正常阅读,但是大多数类型的混淆是可以反混淆的;如果你是一个漏洞赏金猎人,你应该花一些时间从中寻找宝藏。如果运气好,可能会发现严重程度较高的漏洞。

怎么找js

第一种方法为手动找: 右键单击所在的页面并单击“查看源代码”(,然后开始在 HTML 中查找“.js” . 如果是手动,那么这是首选方法,因为您会注意到某些.js文件仅包含你所在的特定端点的代码,它可能包含你不知道的存在的新的 api 接口。

第二种方法: 如果使用的是Burp Suite专业版,在Target > sitemap下,右键点击感兴趣的站点,选择Engagement tools>Find scripts。使用此特性,你可以导出该应用程序中的所有脚本内容。

图片

图片第三种方法是: 使用英国著名白帽子tomnomnom的一个工具waybackurls:https://github.com/tomnomnom/waybackurls 这个工具的主要逻辑是可以让你在https://archive.org/web/(这个网站可以 理解为数字图书馆,你可以查找到相对应网站的所有历史网页)这个网站里面去查找某个目标网站的所有历史数据,使用方法:

webbackurls target.com | grep "\.js" | uniq |sort

使用Wayback Machine可能会导致误报,所以,在收集了JavaScript文件的url列表之后, 我们需要检查这个js文件是否真的还存在,可以使用curl快速检查服务器上的JavaScript文件的状态:

cat js_files_url_list.txt | parallel -j50 -q curl -w 'Status:%{http_code}\t Size:%{size_download}\t %{url_effective}\n' -o /dev/null -sk

图片

也可以使用其它现成的工具,例如:hakcheckurl 安装:go install github.com/hakluke/hakcheckurl@latest使用:cat lyftgalactic-js-urls.txt | hakcheckurl

图片当然还有其他的一些工具,这里简单列一下他们的链接,有兴趣的读者可以自行去研究研究:

https 😕/github.com/003random/getJS

https://github.com/jobertabma/relative-url-extractor

https://github.com/0xsha/GoLinkFinder gau - https://github.com/lc/gau

linkfinder - https://github.com/GerbenJavado/LinkFinder

getSrc - https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/getsrc.py

SecretFinder - https://github.com/m4ll0k/SecretFinder

antiburl - https://github.com/tomnomnom/hacks/tree/master/anti-burl

antiburl.py - https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/antiburl.py

ffuf - https://github.com/ffuf/ffuf

getJswords.py - https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/getjswords.py

availableForPurchase.py - https://raw.githubusercontent.com/m4ll0k/Bug-Bounty-Toolz/master/availableForPurchase.py

jsbeautify.py - https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/jsbeautify.py

collector.py - https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/collector.py

js美化

大多数时候,我们收集的JavaScript文件都是经过压缩、混淆的。

有很多工具可以压缩JavaScript。UglifyJS是一个压缩JS代码的工具,它也可以作为npm包使用 https://github.com/mishoo/UglifyJS

图片

也有很多工具可以解压缩js。例如JS Beautifier https://github.com/beautify-web/js-beautify

图片其他的相关工具如下:

https://beautifier.io/

https://github.com/geeksonsecurity/illuminatejs

https://github.com/mindedsecurity/JStillery

https://lelinhtinh.github.io/de4js/

js文件中需要去找的关键信息

js危险函数

1.将字符串当做代码去执行的三个函数

  eval("alert(1)")setTimeout("alert(1)",1000)//就是下面这么写Function("alert(1)")()

2.innerHTML函数

如果你发现了这个函数,这意味着如果没有进行适当的处理,XSS 漏洞可能在向你招手,即使经过了处理,试着看能不能绕过; React中就有一个和innerHTML差不多的函数叫做dangerouslytSetInnerHTML,这个函数也是咱们的重点关注对象; 还有Angular中的bypassSecurityTrustX,还有咱们熟悉的eval函数;

3.Postmessage函数

最好先去看看它的官方文档:https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage, 一旦了解了与 postMessage 相关的可能的安全问题,就可以在 JavaScript 文件中查找实现。在消息发送方,寻找window.postMessage并在接收方寻找监听器window.addEventListener。相关资料可以查看下面两个链接:https://labs.detectify.com/2016/12/08/the-pitfalls-of-postmessage/``https://medium.com/techiepedia/what-are-sop-cors-and-ways-to-exploit-it-62a5e02100dc

4.String.prototype.search().

一些开发人员使用它来查找一个字符串在另一个字符串中的出现。然而, ”.” 在此函数中被视为通配符。具体可以看下面这个报告: https://hackerone.com/reports/129873

5.location相关的几个函数

  • location: http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2015-099935

  • location.href: http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2014-062771

  • location.pathname: http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2012-013059

6.document.cookie

这个函数也比较重要,具体不展开了,可以去看看filedescriptor 的一篇报告:

https://hackerone.com/reports/422043

7.window.name

可以具体看看下面链接:

https://xz.aliyun.com/t/6019

https://blog.appsecco.com/automating-discovery-and-exploiting-dom-client-xss-vulnerabilities-using-sboxr-part-3-2ea910dfb429

8.localStorage以及sessionStorage

https://infosecwriteups.com/stored-xss-to-organisation-takeover-6eaaa2fdcd5b https://hackerone.com/reports/297968

过时的依赖和框架

从JS 代码中查找过时的依赖项。一个字,干就完了,可以直接使用 retire.js 来扫描漏洞。可以在以下链接中找到该项目:https://retirejs.github.io/retire.js/

敏感信息

有时,开发人员会在客户端 JS 代码中留下大量信息,例如密码、API 密钥等硬编码。从 JS 代码中找到这些信息。例如,AWS 密钥正则表达式可能如下所示:

(?i)aws(.{0,20})?(?-i)['\”][0–9a-zA-Z\/+]{40}['\”]

更多可以参考: https://github.com/l4yton/RegHex https://github.com/securing/DumpsterDiver https://github.com/auth0/repo-supervisor https://github.com/trufflesecurity/truffleHog

相关的漏洞报告: https://hackerone.com/reports/991718 https://hackerone.com/reports/983331 https://hackerone.com/reports/638635

隐蔽的接口

有时,不是对接口进行模糊测试,而是从 Javascript 文件中查找隐蔽接口会更有效。这些接口可能是一些废弃的服务(开发人员有时忘记删除它)或用户不应该访问的服务(如隐蔽的API )。如果你找到了,这些隐蔽接口通常比主要的 Web 应用程序更容易受到攻击。有一些很方便的工具帮助我们从js文件中提取这些接口:https://github.com/jobertabma/relative-url-extractor https://github.com/GerbenJavado/LinkFinder https://github.com/Threezh1/JSFinder

开发人员的注释

开发人员注释(例如 // 这是一个开发评论或 /* 这是一个多行开发评论 */)有时可以包含诸如代码何时发布或发生的任何更新之类的信息(有时候还会注释关于 XSS 过滤,这有助于我了解他们如何修复它并去绕过)。如果代码是旧版本的,那么你发现问题的机会就更大;

js.map文件

还有一个比较特殊的文件,是以js.map为后缀的文件,这是jQuery中的一个新功能,支持Source Map,

非常多Webpack打包的站点都会存在js.map文件.通过还原前端代码找到API,间接性获取未授权访问漏洞,

简单说,Source map就是一个信息文件,里面储存着位置信息。转换后的代码的每一个位置,所对应的转换前的位置。

有了它,出错的时候,除错工具将直接显示原始代码,而不是转换后的代码,这无疑给开发者带来了很大方便。

相关的处理工具有:(可以使用它们将代码还原)

https://www.npmjs.com/package/restore-source-tree https://github.com/paazmaya/shuji https://www.npmjs.com/package/reverse-sourcemap https://github.com/rarecoil/unwebpack-sourcemap

在Reactjs上面读取.js文件的示例

在查看一个React.js的的网站的时候,发现一个settings.js文件: app.js是我们的重点。我们要找什么?新的端点、参数,也许还有api key。打开它时,我们会看到似乎是“乱七八糟”的东西:

图片第一步:美化。美化会将我们的代码变成可读的代码。复制代码内容并使用 Javascript 美化器,例如https://beautifier.io/

图片

现在我们的代码可读了,让我们开始寻找新的端点、参数,也许还有api key。在下面的示例(这是一个真实的网站)中,通过搜索关键字,pathname我能够找到网站上使用的所有端点,这些端点扩展了攻击面以查找错误,并开始查找有关其 API 的信息。

图片

要查找的其他常见关键字:url:, POST, api, GET, setRequestHeader, send((注意:只有一个 (,因为它在发出 Ajax 请求时使用!).headers,onreadystatechange, var {xyz} = , getParameter(), parameter, .theirdomain.com, apiKey; 除此之外,还有:postMessage, messageListenger, .innerHTML, document.write(, document.cookie, location.href, redirectUrl, window.hash;

如果是自动读取的话,可以利用上面的三个工具:

https 😕/github.com/003random/getJS

https://github.com/jobertabma/relative-url-extractor

https://github.com/0xsha/GoLinkFinder

如果js被混淆了,可以使用下面的工具:

https://lelinhtinh.github.io/de4js/

大多数类型的混淆都可以解决;

更多内容请关注公众号growing0101

参考

https://medium.com/techiepedia/javascript-code-review-guide-for-bug-bounty-hunters-c95a8aa7037a

https://www.bugbountyhunter.com/guides/?type=javascript_files

https://www.ruanyifeng.com/blog/2013/01/javascript_source_map.html

https://blog.appsecco.com/static-analysis-of-client-side-javascript-for-pen-testers-and-bug-bounty-hunters-f1cb1a5d5288


http://chatgpt.dhexx.cn/article/e1HLC5tf.shtml

相关文章

如何在线替换并调试网页上的 JS 代码

调试代码使用代理替换代码在线调试总结 调试代码 当我们需要调试网页上的 JS 代码时,可以使用 Chrome 游览器上的开发者工具的 Sources 项进行断点调试。 在代码数目栏处点击,即可加上断点,根据加入的断点进行判断,该断点若是…

用JS开发安全工具:端口扫描器

用JS开发安全工具:端口扫描器 如标题所述,本文用Javascript实现一个端口扫描器,用于检测指定IP的电脑哪些端口是开放的,而且扫描速度非常快。 在Node.js中运行,效果如下: 源码: function scan…

JavaWeb后端代码自动生成工具V2.0.0

背景介绍 Author:yuxue {个人业余开发项目,主要解决个人在开软件开发工作中遇到的一些头疼问题} 问题1:各种密码太多,记不住问题2:系统太多,环境太多,看着都头疼,要用的时候找半天…

goto混淆语句解密工具,php代码还原

通过使用goto解密工具,你可以轻松应对多种加密场景。下面列举了几个具体问题案例,让你更好地了解它的实际应用: 1. 微擎2c解密: 当你在微擎中遭遇2c加密时,可能会遇到无法阅读和修改代码的困境。但是,有了…

javascript服务器_服务器端JavaScript会流行吗?

javascript服务器 JavaScript is probably the most widely-used programming language on the planet – nearly every website has a few lines. However, the language is also one of the most misunderstood and often confuses experienced developers: it is not Java, …

python编写代码工具_python编码工具

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 编码后字节序列被发送给终端,假若终端设置的编码和str编码不一致,终端就会显示出乱…

vue打包js文件混淆加密保护

需求 部署到服务器上的vue项目在网页F12之后能看到源码,vue文件啦,js文件啦,都能看到,连我的注释都能看到,这能随便给别人看? 环境 vue 3 vue cli 4 webpack 4 解决方案 方案一 工具:“u…

【C/C++服务器开发】什么是服务器?服务器分类及构建一个简单的服务器系统

文章目录 一、服务器的定义二、服务器的分类1.外形2.CPU指令集3.用途1.web服务器WEB简介协议WWW简介发展和特点服务器特点工作原理 2.应用服务器定义分类静态动态 概括区别应用服务器和WEB服务器的区别Web型应用程序型 3.文件服务器简介功能分类集中式文件服务器(1&…

js混淆 webpack-obfuscator

js混淆之webpack-obfuscator 混淆是什么 混淆是故意制造混淆代码的行为,即让人难以理解的源代码,类似于加密,但计算机能够识别理解代码并且执行它。混淆可以用来隐藏来自外部世界的业务逻辑,也可以实现压缩。 简单的原理&#…

使用AST进行JavaScript反混淆(2022年增值税发票查验js)

背景 多年前学过龙书,一来当时本身也没看懂,二来时间也长也差不多都忘记了。直到最近有 deobfuscate 问题才看了下AST。 说实话,一旦稍微了解AST和熟悉了 Babel 接口,deobfuscate 实在不是啥难事。 反混淆总结放前面。 注意事…

html混淆压缩,JavaScript的压缩和混淆

JavaScript的压缩和混淆 我们都知道JavaScript是一种在客户端浏览器中执行的解释型语言。浏览器以纯文本的形式下载JavaScript,然后在需要的时候执行JavaScript代码。 通过使用浏览器的查看源代码功能,用户总是能够阅读JavaScript的源代码,该…

安卓混淆及反编译工具

目录 安卓混淆及反编译工具... 1 Eclipse编译混淆... 2 项目文件project.properties. 2 服务器编译混淆... 2 Android.mk. 2 混淆规则... 3 Java代码的混淆... 3 Proguard混淆规则汇总... 3 Native的混淆... 4 资源文件的混淆... 4 混淆的常见配置... 4 哪些不应该…

一款JavaScript 混淆(Obfuscator)工具(Tool)的研究(一)

1.研究使用的工具及网站 https://obfuscator.io 主要研究对象,主要是研究此网站的各种混淆方法及破解办法。 http://jsnice.org/ 用来格式化代码,方便调试。 notepad 编辑代码。 某浏览器 具有谷歌内…

stm32与sim900之GPRS通信(电脑串口与SIM900通信)

注意: 1 sim900在进行GPRS通信的时候最大电流可以到90MA.瞬间电流SIM900模块可能高达2A4V,即输入端电流瞬间值可能高达740mA12V,故给模块选择电源的时候,要能满足瞬间电流峰值。 以上这段话摘录自正点原子的SIM900用户手册,也就是说你在用SI…

GSM模块(SIM900)详解

GSM模块(SIM900) 0. GSM概述1. 常用的GSM模块2. SIM900系列3. STM32使用SIM900系列通信方法AT指令示例代码 0. GSM概述 GSM(全球系统移动通信)是一种数字移动通信技术,是世界上最常用的移动通信标准之一。它是由欧洲电…

常见的防火墙技术介绍

详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt280 防火墙是一个系统或一组系统,它在内网与Internet间执行一定的安全策略。典型的防火墙应包含如下模块中的一个或多个:包过滤路由器、应用层网关(或代理服务器…

linux平台下防火墙iptables原理

转载自:http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646466.html linux平台下防火墙iptables原理(转) iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包…

简述防火墙

什么是防火墙? 在遭受入侵时,做内外网隔离的策略叫做防火墙。 防火墙分类 按物理特性划分:软件防火墙、硬件防火墙;按性能划分:百兆级防火墙、千兆级防火墙……按防火墙结构划分:单一主机防火墙、路由集…

【计算机基础】防火墙

工程师CCNAHCIA 资深工程师CCNPHCIP 技术专家CCIEHCIE IPS:入侵防御系统,发现攻击和入侵进行阻断IDS:入侵检测系统,检测有无攻击漏洞扫描:发现本地服务器/PC,存在哪些中高低危的风险,解决漏洞…

下一代防火墙概述

目录 1.防火墙概述 1.1定义 1.2防火墙分类 1.3防火墙功能 1.4防火墙的策略 2.防火墙发展史 2.1 包过滤防火墙:一个严格的规则表 2.2 应用代理防火墙:为每个应用添加代理 2.3 状态检测防火墙:建立会话表 2.4 入侵检测系统&#xff0…