渗透测试过程中最常见的一种场景就是登录框,而在登录框上最头疼的就是登录框参数字段的值被进行了加密,我们无法进行下一步的FUZZ OR Intruder,导致很多时候错过很多漏洞。那么碰到这种情况该怎么办呢?
在参数被进行加密的情况下可以对其进行解密或者来模拟其JS加密方式,这涉及到JS逆向。而在JS逆向中,常常用到的两种方法就是JS扣取和补全JS环境,但是在我们渗透测试的过程中,我们常常采用的方法就是JS扣取,假如需要用到补全JS环境去进行JS逆向,个人感觉性价比就比较低了,因为就算我们花大量的时间去补全了环境能够进行解密,其系统也不一定存在漏洞。所以这里主要介绍一下JS扣取,早期JS扣取我是直接把JS代码扣取出来利用一些脚本语言去模拟他的加密算法,后面我常用的就是一款BP插件,可以简化如上步骤。
项目地址如下
https://github.com/c0ny1/jsEncrypter
下载插件,进行编译
mvn package
也可以用Releases里面项目作者编译好的
编译好把target里的jar文件添加进去
添加好就可以在BP里面看到如下界面
然后该项目里面还提供了一个test文件夹
test文件夹里面存放的是一个PHP版本的测试靶机,我们可以利用靶机试试该插件的有效性
首先把test文件夹下的webapp测试代码搭建起来(可以直接使用PhpStudy,把webapp直接放在PhpStudy的Web目录即可),搭建完成如下
靶机提供了7个算法对密码进行加密后传输
base64
md5
sha1
sha254
sha384
sha512
RSA
这里我们选一个RSA来进行测试,抓包发现password字段被加密
可以在源代码中看到加密逻辑如下
引用了js/jsencrypt.js文件,但是这里还缺少了一个PublicKey,一般在JS攻防之中,PublicKey常常会被混淆处理,靶机是为了测试用,所以PublicKey被直接写在了源代码之中(其实实际开发中,也有很多PublicKey是没做混淆的)
那我们来模拟它的加密环境,首先下载一个phantomjs,安装之后添加到环境变量
https://phantomjs.org/download.html
然后把加密逻辑添加进phantomjs_server.js文件里面
然后把靶机中jsencrypt.js代码复制出来,我这里重命名为了rsa.js(注意假如,加密引用了多个文件,LoadScript里面的引用顺序也要和浏览器的顺序一致)
然后启动server
回到BP里面进行连接测试,如下服务器启动成功
加密正常后,我们就可以正常加载我们自己的测试字典,然后走我们的插件进行模拟加密就ok
如果你是一个长期主义者,欢迎加入我的知识星球(优先查看这个链接,里面可能还有优惠券),我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款
笔者自己录制的一套php视频教程(适合0基础的),感兴趣的童鞋可以看看,基础视频总共约200多集,目前已经录制完毕,后续还有更多视频出品
https://space.bilibili.com/177546377/channel/seriesdetail?sid=2949374
技术交流请加笔者微信:richardo1o1 (暗号:growing)