文章转自 戟星安全实验室 侵权请联系删除
0x00 前言
在WEB渗透测试过程中,遇到burp拦截数据包,内容为加密的情况,绝大部分是由于前端的JS代码对传递的参数进行加密后造成的,这里想了一下为什么要用js加密呢?直接改成https不就好了?自我考虑是两个方面一个是安全性另一个就是省钱。
思考了一下其实参数的加密方式,对参数进行加密进行Fuzz测试会比较好一点,解密的话是为了看懂参数传递的含义,但是在实际测试中自我感觉对参数进行加密会更容易Fuzz一些,常见的前端加密有可能加密密钥保存在前端的js文件里面,这里主要介绍遇到加密的参数如何生成密文字典以及爆破
0x01 JS加密Fuzz
一、针对简单的加密方式进行测试
1、简单的demo环境没能找到,这里简单介绍一下使用流程。
拦截数据包发现为前端JS加密
2、密码参数”p”结尾两个等号,初步判断为base64加密,发送到Intruder模块,添加Fuzz字典
然后选择加密的方式对需要爆破的参数进行Fuzz
总结:
这种加密方式适用于简单的前端加密Fuzz,还有一个场景用到的比较多,就是授权登录页面中的用户名密码参数字段Authorization(如tomcat后台登录、某VPN登录)
二、使用burp插件结合js脚本Fuzz
相比于第一种Fuzz方式,第二种更加灵活一些,可以自己定义JS脚本针对不同的加密方式进行Fuzz。
简单说一下工作原理:
获取前端加密的js文件保存至本地
然后根据加密的方式(如AES-CBC等)编写调用加密函数,前提条件是在测试中能在前端js中找到js加密方式。
在编写好加密的JS脚本后用phantomjs.exe运行加密的js文件
最后结合Burp插件进行批量生成加密payload
用到的工具Burp加密插件jsEncrypter、phantomjs(这里存在一个坑点,phantomjs工具bate版本的存在bug不能成功加载JS文件,这里选用2.1.1版本下载链接在下方)。
https://github.com/c0ny1/jsEncrypter
https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-windows.zip
三、测试
https://github.com/c0ny1/jsEncrypter
这里先将jar文件导入burp
1、自己搭建一个前端加密的站点进行测试:http://192.168.1.50/test/
2、直接F12查看网页源码,查看前端采用的加密方式,这里以SHA举例。
3、先将sha1.js文件保存到本地,重命名为sha.js,然后修加密JSphantomjs_server.js
4、然后将aes.js、phantomjs_server.js两个js文件放在phantomjs.exe目录下,然后执行phantomjs_server.js文件,可以看到本地会新增一个127.0.0.1:1664的服务。
5、最后在Burp使用插件连接phantomjs_server.js中开启的webserver
6、最后Fuzz这里就不科普了
总结:
本次没有选择JS解密的原因在于对测试直接加密会好一点,但是也存在一定的局限性,可能会不知道加密方式,或者一些复杂的加密方式会存在密钥的情况下,实现前端加密Fuzz会比较困难,后期会想办法解决这一问题,其次就是本次的测试的核心脚本phantomjs_server.js有两个地方需要注意:
一、需要找到前端中的JS加密文件;
二、需要针对不同的加密方式编写不同的加密调用函数。
0x02 某银行银行逻辑漏洞
漏洞类型:逻辑漏洞
漏洞危害:恶意攻击者可以通过提交虚假信息进行信用卡办理预约,由于服务端校验不严格导致可以提交任意身份信息进行预约,可后台添加大量虚假订单。
漏洞等级:中危
漏洞详情:
1、测试资产信息中的,微信小程序:XXX银行信用卡在线预约申请,查看存在预约办卡功能
2、点击添加任意信息,这里因为需要接受验证码我们填写一个能接受验证码的手机号就行
3、拦截数据包,因为之前查看正确返回包中的returnCode为000000,这里我们直接将returnCode改为000000,就可以发现任意身份信息也能进行预约,这与正常的业务逻辑不相符合,故存在漏洞,且此处存在判断身份信息是否匹配的代码,只不过在服务端进行校验的时候不严格导致漏洞产生
4、第二天收到预约成功短信,后台审核通过,但是在第三天的时候收到一条审核失败的短信,应该是人工审核身份信息不通过了,可以通过该方式在后台创建大量的虚假订单,对银行业务系统造成影响