渗透测试过程中最常见的一种场景就是登录框,而在登录框上最头疼的就是登录框参数字段的值被进行了加密,我们无法进行下一步的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
点击下方小卡片或扫描下方二维码观看更多技术文章
师傅们点赞、转发、在看就是最大的支持