Web攻防--JS算法逆向--断点调试--反调试&&代码混淆绕过
阅读原文时间:2023年09月01日阅读:3

Web攻防--JS算法逆向--断点调试--反调试&&代码混淆绕过

在进行渗透测试过程中,在一些功能点进行参数注入或者枚举爆破等过程中,会出现参数进行加密的情况,但是我们输入参数并不是加密状态,即便测试点存在漏洞也不可能测试成功,这时候便需要将所提交参数进行加密后在进行注入,针对JS应用我们可以采用JS断点调试的方法将加密算法逆向出来,再使用插件将加密后的参数进行注入

  • 代码全局搜索

    即将参数提交的网址、目录等关键字在开发者工具中进行搜索,再对JS源码进行分析,找出加密算法

  • 文件流程断点

    即查看登录数据包中所调用执行堆栈,文件执行流程为从下往上执行,选用其中可能存在加密过程的文件处进行断点调试

    添加断点后再继续提交参数,观察作用域处的参数加密状况进行判断参数是否已经加密,如果未加密则查看堆栈上方文件中作用域的情况,直到作用域中的参数加密之后,分析代码中是否存在加密函数,找到加密函数后追踪加密文件即可成功获取加密算法。

  • 代码标签断点

    右键审查功能点,在html代码中将标签进行子树修改和属性修改,再次运行功能点即可断点。其他步骤参考文件流程断点。

  • XHR提交断点

    选择数据包中关键url路径

    在源码的顶层文件夹中添加XHR断点关键url,再次运行功能点即可断点,其他步骤参考文件流程断点。

将加密算法以及加密逻辑找出之后,将加密算法文件另存为。使用brupsuite插件JSEncrypt即可将参数运用在枚举过程中。

载入过程:

  • 下载phantomjs并设置环境变量

    phantomjs下载地址

  • brupsuite加载jsEncrypter插件

    jsEncrypter下载地址

    brupsuite出现此栏目即插件加载成功

    将加密算法文件拷贝至插件所在jar包同级目录

    修改phantomjs_server.js文件中的内容,将加密算法文件名称添加,以及编写算法运行逻辑

    在该目录下使用已经设置了环境变量的phantomjs.exe文件运行phantomjs_server.js文件

    查看brupsuite中插件连接是否成功,并进行测试

    将加密算法加载至枚举爆破过程中,使得枚举的参数在加密后再进行爆破。

    username字段成功加载算法进行枚举

JS反调试,即禁用开发者工具,防止用户查看JS源码,保护敏感数据,防止分析代码。

  • 常见反调试方法

    键盘监听(F12)

    检测浏览器的高度插值

    检测开发者人员工具变量是否为true

    利用console.log调用次数

    利用代码运行的时间差

    利用toString

    检测非浏览器

  • 绕过方法

    • 禁用断点法

      该方法指将开发者工具上的禁用断点开关打开,禁用一切断点,这样自己也就不能断点调试了,不过可以看到源代码

    • 条件断点法

      即将代码中产生断点的语句添加前置条件。

    • 此处暂停法

    • 置空函数法

      即将产生debug的函数跟踪找到,在控制台处重新定义,使得函数不起作用。

    • 本地覆盖法

      这种方法与在文件上传前端检测绕过类似,即将网页所加载关键文件保存在本地,启用本地覆盖,这样浏览器在加载网页时会根据本地覆盖文件进行加载,将反调试函数所在文件以及相关引用文件找出,使用本地覆盖的方法将反调试函数及相关作用代码进行注释修改,即可绕过反调试功能

      在使用这种方法时要将断点功能禁用,否则浏览器加载网页文件将显示不全

JS文件在网页中可以被查看到,为了防止源码被调试,或者关键信息泄露,会对JS代码文件进行加密混淆。

常见的JS加密种类有:JJEncode AAEncode JSFuck,Sojson v4,Sojson v5,JSjiami v6 等

破解工具链接JSDec

在JS源码中,会泄露url、API信息,从而增加攻击面,如果部署了云服务,接口等服务,可能存在access key等关键信息,通过Pentestkit FindSomething Wappalyzer等浏览器插件可以收集JS代码中的信息,如password,key等,之后可以利用云利用工具上线云服务等

以上内容仅作学习,如有错误或瑕疵,欢迎批评指正,感谢阅读。