十二9512
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

前言
在测试中经常会遇到前端加密或者有sign签名的,对于不懂js的人来说是非常头疼的,本文主要针对在完全不懂js的情况下如何进行测试。
正常来说大多数加密都是AES、DES、RSA、MD5,像sign一般都是对提交的data和一个时间戳进行加密,对于这种我们只要找到关键的加密函数就可以了。
关键词定位
全局搜索(ctrl+shift+f)或者直接代码内(ctrl+f)搜索关键词,下面是本人遇到比较多的关键词
encrypt、decryp、iv、key、Crypto、setPublicKey、pubkeyHex、utf8.parse、mode.CBC、AES、sign、encode,如果搜索结果比较多不好定位可以加一些冒号等于号之类的,例如:key=、iv:、sign'、等等。
debug
如果上面找不到的话,就要一步一步的分析调用栈来调试。
先看下边从左到右的作用依次为1.执行到下一个端点 2.执行下一步,不会进入所调用的函数内部 3.进入所调用的函数内部 4.跳出函数内部 5.一步步执行代码,遇到有函数调用,则进入函数。
行为debug
定位到登录按钮所在代码处,右边click即是点击登录之后会触发的代码。
通过请求包调用栈
发送的加密数据包,右侧initiator为调用栈,由上而下执行。
XHRdebug
这个功能是匹配url中关键词,匹配到则跳转到参数生成处,适用于url中的加密参数全局搜索搜不到,可采用这种方式拦截。
Call Stack即为调用栈,由下至上执行。
XHRdebug案例
一个sign验签的网站,menuNo原本应该代表的是用户id,修改之后发现有sign验证。
首先将提交的网址复制进去。
点个查询,分析右边的调用堆栈,执行顺序是从下往上。
简单看一下,function是定义函数的,括号里面为参数,这个参数的值已经有sign了,说明加密过程还在前面,然后继续往前找。
这里同理,继续往前找。
然后到下面的请求,需要打个断点,然后重新执行下操作,就会执行到断点这里。
这里同理,传进来的参数值已经有sign,加密过程大概率还在前面。
最终看到这里的时候,我是一眼看到了_0xad77cb的执行结果很像sign的值,再看前面这个函数的参数为_0x2e470f, _0x2dd989,看右边这两个参数的值一个为时间戳,一个为提交的data,下面的headers确定了这就是进行加密的函数。
把其他断点去掉,在这里打个断点,重新执行下操作,没有意外的话会到这里停止。
然后我们在控制台可以直接输出这个加密函数的执行结果或者变量的值,也可以修改相关参数(一定要断点打到这里)。
_0x2e470f为提交的data,_0x2dd989为时间戳,直接修改data的值重新进行加密。
在burp里面修改sign和时间戳验证一下,没有问题。
如果想要爆破的话需要深入分析加密具体过程,鼠标放到加密函数上面,点击跳转过去。
下面就是具体的加密过程,然后就慢慢分析了。在js调试环境看缺什么就补什么。
爆破工具
如果想要爆破遍历怎么办?这里推荐一款burp插件,非常好用
https://github.com/whwlsfb/BurpCrypto
前面可以直接进行加密,内置了几种加密方式,后面Exec Js可以添加自定义JS代码。
把自己扣的加密过程代码粘贴进去。
点击Add processor保存之后,可以直接在Intruder模块进行调用了。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)

