WebGoat攻略 for Mac(3)

本文详细介绍了在Mac环境下,针对WebGoat的认证中断(Broken Authentication)部分的实战攻略,包括认证绕过、JWT令牌的结构与利用、密码重设等场景。通过抓包、修改参数、JWT解密与编码等方式,演示了如何成功完成各个安全挑战。

WebGoat攻略 for Mac(1)
WebGoat攻略 for Mac(2)

一、题目攻略

A2.Broken Authentication(认证中断)

1.Authentication Bypasses(认证绕过)

  1. 认证绕过

认证绕过以多种方式发生,但通常利用配置或逻辑中的一些缺陷。篡改以达到正确的条件。如隐藏输入、移除参数、强制浏览等。

  1. 2FA密码重设

任务是成功获得更改密码的权限。
在这里插入图片描述
首先随便输入一些数,然后点击Submit进行抓包,如图所示。
在这里插入图片描述
上面例子是把密保问题的相关输入删掉(即删掉secQuestion0和secQuestion1),但是我试了一下不行,然后尝试修改参数名,改为secQuestion00与secQuestion11,如图所示。
在这里插入图片描述
然后重发送,显示成功绕过认证,任务完成。
在这里插入图片描述

2.JWT tokens(JWT代币)

  1. JWT令牌的结构

令牌是base64-url编码的,由header.claims.signature三部分组成。下面是示例。

JWT header(头部):

{  "alg":"HS256",  "typ":"JWT"}

JWT payload(声明):

{  	"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"}

签名(HS256为例):

HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload),secret)
  1. 认证并获取JWT令牌

会话流程:
1、用户端登陆,用户名和密码发往服务器。
2、服务器验证后生成JSON头部和声明并加密,生成JWT,此时服务器并没有保存登录状态信息。
3、服务器将JWT返回客户端(响应)。
4、客户端将JWT写在HTTP请求头部的Authorization字段中。
5、服务器对JWT验证,若成功确定用户登录状态。
6、服务器返回响应。

Base64 URL编码中,“+“会变成”-”,“/“会变成”_”,"="会被去掉。

  1. JWT签约

任务是取得管理员权限并重置投票。
在这里插入图片描述
点击上方的垃圾箱(重置投票),显示只有管理员才有权限操作。抓包抓到重置时的POST:
在这里插入图片描述

很显然,图片中的access_token后面的参数就是加密后的JWT,使用软件解密后可得(JWT解密网站)
在这里插入图片描述
所以我们需要吧admin从false改为true,并生成JWT。可是HS512需要密钥,这是我们直接把alg改为none,就可以使用简单的Base64生成JWT了。

使用Base64编码网站,首先编码:

{ 
	"alg":"none"
}

结果为:

ewogICJhbGciOiAibm9uZSIKfQ==

然后编码:

{  
	"iat": 1619539327,
 	"admin": "true",
	 "user": "Tom"
	 }

结果为:

ewogICJpYXQiOiAxNjE5NTM5MzI3LAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJUb20iCn0=

将"=“删掉,并在后面加入”.",生成以下结果,将结果替换access_token的参数,如图所示。
在这里插入图片描述
然后重发送,任务完成。
在这里插入图片描述

  1. JWT裂纹

任务是尝试查找密钥并提交新密钥,用户名更改为WebGoat。
在这里插入图片描述
既然题目中给出了JWT,那我们直接使用hashcat进行爆破。hashcat安装方法如下,终端输入:

brew search hashcat
brew install hashcat
brew info hashcat

查看hashcat版本,正常显示版本则说明安装成功。

hashcat --version

然后下载常见单词top10000作为字典,在Github下载。

将题目中给出的JWT保存为txt文件,然后终端输入命令:

hashcat -m 16500 JWT.txt -a 3 -w 3 google-10000-english.txt 

运行完之后可以加"–shwo"来看结果:

hashcat -m 16500 JWT.txt -a 3 -w 3 google-10000-english.txt  --show

在这里插入图片描述
然后进入(JWT加密网站)进行加密,按照要求将JWT中的username后面的参数改为"WebGoat",然后生成JWT令牌。
在这里插入图片描述
输入令牌,任务完成。
在这里插入图片描述
由于JWT令牌会有时间限制,如果解密时间过长,可能显示令牌过期,这时候刷新,然后直接拿给出的令牌修改成WebGoat就可以了(密钥并不会改变,还是之前破解出来的)。

或者可以修改JWT令牌中的结束时间(可以用python得到现在的时间)。

  1. 刷新令牌

一般来说有两种类型的令牌:访问令牌和刷新令牌。刷新令牌可能会过期,但其寿命要长得多。

任务是从去年的违规行为中,找到让汤姆支付的漏洞。
在这里插入图片描述
点击Checkout,抓包。
在这里插入图片描述
在这里插入图片描述
结果显示缺少JWT令牌,也就是说现在处于未登录状态。

从题目链接中找到了之前的登录信息:
在这里插入图片描述
进入JWT解密网站对JWT进行解码,修改加密方式为none(因为我们没有获得密钥),然后再修改一下时间。

用python读取一下现在的时间:

import time
time.time()

在这里插入图片描述
然后使用Base64编码网站进行编码,按照之前的方法生成JWT就可以了。
在这里插入图片描述
点击重发送,任务完成。
在这里插入图片描述

  1. 最后的挑战

任务是删掉Ton的推特。
在这里插入图片描述
抓到Delete Tom的包之后,把里面的JWT解码后发现header里面存在kid值,而通过webgoat的源码,我们看到kid是可以进行注入的。它的Java代码中直接使用了:

"SELECT key FROM jwt_keys WHERE id = '" + kid + "'"

并没有任何过滤。

所以可以构造命令:

1' UNION SELECT 'dG9t' FROM jwt_keys WHERE id='webgoat_key

其中’dG9t’是’tom’的base64编码,因为服务器中没有id=‘1’的用户,所以前面不会不会发生返回(原先的返回值为Jerry账户的密钥的Base64),同时UNION连接的SELECT是指定了返回结果为dG9t。这时就可以在密钥中输入tom。然后把DATA中所有jerry改为tom,生成新的JWT。
在这里插入图片描述
把生成的新JWT放入token中。
在这里插入图片描述
重发送,任务完成。
在这里插入图片描述

3.Password reset(密码重设)

  1. 使用WebWolf的电子邮件功能

(差点都忘记了还有WebWolf这回事)

任务是:首先启动WebWolf,在下面的重置页面中发送电子邮件至username@webgoat.org,然后打开WebWolf并阅读电子邮件并使用您的用户名和电子邮件中提供的密码登录。
在这里插入图片描述
首先点击Forgot,然后输入自己的Webgoat邮箱,登录WebWolf,查看邮件中的新密码。
在这里插入图片描述
在这里插入图片描述
然后返回Account Access界面,用新密码登录,任务完成。
在这里插入图片描述
但是题目上面并没有变成绿色(估计是bug)。

  1. 安全问题(1)

任务是检索另一个用户(如tom,admin,larry)的密码。
在这里插入图片描述
直接用Brup Suite抓包,然后进行颜色字典爆破就可,直接找到admin的颜色为green。任务完成。
在这里插入图片描述

  1. 安全问题(2)

随便查看几个,任务完成。
在这里插入图片描述

  1. 创建密码重设链接

任务是重置tom密码并登录(Tom总是在带有链接的电子邮件后立即重设密码)。
在这里插入图片描述
点击Forget,进入到这个界面。
在这里插入图片描述
输入邮箱后,它会往WebWolf发送一个邮件。
在这里插入图片描述
点击link,会进入到重设密码的界面。
在这里插入图片描述
观察到重设密码界面的链接中可能存在身份凭证

https://127.0.0.1:8080/WebGoat/PasswordReset/reset/reset-password/18320e2f-8bc2-4e20-a1ec-1f32557a697f

所以我们把目标放在获取tom的身份凭证上。我们抓取发送tom邮件的包,发现发送邮件后,会生成重设密码界面的链接,并把信息返回Host,我们只需要把Host的端口改为9090,就可以在WebWolf的Incoming requests看到重设密码界面的链接了。
在这里插入图片描述
在这里插入图片描述
把链接后面的身份凭证置换自己重设密码界面的身份凭证,修改密码,然后返回登录,任务完成。
在这里插入图片描述

  1. 如何防止滥用密码重设功能(略)

4.Secure Passwords(安全密码)

  1. NIST密码标准

介绍了一些了安全密码(强密码)的规则(略)。

  1. 暴力破解你的密码需要多长时间

任务是设置一个强密码。
在这里插入图片描述
emmm,任务完成。
在这里插入图片描述

  1. 你的密码安全吗(略)
  2. 存储密码(略)

WebGoat攻略 for Mac(4)
WebGoat攻略 for Mac(5)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值