newbieからバイナリアンへ

newbieからバイナリアンへ

コンピュータ初心者からバイナリアンを目指す大学生日記

【雑談 2.0】 CTFのpwnに入門する一歩手前までの道程

 

 

 

 

 

1: イントロ

最近知人がCTFのpwnをやりたがっており

強い人に入門方法を聞いたが難しすぎて手が届かなかったという

故にド素人newbieの自分に簡単な問題を解くまでの道程を聞いてきた

 

自分自身pwnを解き始めたのが2019年の春からでありまだ半年ほどだが

最初は右も左もわからずお手上げ状態だった記憶がある

 

今でもわからないことづくしで嫌になってしまうが

それでも最も簡単な問題ならばいくらか解けるようになったため

ずぶずぶの素人の自分がpwn入門の一歩手前までいけた経緯を自分と友人のために備忘録的(+思い出を懐かしむ的)に書き残しておく

 

といっても読んだ本を書き連ねていくだけだが

 





 

2: Linux環境に慣れる

pwnの問題はELFバイナリを解析する問題が多い

そのためにはLinux環境に慣れる必要がある

 

一番手っ取り早いのは中古PCを買ってLinuxディストリビューションを入れてしまうこと

VM上に入れても何ら問題はないが、本当の初心者はVMなにそれ?状態だと思うためネイティブインストールしてしまうのが一番簡単な気がする

自分はかつてストレスでWindows入りThinkpadを真っ二つにへし折ってしまったため

中古3万で買ったPCにUbuntuを入れて使っていた

 

最初はCUIに慣れずどぎまぎしていたが慣れてくると非常に使いやすい

Linux上でプログラムを書いてコンパイルしてというのを繰り返していると次第に慣れてくる





3: C言語/Pythonを使えるようにする

自分自身21になる今も(ちゃんと)プログラミングをしたことが全くない

だがpwnを解く以上一応はプログラムを読める必要があり、とりわけCを読めるようになる必要がある

というのもpwnで配布されるプログラムはCをコンパイルしたものが多く

またバイナリをGhidraでデコンパイルしたコードもCであるため、Cを使えるのが望ましい

それからexploitコードに使われているのはPythonが多い気がするからPythonも使えるといいかも

 

自分が勉強するのに使ったのは以下の本/サイト

 

C

9cguide.appspot.com

本当の最初はこのサイトで学んだ

Windows環境で使える簡易IDEみたいなのも配布されており初心者でも簡単に実行形式が作れる

 

 

 

 

C言語ポインタ完全制覇 (標準プログラマーズライブラリ)

C言語ポインタ完全制覇 (標準プログラマーズライブラリ)

 

 ポインタについて読んだような読んでないような

正直ポインタに関してはアセンブラを読み始めれば直感的に理解できるから

事前の勉強としてはとりあえず使えるレベルになればそれでいい気がする

 

 

 

 

 

 Linuxに慣れることも兼ねた本

コマンドを実装したりなんやかやしたりする

 

 

 

 

C++

そもそもにこの言語今でも使えないし使わない

けど何故か最初に触れた言語がCじゃなくてC++だった

(もっというと本当の一番最初はHSPだった)

 

 

 

C++ Primer (5th Edition)

C++ Primer (5th Edition)

  • 作者: Stanley B. Lippman,Josée Lajoie,Barbara E. Moo
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2012/08/10
  • メディア: ペーパーバック
  • この商品を含むブログを見る
 

 英語の勉強も兼ねて中2のときに読んだ記憶

網羅的だが知識の羅列的な感じが否めない

 

 

 

 

 

 

ロベールのC++入門講座

ロベールのC++入門講座

 

 この本専門家が書いたわけじゃないとかで批判されてるのを見た記憶があるけど

とりあえず使えるようになるためには読みやすかった

 

 

 

Python

初めて使ったのは大学入学の2週間前

それまでCとアセンブラしか読んだことがなかったため何かインタプリタ型を使えたほうがいいと思い勉強した

 

 

 

 

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

 

 言語的な説明から、実際に何ができるかを説明してくれる

普通に良い本だと思う

 

 

 

 

 

ゼロから作るDeep Learning ? ―自然言語処理編

ゼロから作るDeep Learning ? ―自然言語処理編

 

 Pythonに慣れるために読んだ本

普通に言語処理が楽しかった

 

 

 

言語全般

つよつよの人に言語をどう勉強すればいいかを聞くと

マニュアル読めで一蹴されます

実際問題一番の情報源がWeb上のマニュアルなのは確かなので

本を買うのがもったいないとか、他の言語を使っていてある程度雰囲気がつかめている場合は最初からマニュアルでも読めばいいかと

 

 

 

3: ELF形式/リンカ・ローダについて

ELFバイナリができるまで及びそれらがメモリ上にロードされて実行されるまでの仕組みを知る必要がある

 

 

リンカ・ローダ実践開発テクニック―実行ファイルを作成するために必須の技術 (COMPUTER TECHNOLOGY)

リンカ・ローダ実践開発テクニック―実行ファイルを作成するために必須の技術 (COMPUTER TECHNOLOGY)

 

 今まで読んだ本の中で片方の手で数えられるくらいに役に立った本

知識ゼロの状態からリンカとローダの表面的な基本知識は身につく

サンプルコードも豊富で実際に試してみることができる

 

 

 

 上と同筆者

読破した記憶があまりないがgdbの使い方を学んだ気がする

そんなに優先順位は高くない

 

 

 

 

4: アセンブラに慣れる

pwnではバイナリをGhidra/IDAのようなデコンパイラで解析することが多いが

デコンパイルには一意性がないためデコンパイルコードが間違っていることは割とある

その際アセンブラと比較して本当の挙動を解釈できるようにする必要があるため、アセンブラが読めると良い

それにスタック等の仕組みについて学ぶいい題材にもなる

 

 

 

大熱血! アセンブラ入門

大熱血! アセンブラ入門

 

 めちゃくちゃヘビーな本

物理的にもヘビーで1000ページ超えている

しかしx86のところだけでも読んでおくと役に立つ

あと後半ではアセンブラを読むこととは関係ないが面白い題材を扱っている

 

 





5: pwnを解く手順を学ぶ

ここまで下準備をしたら簡単なpwnの問題は解けると思う

 

 

 

Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際

Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際

 

 直接的にpwnには関係ないかもしれないが簡単な攻撃手法を知ることができる

あと何より雰囲気がかっこいい

 

 

 

 

 

 

セキュリティコンテストのためのCTF問題集

セキュリティコンテストのためのCTF問題集

 

 pwnをやり始める際に一番役に立った本

各分野の実際の問題を解く流れが載っている

ただpwnは3,4問しかないため、あくまで流れを捉える目的

 

 

 

 

 

techbookfest.org

今やり始めるならばこれが一番いいんじゃないかと思う

基本的なテクニックを用いて実際に問題を解く手法が載っており

問題数もハリネズミ本よりも多い

 

 

 

 

 

 

 

pwnable.xyz

pwnの常設CTF(?)

今までに学んだことを使って問題を解いていける

但し確認している範疇では2019年9月下旬より問題サーバが死んでおり実際にフラグを入手することはできない

 

 

 

 

 

ptr-yudai.hatenablog.com

CTFのpwnの問題を全部解くというイカレタすごい人のブログ

いつもお世話になってます

 

 

 

 

ctf.katsudon.org

bataさんというすごい人が作った良問リスト

これに載ってる問題はwriteupが転がっていることが多いため答え合わせをしやすい

 

 

 

 

 

 

6: モチベーション

わからないことが多く、且つ調べてもなかなか情報が見つからないことも多いこの分野

最初の関門を突破して問題を解けるようになるにはそれなりのモチベーションが必要

 

 

【極!合本シリーズ】 BLOODY MONDAY シリーズ6巻

【極!合本シリーズ】 BLOODY MONDAY シリーズ6巻

 

 こいつを読まなきゃ始まらないよな!!!!

 

 

 

 

 

30日でできる! OS自作入門

30日でできる! OS自作入門

 

Cも読めない状態で読み始めた思い出の一冊

pwnに直接は関係ないがとっても面白い本

最近川合さん監修のOS本が出版されたが知識よりなところが多い印象でまだ読み終わっていない

 

 

 

 

www.catb.org

 

 

 

 

 

7: 最後に

なんやかんや色々書き連ねたけれども

結局一番の助けになるのは、身近にいるその分野につよつよな人であることは間違いない

そういう人たちは当たり前のレベルが高いため、自分でggrks的な感じで言われることもあるかもしれないが

そのとおりに自分で調べたりしているうちに知識がついてくるし

最終的には親切に教えてくれたりする

 

大学の情報系の集まりに行ったりIPAのsecurity campに行ったりすることが

結局は一番の参考書であった







おあとがよろしいようで