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

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

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反调试,即禁用开发者工具,防止用户查看JS源码,保护敏感数据,防止分析代码。

  • 常见反调试方法
    键盘监听(F12)
    检测浏览器的高度插值
    检测开发者人员工具变量是否为true
    利用console.log调用次数
    利用代码运行的时间差
    利用toString
    检测非浏览器
  • 绕过方法
    • 禁用断点法
      该方法指将开发者工具上的禁用断点开关打开,禁用一切断点,这样自己也就不能断点调试了,不过可以看到源代码
    • 条件断点法
      即将代码中产生断点的语句添加前置条件。
    • 此处暂停法
    • 置空函数法
      即将产生debug的函数跟踪找到,在控制台处重新定义,使得函数不起作用。
    • 本地覆盖法
      这种方法与在文件上传前端检测绕过类似,即将网页所加载关键文件保存在本地,启用本地覆盖,这样浏览器在加载网页时会根据本地覆盖文件进行加载,将反调试函数所在文件以及相关引用文件找出,使用本地覆盖的方法将反调试函数及相关作用代码进行注释修改,即可绕过反调试功能
      在使用这种方法时要将断点功能禁用,否则浏览器加载网页文件将显示不全

JS代码混淆

JS文件在网页中可以被查看到,为了防止源码被调试,或者关键信息泄露,会对JS代码文件进行加密混淆。
常见的JS加密种类有:JJEncode AAEncode JSFuck,Sojson v4,Sojson v5,JSjiami v6 等
破解工具链接JSDec

ak/sk敏感信息泄露

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

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

热门相关:我有一座恐怖屋   拒嫁豪门,前妻太抢手   本法官萌萌哒   后福   买妻种田:山野夫君,强势宠!