当前位置: 首页 > news >正文

Authentication Lab | Client Side Auth

关注这个靶场的其它相关笔记:Authentication Lab —— 靶场笔记合集-CSDN博客

0x01:Client Side Auth 前情提要

有些时候,开发人员会将身份验证的逻辑写于前端,这样写是十分不安全的,因为前端的代码几乎全部都是可见的,在一个能够逆向 JS 的攻击者面前,所有基于前端的防御,都是纸老虎。

0x02:Client Side Auth Write UP

进入靶场,是一个登录框,并且写着 JS Login,基本可以判断,该靶场的身份验证逻辑是基于前端的:

随便写一个 Username 和 Password,点击登录,页面通过弹窗提示 “Invalid credentials”:

如果你比较细心,还可以通过浏览器的 “开发者工具” 发现,当我们点击 Login 按钮时,页面并没有向后端发送请求包,这意味着,所有的身份验证逻辑都是基于前端的:

刷新页面,进行抓包,开始分析 JS 文件。站点只有一个 JS 文件,且登录逻辑很好找到:

下面开始分析 JS 的登录逻辑:

 function login() {// 获取用户输入的 用户名 和 密码var username = document.getElementById("username").value;var password = document.getElementById("password").value;​// 将用户名和密码进行拼接,赋值给 concatvar concat = username+":"+password;var encrypted = "\u0000\u000c\u0007H1\u001c\u0002\u00160\u0000)\u000c\u001c\u0002'\u000e\u0006\u000c\u0001\u00003\u0013\u0016\u0007\u001c\n\u000b\u0017";var secret = "secretkey";// 如果 xorString (concat, 'secretkey') 的结果等于 encryptedif (xorString (concat, secret) == encrypted) {// 就给 /ClientSide 传递 hash 参数,该参数的值为 md5 后的 passwordurl="/ClientSide?hash=" + md5(password);// 进行跳转document.location=url;} else {// 如果计算后的结果不匹配,弹出警告框alert ("Invalid credentials");}}

用户输入的用户名和密码经过拼接后,与 secretkey 进行 xorString 运算,如果该值与 encrypted 的值相等,就完成登录,否则弹出警告框。这里需要提两点:

  • xorString 是一个基于异或的加密函数,而异或操作具有对称性,即使用相同的密钥对加密后的字符串再次进行加密会返回原始文本。

  • encrypted 的内容是 Unicode 编码。

根据异或操作的对称性,我们先获取正确的 usernamepassword 的值,直接使用浏览器的控制台就可以完成:

 var encrypted = "\u0000\u000c\u0007H1\u001c\u0002\u00160\u0000)\u000c\u001c\u0002'\u000e\u0006\u000c\u0001\u00003\u0013\u0016\u0007\u001c\n\u000b\u0017"; var secret = "secretkey"; xorString (encrypted, secret)

成功获取到了明文的用户名和密码,此时使用该用户名和密码,就可以完成登录:

 sid:ThisIsLongSecurePassword


http://www.mrgr.cn/news/45940.html

相关文章:

  • 低空经济第一步,无人机培训机构如何做大做强?
  • Vue vben admin开源库中table组件tips
  • CMake 属性之全局属性
  • 升级到Ubuntu 24.04遇到的问题
  • LabVIEW提高开发效率技巧----队列使用
  • 系统架构设计师教程 第12章 12.2 信息系统架构 笔记
  • 什么是维度建模
  • 【成神之路】Ambari实战-050-UI-如何通过配置修改ambari样式
  • Docker镜像命令汇总笔记
  • python 实现Edmonds-Karp算法
  • 1.9 电子商城测试分析
  • 基于Python的自然语言处理系列(28):spaCy基础介绍
  • Apache Flume 启动报错及解决方法
  • Linux: debug: perf: report: --sort
  • 《系统架构设计师教程(第2版)》第17章-通信系统架构设计理论与实践-06-网络构建和设计方法
  • 应用UX体验标准
  • 一个适用于 ASP.NET Core 的轻量级插件框架
  • Spring 循环依赖
  • 数学建模算法与应用 第3章 非线性规划及其求解方法
  • MySQL的索引