CTFctfCTF

CTFlearn: admin gate first

2018-07-19  本文已影响15人  SEVEN_9e53

题目来源:https://ctflearn.com/index.php?action=find_problem_details&problem_id=541

原题:

admin gate first

Flag is safe in the admin account info

http://ec2-54-187-57-106.us-west-2.compute.amazonaws.com/admingatefirst/

honestly i don't know the flag and i want to know how to get it .. if you figured out comment the way below (i will leave the flag blank) help :*

点开题目给出的网站,我们可以看到一个登入界面。页面上给出了一个test用户的用户名和密码。根据题目的提示,我们的目标是以admin身份登入这个页面,网页应该就会返回flag。

首先我们尝试用SQL注入绕过验证,但是并不能绕过验证而登入admin用户。输入页面给出的test用户名和密码进入页面,页面结果如下:

可以看到页面返回了一列JSon信息,其中包括了test用户的角色。用Burp Suite进行抓包,刷新页面:

我们可以看到刷新页面后网页用token来识别用户的身份。可以看到"Authorization: Bearer",说明这个token是JWT(JSON WEB Token)。利用JWT解码器来解码这个token(https://jwt.io/):

可以看到前两部分是编码的格式和token中的数据。但是最后的签名验证却失败了。这是因为JWT的HS256格式会接收一个密钥来签名。如果我们不知道密钥我们就不能构造出自己的token。

接下来我们就要对JWT进行攻击,参考了这篇文章:https://www.sjoerdlangkemper.nl/2016/09/28/attacking-jwt-authentication/

首先我尝试了将JWT第一个字段中的加密模式改为none,最后的签名字段留为空白。将这个token传递给了页面。但是页面返回了500,说明我们的token不能被验证。

接着我尝试用Brute force来破解HS256的密钥。利用了这个工具:https://github.com/Sjord/jwtcrack

以rockyou为字典进行破解:

程序很快返回了结果,密钥是123456。

知道了密钥后我们就可以构造出自己的token。将这个密钥输入到JWT解码器中,并修改data中的用户信息:

再将这个token传递给网页:

可以看到网页返回了flag值:

{"username":"admin","role":"admin","flag":"J!W!T#S3cr3T@2018"}

上一篇下一篇

猜你喜欢

热点阅读