信息收集之 JS 代码文件

地球胖头鱼 2020-11-09
Web安全 发布于 2020-11-09 14:26:46 阅读 50 评论 0

简介

JavaScript已经成为现代Web浏览器开发中最普遍的技术之一。源代码审计中也可以获取到一些敏感信息,但有的测试人员只审计html源代码,而忽略审计js文件里的源代码,今天我们就来讲一讲审计js文件都能获取到哪些信息。

详解

通过对Js代码进行审计我上网查阅资料和通过阅读大量文章后发现,JS代码审计获取无非是以下四类信息:

  • 敏感信息
  • 业务逻辑
  • 加密算法
  • Ajax请求

敏感信息

审计js文件最直观的就是很有可能获取到账号密码、配置等敏感信息。

HTML定义页面结构,CSS定义装修样式,而JavaScript定义前端工作内容,主要是监听事件执行动作,比如逻辑判断,亦或是向服务器发送请求等等。而要正确执行这些动作,通常都会进行一些简单的配置。

最常见的配置就是设置网站根路径,不过也经常遇到直接在js文件里配置账号密码的情况;更有甚者,有的开发人员直接在js文件里定义SQL语句,然后由前端发送到服务器执行。这不仅泄露了数据库信息,也提高了SQL注入漏洞攻击的风险。

业务逻辑

我们审计js代码除了获取敏感信息还可以获取一些业务逻辑,要是说起业务逻辑就要牵扯到前段校验了。只要响应包满足条件,就会执行下一步操作,服务器端不会再进一步检验接下来的请求是否有问题,我们只要修改响应包就可以绕过检测。

要绕过前端校验,像0/1、true/false这种很容易就能猜到该怎么修改,但有些系统可能有十多个响应码,或者响应码有多位,如果我们耐着性子一个一个去试,时间成本会很大。

比如0是用户名错误,1是密码错误,2是验证码错误,9999是登陆成功,如果我们从0开始,一个一个去试,说真的还不一定能试出来。除非先输入正确的账号密码得到正确的响应码,然后输入错误的账号密码,再用之前得到的正确响应码替换错误的响应码,尝试看是否存在前端校验的问题。这种情况下信息收集就很重要了。

加密算法

审计代码能获取的另一个信息就是加密算法了,在当今这种大环境下,企业安全越来越重要,很多企业的数据传输过程中会有加密算法来进行加密传输。很多测试人员在测试的时候,抓包发现参数值都是加密的,就这么放过了。但这种前端加密都是可以在js中找到加密算法的,要么在html文件的js中,要么包含在js文件中。(ps:不是所有的加密算法都能在JS代码中找到,不要太杠了。)

当然我们也可以不需要知道加密算法到底是怎么样的,直接输入测试的明文Payload,系统自然会利用加密算法输出对应的加密数据。这个Payload不行,我们再输入下一个明文Payload去测试。

以上的方式时间成本会增加很多,而且有时候系统会先检测输入的数据是否含有非法字符,没有非法字符才会加密发送到服务器端。而只要我们找到了对应的加密算法,就可以手工构造或者编写脚本批量生成我们想要的加密数据,进而去测试系统是否存在漏洞。

据目前工作经历来看,涉及到加密的参数,存在漏洞的几率要高很多。因为前端加密后,后端必须解密才能使用。但很多时候,系统的安全检测只在请求传过来的时候,加密时没有检测到非法字符就绕过了检测,后端解密之后就可以肆意横行。

Ajax请求

我自己觉得审计JS文件还能获取的信息还有Ajax请求了,这个Ajax请求也是漏洞重灾区。而且AJax请求的调用通常很隐蔽,且Ajax请求的触发条件通常是无规律的,很容易被遗漏和忽略。

Ajax请求通常是被各个事件触发调用,而这些事件的触发往往需要满足一定条件。但很多时候,即便事件触发条件未满足,我们去构造Ajax请求的数据包发送给服务器端,依然可以得到服务器的响应。

服务器访问控制不当,并没有去检测用户是否是通过正常业务逻辑发送Ajax请求,也没有去检测用户是否有操作权限。服务器认为客户端发过来的请求都是正确的,这又要提一下安全的本质:一切输入都是不安全的。而且每一个Ajax请求都对应一个接口,这又增加了攻击面,每个请求都可能形成独立的攻击过程。

开发人员认为所有的用户都会按照系统业务逻辑一步一步触发请求,先点击发送验证码,然后填写验证码进行校验,通过校验后跳转到修改密码的页面,输入新密码,最后修改成功。而且只有管理员有这个功能页面。

但通过代码审计,直接在js文件中找到了修改密码的Ajax请求,请求参数只有新密码。现在我们已经找到了修改密码的请求,那么我们可以跳过前面一系列的校验和请求,只需要构造出修改密码请求,就可以修改密码。

而且这个Ajax请求是写在js文件里的,系统并不会因为用户权限的不同而调用不同的js文件,所以普通用户也能够查到到对应的js代码,不存在管理员一说。

总结

上述对JS代码审计然后发现的信息收集在我查了资料和看了很多文章以后发现无非就是上述的四种信息,可能有很少信息也包含在JS代码中,奈何本人技术有限只能发现这四种。还是那句话如果有错误请大佬在评论区留言帮我改正,要有好的发现可以私信我,我们一起努力。谢谢大家花时间和精力看完这篇文章,在此抱拳谢过了。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
地球胖头鱼
未填写
  • 作者发布文章112
  • 作者收获粉丝2
  • 作者收到点赞0
  • 所有文章被收藏了0
  • 博客总访问量排行第3
  • 博客总访问量1.1 万(每日更新)
查看所有博文