SlideShare ist ein Scribd-Unternehmen logo
1 von 35
CTFでアレコレ
Fukui Tech 7.5
2017/02/25 (Sat)
@hama7230
WHOAMI
• @hama7230
• 東京の大学生
• 元福井の高専生
• CTF歴 1年6ヶ月
• CTFチーム
「TokyoWesterns」のpwn
要員
今日の内容
• CTFについて紹介
• CTFとは?
• CTFのメリット
• CTFの問題解説
1.forensic系問題
2.web系問題
3.時間余ったらlive ctfやるかも
CTFの紹介 (1/4)
• Capture The Flag (CTF)
• セキュリティ系の技術・知識を競うコンテスト
• コンテスト形式は複数あるが、問題を理解し攻略
してフラグを得ることが大きな目標
• Jeopady (クイズ形式)
• Attack & Defence (参加者同士の攻防戦)
• King of the Hills (陣地取り)
• 世界中でほぼ毎週開催されている
• (現在もBoston Key Party 2017が開催中)
CTFの紹介(2/4)
• 出題されるジャンル
• IT技術に関わる幅広い分野から出題される
• Web
• Forensic
• Reversing
• Recon
• Exploitation(Pwn)
• PPC
• Crypto
• Steganography
• Misc
CTFの紹介 (3/4)
• CTFをやると何が嬉しいか?
• 情報技術の勉強になる(建前)
• セキュリティ技術の勉強になる(建前)
• 純粋に楽しい娯楽(本音)
CTFの紹介 (4/4)
• 今日は、僕が見てきた問題の中から「勉強になっ
た」「面白い」と思った問題を幾つか紹介します
• 環境はLinuxを想定してます
• 問題を解くためにpythonなどを使用します
DEADNAS (1/13)
• Rescue Data 1: deadnas
• Forensicの問題
• Tokyo Westerns/MMA CTF 2nd 2016で出題
• ハードディスクの中身を復旧できるかどうかを問
うた問題
• 問題セットは下記URLからダウンロード可能
• https://github.com/tokyowesterns/twctf-2016-
problems
• この問題のファイルは下記からダウンロード可能
DEADNAS (2/13)
• 問題文
Today, our 3-disk NAS has failed. Please recover
flag. [attachment:deadnas.7z]
ディスクを3台載せたNASが故障してしまいました.
フラグを復元してください.
[attachment:deadnas.7z]
DEADNAS (3/13)
• 与えられたファイルを解凍して中身を見てみる
• 7z x [filename]で解凍可能
• 中にはdisk0, disk1, disk2の3つのファイル
• fileコマンドの結果
DEADNAS (4/13)
• xxd disk0の結果の先頭部分
• mkfs.fatやFAT12 といった文字列
• ファイルシステムっぽい?
DEADNAS (5/13)
• disk1の中身は?
• disk1はクラッシュしているよう
DEADNAS (6/13)
• xxd disk2の先頭部分
• よくわからない
• disk0, disk2の中身をスクロールしていくと読める
箇所と読めない箇所が出てくる
DEADNAS (7/13)
• disk0, 2はハードディスクをダンプしたものっぽ
い?
• disk1は破損している
• disk0, 2の一部部分では人間が読める文字列が登場
している
• しかし、文章の途中から始まっていたり、途中で
切れている
• 問題文は、「復元してください」とある
破損しているdisk1が復元できる?
RAID
• Redundant Arrays of Inexpensive Disks
• 複数台のハードディスクを組み合わせて運用する
ことで、冗長性、信頼性、アクセス速度を向上す
る仕組み
• RAIDの方式は複数存在
• RAID0
• RAID1
• RAID01
• 問題で与えられたファイルは3つ
• 3つ(3つ以上)のハードディスクを使用するRAID
は?
RAID5
• データは分割して保存される
• パリティ(冗長コード)が生成されて保存される
• ハードディスクが1台破損しても復旧可能
今回のケースもdisk1のみが破損している
• 最低3台で構成可能
• A*, B*, C*はデータ
• P*がパリティ
https://ja.wikipedia.org/wiki/RAID
RAID5
• RAID5では、パリティはデータブロックごとでの
XOR
• 復元は簡単にできる
• データブロックのサイズは?
• 与えられたファイルを観察することで特定する
• printableな文字列が始まってから終わるまでの長さから
求められる
• 今回は512byteだった
• パリティの位置はどうやって決まっているのか?
• 3通りしかないので、すべて試せばいい
DEADNAS (8/13)
• なぜ、RAIDだと考えたのか
disk0の先頭でのファイルシステムを思わせる文
字列
disk0とdisk2のサイズは同じ
disk1は破損している -> (もしかして復元可能?)
問題文の「復元してください」
DEADNAS (9/13)
• 何をすればいいか?
• disk1を復元する
• disk0とdisk2をXORすればdisk1になる
• 3つのdiskから本来のハードディスクを生成する
• パリティを除いた部分を連結すればよさそう
DEADNAS (10/13)
• disk1を復旧するpythonスクリプト
• disk0とdisk2をバイトずつでxorしてるだけ
• xorした結果をdisk1に書き込み
DEADNAS(11/13)
• 3つのdiskから1つのハードディスクを復元する
• パリティの位置はdisk2から始まりdisk1、disk1、
disk2と繰り返されると予想(外れたら別の方法を試
す)
DEADNAS (12/13)
• あとはmountして中身を確認するだけ
• sudo mount ./disk /mnt
DEADNAS (13/13)
• 破損したディスクを復旧しデータを取り出すこと
ができた
与えられたデータから予測を立てる
とりあえず試してみる
• [別解] XorFilsというソフトを使用すれば瞬殺だっ
た
THE-YEAR-2000 (1/10)
• the-year-2000
• BSides SF CTFで出題
• web系で比較的セキュリティよりな問題
• まだサイトが生きているので実際にアクセスして
みてください
• http://theyear2000.ctf.bsidessf.net/
THE-YEAR-2000 (2/10)
• html, notepad++, git, apacheを使っているらしい
THE-YEAR-2000 (3/10)
• web系の問題で、web上にないか確認してみるこ
と
1. robots.txt
2. .htaccess
3. .git
• 重要な情報が含まれていることが多い
THE-YEAR-2000 (4/10)
• .git/はForbiddenだった
• ディレクティブは無効化されている
• .git自体は存在している
• .gitよりも下で確実にあるファイルを試してみる
• .git/HEADや.git/confgなどなど
• commit logなどが分かるファイルはないのか?
• http://theyear2000.ctf.bsidessf.net/.git/logs/HEAD
THE-YEAR-2000 (5/10)
• commit logを確かめてみる
• http://theyear2000.ctf.bsidessf.net/.git/logs/HEAD
0000000000000000000000000000000000000000
e039a6684f53e818926d3f62efd25217b25fc97e Mark Zuckerberg
<thezuck@therealzuck.zuck> 1486853661 +0000 commit (initial): First
commit on my website e039a6684f53e818926d3f62efd25217b25fc97e
9e9ce4da43d0d2dc10ece64f75ec9cab1f4e5de0 Mark Zuckerberg
<thezuck@therealzuck.zuck> 1486853667 +0000 commit: Fixed a spelling
error 9e9ce4da43d0d2dc10ece64f75ec9cab1f4e5de0
e039a6684f53e818926d3f62efd25217b25fc97e Mark Zuckerberg
<thezuck@therealzuck.zuck> 1486853668 +0000 reset: moving to HEAD~1
e039a6684f53e818926d3f62efd25217b25fc97e
4eec6b9c6e464c35fff1efb8444dd0ac1ae67b30 Mark Zuckerberg
<thezuck@therealzuck.zuck> 1486853672 +0000 commit: Wooops, didn't
want to commit that. Rebased.
THE-YEAR-2000 (6/10)
• 存在するobjectファイルは3つ
• e039a6684f53e818926d3f62efd25217b25fc97e
• first commit
• 9e9ce4da43d0d2dc10ece64f75ec9cab1f4e5de0
• first commitからスペルエラーを直したcommit
• 4eec6b9c6e464c35fff1efb8444dd0ac1ae67b30
• resetしてfirst commitへとcommitしたもの
• 最終commit
• resetされたcommitが怪しそう
THE-YEAR-2000 (7/10)
• http://theyear2000.ctf.bsidessf.net/.git/logs/object
s/9e/9ce4da43d0d2dc10ece64f75ec9cab1f4e5de0
• 適当なディレクトリでgit initして仮のリポジトリ
を作成
• .git/objects に9eディレクトリを作成し、ダウン
ロードしてきたファイルを配置
THE-YEAR-2000 (8/10)
• bd72ee2c7c5adb017076fd47a92858cef2a04c11も
存在しているらしい
• ダウンロードして、git cat-file –pしてみる
• 芋づる式に関わりのあるobjectを探していく
THE-YEAR-2000 (9/11)
• ファイル名などを格納
するのがtree
• ファイルの内容を格納
するのがblob
https://git-scm.com/book/ja/v2/Git%E3%81%AE%E5%86%85%E5%81%B4
%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83
THE-YEAR-2000 (10/11)
• git cat-file -p
7baff32394e517c44f35b75079a9496559c88053
THE-YEAR-2000 (11/11)
• ソースコードの流出は、情報の流出・攻撃の手が
かりとなる
• .git/配下はアクセスできないようにする
• gitに関する詳しいことは下記参照
• https://git-
scm.com/book/ja/v1/Git%E3%81%AE%E5%86%85%E5%81
%B4-
Git%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E
3%82%AF%E3%83%88
• https://git-
scm.com/book/ja/v2/Git%E3%81%AE%E5%86%85%E5%81
%B4-
Git%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E
オススメ常設CTF
• 常設CTFはいつでもチャレンジ可能
• 初心者向けのオススメを紹介
• picoCTF 2013
• https://2013.picoctf.com/
• picoCTF 2014
• https://picoctf.com/
• CpawCTF
• https://ctf.cpaw.site/
• ksnctf
• http://ksnctf.sweetduet.info/

Weitere ähnliche Inhalte

Was ist angesagt?

おれよりすごいておくれにあいにきた
おれよりすごいておくれにあいにきたおれよりすごいておくれにあいにきた
おれよりすごいておくれにあいにきたKatsuyoshi Matsumoto
 
[社内LT][Debian] お前はもう使っている-2013/05/24
[社内LT][Debian] お前はもう使っている-2013/05/24[社内LT][Debian] お前はもう使っている-2013/05/24
[社内LT][Debian] お前はもう使っている-2013/05/24Aya Komuro
 
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Nobuto Murata
 
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤTakashi Hoshino
 
Fukuoka debianstudy02 / 福岡Debian勉強会 02
Fukuoka debianstudy02 / 福岡Debian勉強会 02Fukuoka debianstudy02 / 福岡Debian勉強会 02
Fukuoka debianstudy02 / 福岡Debian勉強会 02Aya Komuro
 

Was ist angesagt? (6)

おれよりすごいておくれにあいにきた
おれよりすごいておくれにあいにきたおれよりすごいておくれにあいにきた
おれよりすごいておくれにあいにきた
 
[社内LT][Debian] お前はもう使っている-2013/05/24
[社内LT][Debian] お前はもう使っている-2013/05/24[社内LT][Debian] お前はもう使っている-2013/05/24
[社内LT][Debian] お前はもう使っている-2013/05/24
 
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
 
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ
 
Fukuoka debianstudy02 / 福岡Debian勉強会 02
Fukuoka debianstudy02 / 福岡Debian勉強会 02Fukuoka debianstudy02 / 福岡Debian勉強会 02
Fukuoka debianstudy02 / 福岡Debian勉強会 02
 
Linux container update
Linux container updateLinux container update
Linux container update
 

CTFでアレコレ