渗透攻防之前端JS加密该如何破局
2023-12-27 11:11:11 Author: mp.weixin.qq.com(查看原文) 阅读量:3 收藏

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

往期回顾

xss研究笔记

SSRF研究笔记

dom-xss精选文章

2022年度精选文章

Nuclei权威指南-如何躺赚

漏洞赏金猎人系列-如何测试设置功能IV

漏洞赏金猎人系列-如何测试注册功能以及相关Tips

福利视频

笔者自己录制的一套php视频教程(适合0基础的),感兴趣的童鞋可以看看,基础视频总共约200多集,目前已经录制完毕,后续还有更多视频出品

https://space.bilibili.com/177546377/channel/seriesdetail?sid=2949374

技术交流

技术交流请加笔者微信:richardo1o1 (暗号:growing)


文章来源: https://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247493162&idx=1&sn=ceed49c0745f59c5ef10b1da938efdd5&chksm=e8a5ec49dfd2655ff04e79f678565b97997159c9a2f8a2517d7ae5dfe88d26df40fd92769cd7&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh