SECCON 令和CTF Writeup

http://score-reiwa.seccon.jp/challenges

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10750/49603e02-9e9c-9b3f-3a48-243a935aac7d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10750/622cc30f-6b51-fbf8-cccc-b36b6be73e89.png)

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

# フラグの例は？ (Misc)
> 平成最後の最後、令和最初のSECCON CTFにようこそ。 フラグはSECCON{reiwa}です。

```
SECCON{reiwa}
```

# bREInWAck (Misc)
> 元号が変わる。記号も変わる。
> 参考: https://ja.wikipedia.org/wiki/Brainfuck

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

```ruby
# 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)`なんだろうか。

```ruby
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10750/125b8f5d-dbfb-d373-c1a1-b5cb16d6c045.png)

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

![Page-1-Image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10750/03a8cd90-7daa-334e-7587-766ab82625ba.png)

![Page-1-Image-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10750/80428985-d3e6-6576-6c5f-987e4fe210f0.png)

うーん？

# reiwaVote (Web)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10750/6a1876b4-7411-b546-8ba1-018af3e36c9d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10750/6e00b95d-9ade-e5bc-a22d-7b00853ee354.png)

# 他の方のWriteup
- https://twitter.com/xrekkusu/status/1123272920917086209
- https://twitter.com/xrekkusu/status/1123273674348351489
- https://twitter.com/maytheplic/status/1123271591217876994
- https://twitter.com/Bono_iPad/status/1123276699213287426
- http://yuta1024.hateblo.jp/entry/2019/05/01/022354
- https://kusuwada.hatenablog.com/entry/2019/05/01/022016
- https://qiita.com/kusano_k/items/402ebf004e8f9463cb17
- http://shift-crops.hatenablog.com/entry/2019/05/01/024011
- https://gist.github.com/megumish/545019f534392c3e47b8db1ec6212b89
- https://qiita.com/shiracamus/items/3d3ec5d95c8384ccf424
- http://xor.zoku-sei.com/Entry/72/
- https://raintrees.net/news/138
- https://kanpapa.com/today/2019/05/seccon-reiwa-ctf.html
- https://ptr-yudai.hatenablog.com/entry/2019/05/01/020001