CTF Writeup SECCON 令和CTF » 履歴 » バージョン 1
kanata, 2025/04/13 15:29
1 | 1 | kanata | # CTF Writeup SECCON 令和CTF |
---|---|---|---|
2 | |||
3 | SECCON 令和CTFがありました。 |
||
4 | |||
5 | {{rawhtml(<blockquote class="embedly-card"><h4><a href="http://score-reiwa.seccon.jp/">SECCON 令和CTF</a></h4><p>null</p></blockquote><script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script>)}} |
||
6 | |||
7 | {{toc}} |
||
8 | |||
9 | # 結果&感想 |
||
10 | |||
11 | 簡単に言うとダメだった。1問くらい…1問解きたかった悔しい… |
||
12 | 以下、反省文 |
||
13 | |||
14 | # Misc 零は? |
||
15 | |||
16 | サーバにncで繋ぐと方程式が出てくるみんな大好き計算問題 |
||
17 | 100回計算が必要のようだ |
||
18 | |||
19 | ``` |
||
20 | $ nc zerois-o-reiwa.seccon.jp 23615 |
||
21 | [1/100] |
||
22 | 0=12-? |
||
23 | ?=12 |
||
24 | [2/100] |
||
25 | ・ |
||
26 | ・ |
||
27 | ・ |
||
28 | ``` |
||
29 | |||
30 | それで、作ったシェルスクリプトが以下 |
||
31 | これ系問題は、昔作った類似問題のソルバを使い回しができて好き |
||
32 | |||
33 | 方程式なのだけれど、正しい値を求めるためにxの値を1個ずつ増やす総当たり方式でつくった |
||
34 | |||
35 | これでいけそう…だと思ってた(実際、これで98問目までいった) |
||
36 | |||
37 | ```bash |
||
38 | |||
39 | #!/bin/bash |
||
40 | |||
41 | exec 5<>/dev/tcp/153.120.18.15/23615 |
||
42 | |||
43 | for I in {1..101} |
||
44 | do |
||
45 | cat 0<&5>test.txt & |
||
46 | sleep 3 |
||
47 | pkill cat |
||
48 | Q=`cat test.txt|awk -F= '{print $2}'` |
||
49 | echo Debug [${I}] $Q |
||
50 | C=0 |
||
51 | while : |
||
52 | do |
||
53 | if [ 0 == `echo $Q|sed s/\?/$C/g |bc` ] |
||
54 | then |
||
55 | ANSWER=$C |
||
56 | break |
||
57 | fi |
||
58 | : $((C++)) |
||
59 | done |
||
60 | echo ${ANSWER} >&5 |
||
61 | echo Debug [${I}] $Q answer is $ANSWER |
||
62 | done |
||
63 | |||
64 | exit 0 |
||
65 | ``` |
||
66 | |||
67 | ただ98問目… |
||
68 | |||
69 | ``` |
||
70 | [98] 17*53-23+23+60*92-59+38*34-19-63+39*5+71-67*75+39*4-97+72*24-60-80+41*8+81*40-3+33*84-16+7*5-28-96*78+48+12*89-45+77*74-29-80+75*37*56+51-43*33+78-25+86-38*59+4-58*65*7+19-49+26*45-25+67*9-90-83+12*99-33+4*88*64+2-31*32+79-87+77*25-50+56-4*28*28+8-82+33-18*26+41*5-58-8*35+79-4-? |
||
71 | ``` |
||
72 | |||
73 | これ、答えは 157961 なんだけど、総当たりで計算しているとタイムアップしちゃう。。 |
||
74 | あぁこれシェルスクリプトの処理速度の限界かしらと思ってpythonで書き直そうとして無駄に時間を溶かしてしまった |
||
75 | |||
76 | よくよく考えると、最後が -? のパターンは総当たりすることなく自明なので、個別に処理を書けば回避できたと思う。惜しい。 |
||
77 | |||
78 | |||
79 | # Forensic 新元号発表 |
||
80 | |||
81 | pdfが与えられて中身がこれ |
||
82 | |||
83 |  |
||
84 | |||
85 | あぁ~伝統のQRコードが見えますねぇw |
||
86 | |||
87 | binwalkで調べる |
||
88 | |||
89 | ``` |
||
90 | $ binwalk newera.pdf |
||
91 | |||
92 | DECIMAL HEXADECIMAL DESCRIPTION |
||
93 | -------------------------------------------------------------------------------- |
||
94 | 0 0x0 PDF document, version: "1.5" |
||
95 | 523 0x20B Zlib compressed data, default compression |
||
96 | 1322 0x52A Zlib compressed data, default compression |
||
97 | 8552 0x2168 Zlib compressed data, default compression |
||
98 | 9827 0x2663 JPEG image data, JFIF standard 1.01 |
||
99 | 9857 0x2681 TIFF image data, big-endian, offset of first image directory: 8 |
||
100 | 52646 0xCDA6 JPEG image data, JFIF standard 1.01 |
||
101 | 52676 0xCDC4 TIFF image data, big-endian, offset of first image directory: 8 |
||
102 | 65317 0xFF25 Zlib compressed data, default compression |
||
103 | 65788 0x100FC Zlib compressed data, default compression |
||
104 | 78688 0x13360 Zlib compressed data, default compression |
||
105 | ``` |
||
106 | |||
107 | それで画像を取り出す(binwalk使って取り出そうとしたけど上手くいかなくて、めんどくせぇddだ!ってなった) |
||
108 | |||
109 | ``` |
||
110 | $ cat newera.pdf | dd bs=1 skip=9827 >1.jpg |
||
111 | ``` |
||
112 | |||
113 |  |
||
114 | |||
115 | おー見えた見えた。中央が令和で白抜きされているけど右半分のデータ部は生きてそうだからこの状態でも読めるかなと思ってた |
||
116 | |||
117 | [QRazyBox](https://merricx.github.io/qrazybox/)で調べる |
||
118 | |||
119 | >このWebサービを使えばQRコードが結構破損してても読めるよ! |
||
120 | |||
121 |  |
||
122 | |||
123 | あぁ~微妙に…微妙にフラグが見える…でタイムアップ(眠みがすごい) |
||
124 | |||
125 | 他の方のwriteupを見ると、白抜きされた令和を埋める画像が入っていたみたいだから、それを合成すればいける気がしますね。。 |