九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波

admin 2022年7月12日01:05:05评论95 views字数 2971阅读9分54秒阅读模式

九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波


写在前边 



Javascript 简称 js ,是 html 的脚本语言。其主要作用是用来对浏览器事件作出响应。我们在请求目标网站的时候通常也会加载 js 文件,js 文件对于前端是透明可见的,所以很多时候,我们也可以通过 js 获取一些敏感信息作为突破口。下面请看案例。


那么JS在未经安全设计、编码、测试的情况可能存在哪些安全问题呢?本文将站在安全测试角度来尝试解读一二。


九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波

站在开发者角度看安全


Javascript是前端语言,JavaScript可以实现页面的效果切换、动画效果、页面游戏等效果。然而JavaScript承担了更多的责任。


尤其是当Ajax技术兴起之后,网站的用户体验又得到了更大的提升。例如,当人们在百度的搜索框中输入几个字以后,网页会智能感知用户接下来要搜索的内容,出现一个下拉菜单,这个效果的实现离不开JavaScript。


另外,JavaScript的用途已经不仅局限于浏览器了,Node.js 的出现使得开发人员能够在服务器端编写JavaScript代码,使得JavaScript的应用更加广泛。例如前端数据加密、ajax请求、接口调用等等。


但是从安全角度出发,JavaScript的源码是可见的,我们完全可以通过解析js脚本逆向出一些功能特点,例如加密过程、ajax请求的参数、调用了哪个接口等。渗透测试中,信息收集是渗透工程师必不可少的工作,收集到的信息越多,越有利于渗透。所以js暴露的一切信息,都能被利用。


九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波

Js脚本对数据加密


为了使数据加密传输,开发者会使用js脚本对数据进行加密,例如密码、敏感数据等等。加密方式很多,为了保证安全,大部分开发者会使用AES加密。


AES加密标准又称为高级加密标准Rijndael加密法,是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准。


AES的基本要求是,采用对称分组密码体制,密钥长度可以为128、192或256位,分组长度128位,算法应易在各种硬件和软件上实现。


1998年NIST开始AES第一轮分析、测试和征集,共产生了15个候选算法。AES针对前端数据进行加密,后端接收数据进行解密。


所以加密函数写在前端,攻击者完全可以逆向出加密函数,获得密钥,这个密钥除了用作aes加密的函数外,根据个人习惯极有可能在后端实现的含有密钥功能中使用了相同的密钥,例如反序列化等漏洞,密钥爆破不成功,可以尝试使用前端泄露的一些密钥和信息进行突破,也是一个不错的思路和方法。


九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波


如果攻击者从前端获取到上图这段代码,能很好整理出加密思路,加密使用的密钥为zhgerXHBVaaKm8xy模式ECB等关键信息。


这个密钥看起来有点特殊,有可能其他接口或功能使用了同样的密钥和密码,为渗透做了进一步的信息收集。


九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波

Js调用ajax请求


AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分页面内容的新方法,(AJAX = Asynchronous JavaScript and XML【异步的 JavaScript 和 XML】)。


AJAX 不是新的编程语言,而是使用现有技术混合使用的一种新方法。ajax 中使用的技术有JavaScript, html 、dom、xml、css 等。主要是 JavaScript、XML。


JavaScript:使用脚本对象 XMLHttpRequest 发送请求, 接收响应数据。

XML:发送和接收的数据格式,现在使用 json AJAX 不单需要前端的技术,同时需要后端(服务器)的配合。服务器需要提供数据,数据是 AJAX 请求的响应结果。ajax是一个前后台配合的技术,它可以让javascript发送http请求与后台进行通信,从而获取后台返回的数据。


九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波

该图片源于网络


在上图中,可以看到js调用了ajax请求。这极大地方便了开发人员,但同时也暴露了大量敏感信息。比如在图中我们可以看到存在test.json文件,直接访问可能可以直接下载,数据内容也清晰可见,给渗透测试也提供了极大便利,存在安全隐患。


下面本文将会通过几个案例给大家详细展示前端js信息暴露引发的一系列“风波”。


九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波

案例浅析

案例一

Js泄露引发密码重置


对于在测试时遇到的登录框,爆破、注入都无果时,这时不防尝试一下看看源代码。


以下图中的代码为示例,可以看到该 js 的作用是重置密码,只要在 url 后面拼接 js 泄露的 payload ,得到用户id就可以实现密码重置。


用户 id 一般分为字符获取数字,可以通过重发器进行测试,从而达到修改密码的目的。


九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波


修改建议:

后端对前端发送的数据要进行有效性校验,例如携带token令牌、cookie信息等。另外JS代码对用户完全可见,所以在js中尽量不要存放敏感信息,隐藏接口。



案例二

Js泄露引发文件下载(靶场复现)


网站功能中没有看到文件下载的功能,在 js 中有敏感关键词,以下图中的代码为示例。


九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波


可以看出这是一个下载文件的函数,文件中给出了下载的链接,直接访问该链接进一步测试,就有可能存在任意文件读取下载。这就是js暴露了敏感信息和文件,功能尚不完善,但文件接口就提前写了进去,没有进一步对开放的功能校验,留下了安全隐患。


修改建议:

对于未完善的功能不要暴露在前端。对下载文件的脚本文件进行校验,或者使用 waf 。



案例三

Js泄露引发账号泄露、未授权访问


有些开发者习惯将判断条件写在前端,以下图中的代码为示例

九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波


可以看到这个 js 判断非常简陋:如果username=dbapp,就跳转到admin-1/index.html,否则返回登录框,泄漏了用户名,以及跳转网址,且没有针对 cookie  session 等做验证,直接访问该网址,就可以实现未授权访问。


防御建议:

用户验证等功能谨记在后端实现。



案例四

密码前端校验,泄露账号密码


有时候我们在测试登录框抓包时,如果点击登陆后 burp 没有抓到包,但前端提示密码错误,说明用户名数据没有传递到服务器,那肯定是前端校验(该图片源码为本地搭建)。


九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波

前端查看js,即可获得账号密码。


防御建议:

1. 不要在前端代码中硬编码或者其他方式存放用户的密码信息,非必要情况下可不存放用户名信息。

2. 业务相关的判断,应当在后端进行实现,但是可通过在前端同时配置检测方式提高用户体验。


 

小结


通过以上几个案例我们能看到,js的信息对用户是可见的,对于渗透测试工程师来说,平时在挖洞的时候找不到合适的突破口,不妨耐心读读js文件,也许js文件中就有意想不到的惊喜。


对于开发者来说,js的代码对前端用户可见,怎么在对用户可见的情况下做好安全防护呢?


对此,笔者给出如下几点建议:

1.秉承前端数据不可信原则,后端业务要对前端发送的数据进行验证,例如在后端重新对token,cookie等进行验证,证明身份真实性。

2.敏感信息不要为了图方便写在前端,尤其是账号密码邮箱等,尽量隐藏一些敏感且重要的接口。

3. 避免使用内联 JavaScript 并建立内容安全策略。




—  往期回顾  —


九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波
九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波
九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波
九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波
九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波




关于安恒信息安全服务团队
安恒信息安全服务团队由九维安全能力专家构成,其职责分别为:红队持续突破、橙队擅于赋能、黄队致力建设、绿队跟踪改进、青队快速处置、蓝队实时防御,紫队不断优化、暗队专注情报和研究、白队运营管理,以体系化的安全人才及技术为客户赋能。

九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波
九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波

九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波

原文始发于微信公众号(安恒信息安全服务):九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的“风波”

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月12日01:05:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   九维团队-绿队(改进)| 最容易被忽视的JS——那些JS引发的风波http://cn-sec.com/archives/1161863.html

发表评论

匿名网友 填写信息