0×01 引言
大家在使用burp的intruder模块时,一定遇到过已有payload processing不能满足需求的情况。
例如某些系统使用了复杂的加密算法对参数加密之后传给服务器,当我们要对payload做复杂处理时,burp自带功能不能满足要求,只能自己写脚本翻译算法,这样一来,一定程度上进行了很多重复性工作,比如:
从上图可以看出,password与nonce两个参数是js加密后传输的,如果要用字典爆破,必须用相同的算法对payload加工之后才可以。
有经验的朋友应该从url和参数中看出来了,这是小米路由器的登录逻辑。接下来我就以小米路由器的登录操作来演示今天要分享的工具:JSRainbow,一个可以架通js和burp的精简插件。
可以直接下载jar包导入,或者下载源代码再做修改。
此处最关键的是思路,工具本身只是一个彩虹通道,我写完之后发github,大家可以随意发挥修改。
0×02 前端加密逻辑分析
以小米路由器登录为示例,接下来我们看一下前端的加密逻辑:
从上图可以看出,两个参数分别调用了Encrypt中的init和oldPwd方法,我们再看方法中的具体内容:
从方法中可以看出,秘钥和偏移量是按照规则自定义的,nonce参数调用了nonceCreat方法生成,nonceCreat中又采用了本机的mac地址+时间+随机数+特殊字符的方式生成最终结果。
而oldPwd方法采用了crypto-js库中SHA1算法生成,生成的时候,结合了nonce参数+原来的pwd+自定义的key秘钥。
如此一来,如果要自己写脚本翻译上述代码的话,太浪费时间了,最关键的是,每次碰到类似情况都得定制化。
为了解决类似问题,接下来和大家分享一下burp调用js代码来fuzz的思路。
0×03 Burp Suite调用JS
第1步:导入JSRainbow
导入成功之后,如下图所示: