Authentication Lab | Client Side Auth

server/2024/12/23 2:24:16/

关注这个靶场的其它相关笔记: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.ppmy.cn/server/129189.html

相关文章

Spring源码二IOC容器源码

文章目录 Spring IOC初始化源码剖析1.prepareRefresh2.obtainFreshBeanFactory3.prepareBeanFactory4.postProcessBeanFactory5.invokeBeanFactoryPostProcessors6.registerBeanPostProcessors7.initMessageSource8.initApplicationEventMulticaster9.onRefresh10.registerList…

机器人的性能指标

1. 负荷能力 负荷能力负荷能力是指机器人在满足其他性能要求的情况下,能够承载的负荷重量。例如,一台机器人的最大负荷能力可能远大于它的额定负荷能力,但是达到最大负荷时,机器人的工作精度可能会降低,可能无法准确地沿着预定的轨迹运动,或者产生额外的偏差。机器人的负荷量与…

【微服务】服务注册与发现、分布式配置管理 - Nacos

概述 Nacos是阿里巴巴旗下的一个开源产品,目前市场使用率还是比较高的。在最初开源时,Nacos选择内部三个产品合并并统一开源,这三个产品分别是:非持久化注册中心(Configserver)、持久化注册中心&#xff0…

设计模式——构建者模式

提问:通过对比使用构建者模式和不使用构建者模式,以更好的说明构建者模式的作用 GPT:当然,我很乐意通过对比来帮助您更好地理解构建者模式的作用。让我们以一个复杂对象的创建为例,比如一个计算机(Computer…

奇异值分解SVD

文章目录 奇异值是什么?1 奇异值的定义2 奇异值的性质3 特征值与奇异值的关系4 奇异值的重要性 奇异值分解 奇异值是什么? 1 奇异值的定义 对于任意一个 m n m \times n mn 的矩阵 A A A,存在三个矩阵 U U U, V V V和 Σ \Si…

OpenCV高级图形用户界面(3)关闭由 OpenCV 创建的指定窗口函数destroyWindow()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 销毁指定的窗口。 该函数 destroyWindow 销毁具有给定名称的窗口。 函数原型 void cv::destroyWindow (const String & winname ) 参数 …

基于Springboot+Vue的公寓出租系统 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

【智能算法应用】人工水母搜索算法求解二维路径规划问题

摘要 本文应用人工水母搜索算法(Jellyfish Search, JFS)求解二维空间中的路径规划问题。水母搜索算法是一种新型的智能优化算法,灵感来源于水母的群体运动行为,通过模仿水母的觅食、漂浮等行为,实现全局最优路径的搜索…