LoginSignup
10
8

More than 3 years have passed since last update.

SECCON 令和CTF Writeup

Last updated at Posted at 2019-04-30

nicklegrで個人参加。
210点で97位(858チーム中)でした。

image.png

image.png

意外と良問揃い?
鯖落ちもお祭りのうち。CTFあるある。

フラグの例は? (Misc)

平成最後の最後、令和最初のSECCON CTFにようこそ。 フラグはSECCON{reiwa}です。

SECCON{reiwa}

bREInWAck (Misc)

元号が変わる。記号も変わる。
参考: https://ja.wikipedia.org/wiki/Brainfuck

間違いなさそうなところは決め打ち、残りは総当たりして全パターンをWebインタプリタで実行。

# coding: utf-8

require "pp"

input = 
"令和和和和和和和和和和和和和和和和「令和
和和和和令和和和和令和和和和和和和令和和
和和和和令和和平平平平平成」令和和和。令
和和和和和。成成。。平成成成成。成。令令
和和和和和和和和和和和。令和和。平平平和
和和和。令和和。和和和和。令令和和和和和
和和和和和和和。平平平和和和和和和和和和
和和和和。成成成成成成成成。令成成成成成
成成成。令令。成成成成成。成成成成成成。
令和。平平和和。令令令和和和和和和和和和
和。"

%w|< > + -|.permutation(4) do |a|
  pp a

  str = input.dup
  str.gsub!("\n", "")
  str.gsub!("平", a[0])
  str.gsub!("成", a[1])
  str.gsub!("令", a[2])
  str.gsub!("和", a[3])
  str.gsub!("「", "[")
  str.gsub!("」", "]")
  str.gsub!("。", ".")

  puts str
end
["<", "-", ">", "+"]
>++++++++++++++++[>+++++>++++>+++++++>++++++>++<<<<<-]>+++.>+++++.--..<----.-.>>+++++++++++.>++.<<<++++.>++.++++.>>++++++++++++.<<<+++++++++++++.--------.>--------.>>.-----.------.>+.<<++.>>>++++++++++.
SECCON{bREIn_WAnic!}

零は? (Misc)

nc zerois-o-reiwa.seccon.jp 23615

SECCON Beginnersであったようなやつ。

 % nc zerois-o-reiwa.seccon.jp 23615
[1/100]
0=8-?
?=8
[2/100]
0=78*55-?
?=4290
[3/100]
0=40*96+?-3903
?=63
[4/100]
0=56*87+82-?-4879
?=
...

方程式のソルバーを知らないので、?を総当たりで数値に置き換えてevalした。
たまにやたら大きな解でタイムアウトするのがいやらしい。
最後に-?が来る場合は探索する必要がないので、それを入れたら通った。

最後に+?もあるようだけど通ったときはたまたま間に合ったらしい。
ラスト2問の答えが必ず0で通るのは令(0)和(0)なんだろうか。

require "pp"
require_relative "pwnlib"

host = "zerois-o-reiwa.seccon.jp"
port = 23615

PwnTube.open(host, port) do |tube|
  j = 1
  loop do
    puts "Stage #{j}:"
    s = tube.recv_until(/0=(.+)\n/)
    s =~ /0=(.+)\n/
    expr = $1

    tube.recv_until("?=")

    puts expr

    ans = nil
    if expr =~ /(.+)-\?$/
      ans = eval($1)
      puts "simple: #{ans}"
    else
      for i in 0..1000
        expr2 = expr.gsub("?", "(#{i.to_s})")
        ret = eval(expr2)
        if ret == 0
          puts "found: #{i}"
          ans = i
          break
        end
      end

      if !ans
        for i in 0..1000000
          expr2 = expr.gsub("?", "(#{i.to_s})")
          ret = eval(expr2)
          if ret == 0
            puts "found: #{i}"
            ans = i
            break
          end
        end
      end
    end

    tube.sendline(ans.to_s)
    j += 1
  end
end
 % ruby zero_sum.rb
[*] connected
Stage 1:
78-?
simple: 78
Stage 2:
31*11-?
simple: 341
Stage 3:
24*?-96-960
found!: 44
Stage 4:
25+45-13*?+307
found!: 29
Stage 5:
?*76+17-5+49-2417
found!: 31
Stage 6:
?+94*33-13+67-74-3129
found!: 47
Stage 7:
90*66+69-?-68*87+35-120
found!: 8
...
Stage 98:
84+6-8*30*47-43+4+80*80-72-53*9+66*84+94-22-9+6*65+97*20-7-68+52*75*10+68-84+53-87*1-17+94*4+19-78*25-89*24+19-64*52+37-44+97*55-99+97*12*23-13+60-42+73*4*92-92+50+18*67-25*99-25+30-29*57+92+72-31*44+64-77*74-97*92+76+44*77-75-2*65+55-50+8*5+32*68-39+99*92-80-15+6*89-88*2+82+11-?
simple: 89475
Stage 99:
79+73*52-1+86-95*55+78-9*84*14+49-81-91+74*71*33-18+1+54*65-13*91+90-42+76-92*19+66*76-62+25*26-67-44*21+56+71-76*65+50-48*52+70-20*93-9*11+11*21+65-31-98+75*59+91-1*7+22*96-25*76-83+42-98*42+29-90+14*32*6-97+61+48*23-20-92+20*52+52-12*82*82-14+38*42+91-62*31+63-69+44-56*98+5*53-?*0-53-76870
found!: 0
Stage 100:
93+57*17-73*87-62+18-64*28+67-60*29+30+36*19-59*72+29-55+70-60*12+23-55*79*61+44-55-31*39+25-23*47+99+89-56*44+94-51*58*17+23-92-19+40*56*26+62-98-33*11+43-11*64+90*31+74-44*34+90-36+64*40-41+65-16*63*9-19+97+43*69-92-1*49+81*71-11+44+87-71*59*12+90-49+65-21*46+78*8-36*13+63-62-81*36+0*?+8-49+325901
found!: 0
Stage 101:
"Congratulations!\nThe flag is SECCON{REIWA_is_not_ZERO_IS}.\n(Enter RETURN key if connection is not disconnected)\n"
[*] connection closed

新元号発表 (Forensics)

わかりやすい。

image.png

PDFから画像を抽出するWebサービスがあったのでバラすと

Page-1-Image-1.png

Page-1-Image-2.png

うーん?

reiwaVote (Web)

ヤバいやつ混ざってて草。

image.png

image.png

他の方のWriteup

10
8
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8