Skip to content

Instantly share code, notes, and snippets.

@matsubara0507
Last active November 17, 2015 02:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matsubara0507/f2e47651a8c60c9d1ca7 to your computer and use it in GitHub Desktop.
Save matsubara0507/f2e47651a8c60c9d1ca7 to your computer and use it in GitHub Desktop.
IGGGで企画中の内部勉強会「Let's Play CTF」の資料

Let's Play CTF !


What is this?

  • IGGG企画の内部勉強会
  • CTFで体験してみよう!ぐらいのノリ
  • 私自身もほぼ初心者というコトに注意
  • 要するに楽しかったから広めたいぐらいの気持ち

What is CTF?


Jeopardy

  • CTF の種類の1つ(2つ中)
  • 様々な種類の問題を解く
    • Reversing(binary) : バイナリ解析
    • Exploit(pwn) : プログラムの脆弱性を突く
    • Web : Webサイトの脆弱性を突く
    • Network : パケット解析
    • Crypto : 暗号解読
    • Forensics : ディスクイメージなどの解析
    • Stegano : 音声や画像を解析
    • PPC : プロコンライク
    • Trivia : クイズ
    • Recon : ネットストーキング
    • Misc : その他
  • ポイントの高いチームの勝ち
    • 難易度ごとにポイントが違う

Techniqu


Reversing

  • 与えられたバイナリ(実行ファイルなど)を解析してFLAGを探す
  • アセンブラの知識
  • 解析ツールの知識
    • file, strings, objdump コマンドなど
    • バイナリエディタ(Stirling など)
    • デバッグツール(IDA Pro など)
  • 難しい問題はかなり根性らしい

例 :

配布されるファイル例

  • 何故か開けないので file コマンドをすると...
$ file iggg.zip
iggg.zip: PNG image data, 592 x 592, 8-bit/color RGBA, non-interlaced
  • PNGにリネームしてみてみる
  • しかしフラグは見当たらないので strings コマンドをしてみると...
$ strings iggg.png | grep FLAG
FLAG{example}

Exploit

  • プログラム(サーバー)の脆弱性をついてFLAGを得る
  • サーバーの裏で動いてるプログラムなんかが渡される
  • プログラムやコードを解析して脆弱性を探す
  • スタックオーバーフローとか
  • 脆弱性に関する知識
    • どのようなコードを書いてると何の脆弱性が生じるかとか
  • 勉強中

Web

  • Webサイトの脆弱性を突いてFLAGを得る
  • SQLインジェクションとか
  • 超簡単なのだとサイトのコードを見るだけとか...
  • ブラウザのディベロッパーツール(F12)
  • Javascript, html, css なんかを読めないと...
  • ネットワークに関する知識も(Cookieとか)
  • 苦手

Network

  • パケットを解析してFLAGをゲット
  • よくpcapファイルが配られる
  • pcapファイルはWiresharkというツールを使う
    • 使い方を知らないと
  • 通信技術の知識(UDPとか)

Crypto

  • テキストやデータを暗号解読してFLAGを得る
  • 現代暗号はもちろん(RSA, base64, ハッシュ etc)
  • 古典暗号も豊富(換字式, エニグマ etc)
  • 暗号理論系でないのも...(キー配列, 手書き, 数学)
  • なので知識+発想力
  • あと、プログラミングもできないと

  • RkxBR3tleGFtcGxlfQ==
  • 末尾に=がある
  • Base64な気がする
>>> import base64
>>> base64.b64decode('RkxBR3tleGFtcGxlfQ==')
'FLAG{example}'

Forensics

  • データ(ディスクイメージなど)の中のFLAGを探し出す
  • ファイル形式をよく知っていたり
  • 解析手法を知っていたりしないと
  • 簡単なのだと stringsgrep するだけとか
  • 意外と 7z とかでいけたりする

Stegano

  • 音声や画像を解析してFLAGを探す
  • 音声だと波形が文字になってたり
  • 実はモールス信号が混ざってたり
  • ノイズを除去して情報を取り出したりする
  • 画像だと超拡大したり
  • RGB値をいじったりする
  • QRコードの復元もこれに近いかしら
  • 意外と便利なツールが多い
    • stegsolve (なんか見つからない)

PPC

  • Professional Programming and Coding
  • 競技プログラミングに近い
  • だけど別にコードを提出するわけではないよ
  • 単体と言うよりはCryptoと混ざってたりする

Trivia

  • クイズ
  • 例:シェルスクリプトの先頭行によくある #! の名前は?(ans)
  • use Google power !

Recon

  • インターネットを駆使して指定された人物の情報を取得してくる
  • むずい
  • use Google power !

Let' s Play CTF

  • 常設CTFで遊ぼう !
  • Write up を読もう !
    • CTF Write-up で検索
    • なんか Github がある CTFs
  • Onlineの大会に出てみよう !
    • 日本最大規模 SECCON
    • CTFのいろんな情報がある CTFtimes
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment