webgoat(A2) Broken Authentication

身份验证绕过

身份验证绕过以多种方式发生,但通常会利用配置或逻辑中的某些缺陷。篡改以达到正确的条件。

隐藏输入

最简单的形式是依赖于网页/DOM 中的隐藏输入。

删除参数

有时,如果攻击者不知道参数的正确值,他们可能会从提交中完全删除该参数,以查看会发生什么情况。

比如需要提交问题通过验证,但是可以从接口处删除问题参数,则可以不提交问题也能通过身份验证。

最近(2016 年)的示例 (Paypal 2FA Bypass) 是身份验证绕过的一个很好的示例。他无法收到带有代码的短信,因此他选择了提供的 替代方法,涉及安全问题。使用代理,完全删除了参数......并赢了

强制浏览

如果站点的某个区域未通过配置得到适当保护,则可以通过猜测/暴力破解来访问该站点的该区域。

JWT tokens

许多应用程序使用 JSON Web 令牌 (JWT) 来允许客户端指示身份,以便在身份验证后进行进一步交换。

JWT token的结构

JWT是可以解码的

 0x02

将题目的jwt在WebWolf的JWT中,将payload的user_name中的值复制到token位置提交。

获取JWT token的过程

在此流程中,您可以看到用户在成功对服务器进行身份验证时使用用户名和密码登录 返回。服务器创建一个新令牌,并将此令牌返回给客户端。当客户端连续 调用服务器,它将新令牌附加到“Authorization”标头中。 服务器读取令牌并首先验证签名,验证成功后,服务器使用 令牌中用于标识用户的信息。 

claims

令牌包含用于标识用户的声明以及服务器满足请求所需的所有其他信息。 请注意,不要将敏感信息存储在令牌中,并始终通过安全通道发送

密码重置

本课讲授密码重置功能,大多数情况下,密码重置功能是应用程序中被忽视的部分 导致各种有趣的逻辑缺陷。

 

我们每个人都会以前在网站上使用过密码重置功能。每个网站都实现 以不同的方式实现此功能。在某些网站上,您必须回答其他网站上的一些问题,例如电子邮件 激活链接将发送给您。在本课中,我们将介绍一些最常见的密码 重置功能并显示可能出错的地方。

仍然有一些公司会通过电子邮件将密码以明文形式发送给用户。举几个例子 你可以看看 Plain Text Offenders。在这里,您将找到仍然向您发送明文的网站 电子邮件中的密码。这不仅会让您质疑网站的安全性,而且还意味着它们会存储 您的密码是明文的!

0x02

点击忘记密码,在webwolf的main处找到邮件,然后用你的账户名@@owasp.org,输入新的密码,点击访问

安全问题

这一直是一个问题,对于许多网站来说仍然是一个问题,当您丢失密码时,网站会询问您 对于您在注册过程中回答的安全问题。但是这些安全问题,可能并不安全,能被暴力破解,或被猜到。

如果攻击者回答了问题,则可能修改掉你的账户密码。

安全问题的问题

虽然安全问题乍一看似乎是进行身份验证的好方法,但它们 有一些大问题。

“完美”的安全问题应该很难破解,但很容易记住。答案也需要固定, 所以它不能改变。

只有少数问题符合这些标准,几乎没有一个适用于任何人。

如果您必须选择一个安全问题,我们建议您不要如实回答。

为了进一步阐述这个问题,有一个小任务给你:下面列出了一些常见的安全问题。 如果你选择一个,它会向你展示为什么你选择的问题并不像人们想象的那么好。

创建密码重置链接时,需要确保:

  • 它是带有随机令牌的唯一链接

  • 它只能使用一次

  • 该链接仅在有限的时间内有效。

发送带有随机令牌的链接意味着攻击者无法通过启动 阻止用户。该链接不应多次使用,因此无法再次更改密码。 超时对于限制攻击窗口是必要的,拥有链接为攻击者开辟了很多可能性。

如何防止滥用密码重置功能

在学习如何滥用密码重置功能之后,您现在还应该知道如何保护自己的网站免受此类攻击。如果您想全面了解所有缓解方法,请查看此处:Forgot Password - OWASP Cheat Sheet Series

本课将总结上面备忘单中提到的要点。

如何使用安全问题进行用户验证

安全问题是一种简单的方法,可以在不要求用户提供验证数据的情况下查找有关用户有效性的信息。问题是,安全问题的类型并不多,而且大多数问题的答案在许多用户中都是相同的。这使得攻击者很容易猜测问题和答案。

使猜测安全问题变得更加困难的一个简单方法是让用户自己决定他们想要回答的问题。有关此主题的更多信息,请访问:Choosing and Using Security Questions - OWASP Cheat Sheet Series

通过网络发送数据

通过网络向任何方向发送的所有内容都可以被攻击者读取。某些数据使攻击者更容易编译用户帐户上的关键信息,以帮助他们绕过登录和密码重置限制。因此,在密码重置过程中,尽量不要通过网络发送用户自己输入的帐户信息(如用户名、电子邮件等)!

例如:如果您通过电子邮件向用户发送密码重置链接,请不要以任何方式将用户名包含在密码重置表单中!用户不必在窗体上看到他们的用户名,因为非恶意用户已经知道他们的名字。使攻击者尽可能难以收集更多信息。

关于密码重置令牌

密码重置令牌允许用户重置密码,而无需提供有关用户验证的固有安全信息。因此,它们应该是安全的。应该很难猜到这样的代币。令牌也应仅在短时间内有效,并且在用户成功重置密码后应无效。

记录用户操作

仅靠日志记录无法阻止任何攻击,但它可以更轻松地确定攻击是否发生以及攻击者如何试图绕过安全性。您还可以使用日志来确定帐户是否真的被劫持,以及是否必须将其归还给合法用户。您可以记录的操作包括: 安全问题是如何得到解答的?与发送 e-amil 的时间相比,何时访问密码重置链接?有失败的尝试吗?

双因素身份验证

在两个或多个单独的设备上通过两种或多种不同的方式执行身份验证过程总是更安全的。如果用户想要重置密码,您可以要求他们输入通过短信、Messenger 或类似方式发送给他们的验证码。这使得攻击者很难绕过验证过程,因为他们需要对另一台设备进行物理访问。 另一方面,它要求用户提供有关与他们联系的其他信息,这并不欢迎每个人

安全的密码

NIST密码标准

NIST 密码标准(也称为特殊出版物 (SP) 800 系列)是为实施安全密码系统提供建议的指南。

密码规则

以下是最新的NIST标准提出的一些最重要的建议:

  • 无组成规则
    例如,不要要求用户在其密码上使用至少一个大写字母和一个特殊字符。 给他们机会,但不要强迫他们!

  • 没有密码提示
    如果您希望人们有更好的机会猜到您的密码,请将其写在屏幕上的便条上。

  • 没有安全问题 安全问题
    (也称为基于知识的身份验证 (KBA))已过时。 问用户“你的宠物叫什么名字?”或类似的东西来检查它是否真的是他,是非常不安全的。

  • 无需更改密码如果您希望用户遵守并选择较长、难以猜测的密码,则不应让他们在一段时间后不必要地更改这些密码。

  • 最小长度为 8 个字符 现在的安全密码长度应至少为 8 个字符(最多 64 个字符
    )。 这是最低限度,而不是最高限度!

  • 支持所有 UNICODE 字符 您应该允许在密码中使用所有类型的 UNICODE 字符
    。 这还包括表情符号和空格。

  • 力量计 在密码创建页面添加强度计
    ,帮助用户选择强而安全的密码。

  • 根据已知的错误选择检查密码

    • 从以前的违规语料库中获取的密码

    • 字典单词

    • 重复或连续字符(例如“aaaaaa”、“1234abcd”)

    • 特定于上下文的词语,例如服务名称、用户名及其衍生词

可用性

除了上述建议外,NIST标准还建议提高密码表单的可用性,以增加用户选择强大且安全的密码的可能性。其中一些是:

  • 允许粘贴到密码输入中 用户在输入
    密码时应该能够使用“粘贴”功能。 由于这有利于使用密码管理器,因此也增加了用户选择强密码的可能性。

  • 允许显示密码 密码输入应具有显示输入密码的选项,以帮助用户成功输入密码

  • 提供强度计 在密码创建页面上添加强度计
    ,以帮助用户选择强而安全的密码。

0x04

使用随机密码生成,创建包含如下条件的密码。

您的密码安全吗?

你呢?您的密码安全吗?

有些网站允许测试您的某个帐户是否在过去的数据泄露中被泄露。
转到每个示例的 Have I Been Pwned 或 DEHASHED,并测试您的帐户是否遭到破坏。 如果是这样,最好立即更改密码!

您可以做些什么来提高帐户的安全性?

  • 对不同的帐户使用不同的密码 不要对多个帐户使用相同的密码,而是为每个帐户
    使用不同的密码是一件好事。

    • 使用密码短语
      使用密码生成器(如 Diceware)生成密码短语。 密码短语是由多个单词组成的密码,而不是随机生成的字符序列。 这使得我们人类更容易记住它们。顺便说一句:时间越长越好!

    • 使用密码管理器 如果您不记得所有不同的密码,请使用密码管理器
      创建一个密码,然后安全地存储您的密码。

  • 使用双因素身份验证 如果可能,请使用双因素身份验证
    方法为您的帐户添加额外的安全层。

 

存储密码

创建强大且安全的密码后,还必须以安全的方式存储密码。 NIST 提供了有关应用程序应如何处理密码以及如何安全地存储密码的建议。

密码应该如何存储?

  • 首先:使用加密和受保护的通道来请求密码
    验证者在请求记忆的机密时应使用经批准的加密和经过身份验证的受保护通道 以提供对窃听和 MitM(中间人)攻击的抵抗力。

  • 抵御离线攻击 密码应以能够抵御离线攻击
    的形式存储。

  • 使用盐
    在存储密码之前,应对其进行盐渍处理。 盐的长度应至少为 32 位,并且应任意选择,以最大程度地减少存储哈希之间的盐值冲突。

  • 使用哈希
    在存储密码之前,应使用单向密钥派生函数对其进行哈希处理。 该函数将密码、盐和成本因子作为输入,然后生成密码哈希。
    合适的密钥派生函数示例:

    • 基于密码的密钥派生函数 2 (PBKDF2)(尽可能大,至少⇒ 10.000 次迭代)

    • 气球

    • 密钥派生函数应使用经批准的单向函数,例如:

      • 密钥哈希消息身份验证代码 (HMAC)

      • SP 800-107 中任何批准的哈希函数

      • 安全哈希算法 3 (SHA-3)

      • CMAC公司

      • Keccak 消息验证码 (KMAC)

      • 可定制的 SHAKE (cSHAKE)

      • ParallelHash (英语)

  • 内存硬键派生函数 使用内存硬键派生函数
    ,进一步增加执行攻击所需的成本。

  • 高成本因子 密钥派生函数的成本因子
    (迭代计数)应与验证服务器性能允许的最大一样大。(至少 10.000 次迭代)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/178628.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安企神局域网监控软件,员工电脑终端的安全管理软件

安企神局域网监控软件,员工电脑终端的安全管理软件 安企神局域网监控软件下载使用 公司老板其实最怕的就是公司机密遭到泄露,而一般泄露的方法都是通过一些通讯软件而泄露出去的,如微信、qq等等,所以很多老板都想知道有什么软件…

idea 配置checkstyle全过程

checkstyle是提高代码质量,检查代码规范的很好用的一款工具,本文简单介绍一下集成的步骤,并提供一份完整的checkstyle的代码规范格式文件,以及常见的格式问题的解决方法。 一,安装 打开idea的文件选项,选择设置&…

Intel oneAPI笔记(1)--oneAPI简介、SYCL编程简介

oneAPI简介 Intel oneAPI是Intel提供的统一编程模型和软件开发框架。 它旨在简化可充分利用英特尔各种硬件架构(包括 CPU、GPU 和 FPGA)的应用程序的开发 oneAPI一个重要的特性是开放性,支持多种类型的架构和不同的硬件供应商,是…

记录一次时序数据库的实战测试

0x1.前言 本文章仅用于信息安全防御技术分享,因用于其他用途而产生不良后果,作者不承担任何法律责任,请严格遵循中华人民共和国相关法律法规,禁止做一切违法犯罪行为。文中涉及漏洞均以提交至教育漏洞平台。 0x2.背景 在某次Edus…

【Redis】Redis常用命令-getsetkeysexistsexpirettltype

文章目录 读取文档注意事项set命令get命令全局/通用命令KEYSEXISTSDELEXPIRETTLTYPE 读取文档注意事项 官方文档链接:https://redis.io/ 注意:redis的命令不区分大小写 在redis文档给出的语法格式说明: []:相当于一个独立的单元&a…

golang 发起 http 请求,获取访问域名的 ip 地址(net, httptrace)

前言 今天碰到了个需求,我要知道程序对外访问的 http 请求域名的 ip 地址。 直接查看 golang 的 net/http 包,发现 Response 中并没有我想要的 ip 信息。 考虑到在 OSI 七层模型中,ip 是网络层协议,而 http 是应用层协议。去翻…

计算机视觉的监督学习与无监督学习

什么是监督学习? 监督学习是一种机器学习算法,它从一组已标记的 合成数据生成器中生成的训练数据中学习。这意味着数据科学家已经用正确的标签(例如,“猫”或“狗”)标记了训练集中的每个数据点,以便算法可…

设计模式总结

1.将软件与设计模式比拟为城市与建筑模式,那么在面向对象的解决方案里,我们将对象和接口看成墙壁和门窗,模式的核心在于提供了相关问题的解决方案。 在软件设计中可能会遇到很多类似的问题,在每次遇到类似问题时我们不必全都新想…

MYSQL 多表联查详解

目录 一、一个案例引发的多表连接 二、笛卡尔积的错误和与正确的多表查询 2.1、笛卡尔积错误展示 2.2、笛卡尔积解决方法 2.3、练习 三、多表查询分类 3.1、等值连接 vs 非等值连接 3.2、自连接 vs 非自连接 3.3、内连接 vs 外连接 内连接(inner join&…

第2篇 机器学习基础 —(4)k-means聚类算法

前言:Hello大家好,我是小哥谈。聚类算法是一种无监督学习方法,它将数据集中的对象分成若干个组或者簇,使得同一组内的对象相似度较高,不同组之间的对象相似度较低。聚类算法可以用于数据挖掘、图像分割、文本分类等领域…

记录--这个前端Api管理方案会更好?

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 简介 大家好,前端小白一枚,目前接触后台管理系统比较多,经常遇到不同对象的增删改查的接口,如何对Api进行一个有比较好的管理是个问题。在学习偏函数的时…

C#中使用LINQtoSQL管理SQL数据库之添加、修改和删除

目录 一、添加数据 二、修改数据 三、删除数据 四、添加、修改和删除的源码 五、生成效果 1.VS和SSMS原始记录 2.删除ID2和5的记录 3.添加记录ID2、5和8 4.修改ID3和ID4的记录 用LINQtoSQL管理SQL Server数据库时,主要有添加、修改和删除3种操作。 项目中创…

app开发之后需要做什么

在完成app的开发之后,还有一系列的工作需要进行,以确保app的顺利上线和用户的良好体验。下面将从原理和详细介绍两个方面来介绍app开发之后需要做的工作。 一、原理介绍 1. 测试与调试:在app开发完成后,需要进行全面的测试与调试…

[论文笔记]RetroMAE

引言 RetroMAE,中文题目为 通过掩码自编码器预训练面向检索的语言模型。 尽管现在已经在许多重要的自然语言处理任务上进行了预训练,但对于密集检索来说,仍然需要探索有效的预训练策略。 本篇工作,作者提出RetroMAE,一个新的基于掩码自编码器(Masked Auto-Encoder,MAE)…

十种排序算法(1) - 准备测试函数和工具

1.准备工作 我们先写一堆工具&#xff0c;后续要用&#xff0c;不然这些写在代码里可读性巨差 #pragma once #include<stdio.h>//为C语言定义bool类型 typedef int bool; #define false 0 #define true 1//用于交互a和b inline void swap(int* a, int* b) {/*int c *a…

AutoDL 云/本地部署 百川2、GLM2

AutoDL 云上部署 百川2、GLM2 AutoDL 云上部署 百川2、GLM2配置环境体验常见问题huggingface访问不了&#xff0c;使用学术资源加速大文件上传&#xff0c;百度、阿里网盘都可CUDA 空间不足系统盘空间不足省钱绝招软件源 本地部署 百川2、GLM2根据显存大小选模型拉取docker镜像…

MySQL-----事务

事务的概念 事务是一种机制&#xff0c;一个操作序列。包含了一组数据库的操作命令&#xff0c;所有的命令都是一个整体&#xff0c;向系统提交或者撤销的操作&#xff0c;要么都执行&#xff0c;要么都不执行。 是一个不可分割的单位 事务的ACID特点 ACID&#xff0c;是指在可…

【Algorithm】最容易理解的蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)算法

看了不少解读和笔记&#xff0c;本文把最容易理解的解读做个总结。 1. 蒙特卡洛方法 蒙特卡洛方法(Monte Carlo method)&#xff0c;是一种“统计模拟方法”。20世纪40年代&#xff0c;为建造核武器&#xff0c;冯.诺伊曼 等人发明了该算法。因赌城蒙特卡洛而得名&#xff0c…

R语言用jsonlite库写的一个图片爬虫

以下是一个使用R语言和jsonlite库下载图片的程序。首先&#xff0c;我们需要导入jsonlite库和options()函数&#xff0c;然后将代理服务器的主机名和端口号设置为"duoip"和"8000"。接着&#xff0c;我们将URL设置为"https://yun.baidu.com/"&…

LeetCode 143. 重排链表(双指针、快慢指针)

题目&#xff1a; 链接&#xff1a;LeetCode 143. 重排链表 难度&#xff1a;中等 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln-1 → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → … 不…