SlideShare a Scribd company logo
CTFについて
2016/12/10
ムン ジェウン
Capture The Flag (旗をとれ)
Hack the Vote 2016
目次
•CTFとは?
•実戦問題を解く
CTFとは?
https://www.youtube.com/watch?v=9gBm_TxuENk
About ctf jwmoon
About ctf jwmoon
About ctf jwmoon
flag{何らかの文字列}
flag{th3r3_1s_0nly_on3_ch0ic3}
About ctf jwmoon
Reversing
• Binaryとも呼ばれる
• シリアルキークラッキング
Forensic
• 法医学
• 証拠収集
• HDD, USB メモリ分析
• データ復元など
Pwnable
• System hacking
• Exploit
• Buffer Overflow, Format String , Race
Condition
Web
• Web診断技術が使われる
• HTTP Traffic Monitoring
• SQL Injection
• Cross Site Scripting
Network
• パケット分析
• 通信の流れを分析
Cryptography
• Classic Cryptography (Transposition,
Substitution Cipher)
• DES / AES / RSA
• 暗号文を解読
Miscellaneous (その他)
• Programming
• パズル
Reversing 100点問題を解いてみよう!
デバッガ(Debugger)とは?
• プログラムに存在するバグをとることを支援するツール
• プログラムの動作を詳細に観察できる
アセンブリー(Assembly) とは?
• 機械語と1:1マッピングされる言語
冷蔵庫から水を取り出して飲む(in c)
void 水の飲む()
{
BOOL bOpen =冷蔵庫のドアオープン();
if (bOpen){
水を出す();
飲む();
}
}
冷蔵庫から水を取り出して飲む(in Assembly)
__asm{
冷蔵庫前に進む
冷蔵庫のドアをキャッチ
冷蔵庫のドアを開ける
オープン成功:
冷蔵庫の中を見る
手を上げる
冷蔵庫の中に入れる
水筒をキャッチ
水筒を取り出す
冷蔵庫のドアを閉める
ふたを開ける
水をコップに注ぐ
カップを手に取る
カップに入ったことを飲む
}
• ELF (機械語) -> Source code (不可能)
• ELF (機械語) -> アセンブリー (可能, Disasseble)
Main 関数のコードを分析しよ
う。
16進数とバイトの話
なぜ16進数を使うのか?
-> バイトが8ビットに決められて
るから
254の表現
11111110 (1 Byte)
F E
Call命令の解析
e8 8a f9 ff ff (5 Bytes)
=> なぜ call 0x4004e0?
About ctf jwmoon
e8 8a f9 ff ff
=> call 0x4004e0
残りの4バイトがメモリアドレスを意味する
8a f9 ff ff
=> 0x4004e0
Endianの概念
メモリにデータが保存される方法
16進数の数字 : 1234ABCD
12 34 AB CD  Big Endian
CD AB 34 12  Little Endian (Intel CPU)
Little Endian
8a f9 ff ff 実際(物理的)
ff ff f9 8a 意味(論理的)
0xfffff98a
なぜ?
0x4004e0
符号付32ビット数字に変換
0xfffff98a
signed int
-0x676
0x400b56 + (-0x676) = 0x4004e0
call命令が終わる位置 + 変位(Offset) = 呼ばれる位置
-0x676が意味するのは?
メモリ上の位置
Poor Bernie.
Call 命令
0x4004e0 (文字列が始まる位置)
0x400b56 (call命令が終わる位置)
-0x676 (Offset)…
real_help 関数を呼びだす
(Call命令の位置 + offset = real_help関数の位置)
0x400b56 + x = 0x400ad9
x = 0x400ad9 - 0x400b56
= 0xffffff83
バイトを上書きする
ff ff f9 8a
ff ff ff 83
real_help関数を呼び出してみよう!
コマンド
set * (char *) 0x400b52 = 0x83
set * (char *) 0x400b53 = 0xff
C8関数で似ている動作をする
•読めない文字列をサブ関数に渡す
•サブ関数は読めない文字列に何かの演算を
して読める文字列に変換する
C8関数を呼び出してみよう!
コマンド
set * (char *) 0x400b52 = 0xb3
set * (char *) 0x400b53 = 0xfe
& , ! ' ; 7 2 ) 4 % ¥ 0 3 7 ) . ¥ 0 3 7 ¥ " % 2 . ) % ¥ 3 4 1 =
26 2C 21 27 3B 37 32 29 34 25 1F 29 2E 1F 22 25 32
2E 29 25 E1 3D
66 6C 61 67 (flag)
flag{write_in_bernie!}
プログラムを作って解決
f l a g { …. }
66 6C 61 67 7B …. 7D
0x6 -0xB 0x6 0xF ...
ありがとうございます。

More Related Content

PPTX
20150909卒研進捗LT
PDF
CTF初心者🔰
PPTX
ipu LT - Introduction of CTF
PDF
TRY CTF
PDF
CTFの布教
PPTX
たのしいPwn 公開用
PDF
CTF超入門 (for 第12回セキュリティさくら)
PDF
出張 CTF for ビギナーズ 2015 幕張 in セキュリティ・キャンプ 成果報告
20150909卒研進捗LT
CTF初心者🔰
ipu LT - Introduction of CTF
TRY CTF
CTFの布教
たのしいPwn 公開用
CTF超入門 (for 第12回セキュリティさくら)
出張 CTF for ビギナーズ 2015 幕張 in セキュリティ・キャンプ 成果報告

Similar to About ctf jwmoon (14)

PDF
Kobe sec#8 summary
PPTX
CTFのはじめかた @ 2018年度技術系サークル合同新歓
PDF
私立プログラミングキャンプ
PPTX
CTF(Capture the Flag)って何?
PDF
OSC Kyoto CTF Seminar
PDF
CTFというハッカーイベント+α
PPTX
CTFでアレコレ
PDF
CTFはとんでもないものを 盗んでいきました。私の時間です…
PDF
えっ今日はハッキングしてもいいのか?(CTF Web入門)
ODP
自作CTFについて考えてみる
PDF
CTFとは
PDF
MCC CTF講習会 pwn編
PDF
ctfで学ぼうリバースエンジニアリング
PDF
MCC CTF講習会 pwn編2
Kobe sec#8 summary
CTFのはじめかた @ 2018年度技術系サークル合同新歓
私立プログラミングキャンプ
CTF(Capture the Flag)って何?
OSC Kyoto CTF Seminar
CTFというハッカーイベント+α
CTFでアレコレ
CTFはとんでもないものを 盗んでいきました。私の時間です…
えっ今日はハッキングしてもいいのか?(CTF Web入門)
自作CTFについて考えてみる
CTFとは
MCC CTF講習会 pwn編
ctfで学ぼうリバースエンジニアリング
MCC CTF講習会 pwn編2
Ad

About ctf jwmoon