渗透攻防之前端JS加密该如何破局
2023-12-18 21:1:58 Author: 猪猪谈安全(查看原文) 阅读量:29 收藏

渗透测试过程中最常见的一种场景就是登录框,而在登录框上最头疼的就是登录框参数字段的值被进行了加密,我们无法进行下一步的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

 点击下方小卡片或扫描下方二维码观看更多技术文章

师傅们点赞、转发、在看就是最大的支持


文章来源: http://mp.weixin.qq.com/s?__biz=MzIyMDAwMjkzNg==&mid=2247512650&idx=1&sn=e8194abe5ea696b1dc6ae4d094768223&chksm=96d06d20d2d915b3ce26c358c1064b2c8cea8e1c98e42303d80371c54b003bc1b909d2fe62bf&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh