Open18
Pwnに入門したい

教材

- スコアサーバーと問題サーバー
docker run --rm -it -p 8080:80 -p 10001-10012:10001-10012 kusanok/ctfpwn:2
10080番ポートはブロックされるので指定しない

objdump
問題実行ファイルの逆アセンブルに使用する
Binutilsをインストール
$ sudo apt install binutils
逆アセンブルコマンドは
$ objdump -d M intel hogehoge > hogehoge.txt

$ docker image ls
でNginxのイメージを取得

- 起動中のコンテナの確認
$ docker container ls
- コンテナ内のbashを起動する
$ docker exec -it [CONTAINER ID] /bin/bash

- dcoker command
$ docker images
$ docker rmi イメージid

- readelf コマンド
実行ファイルのサイズが大きい場合などに実行時に配置されるメモリアドレスを調べる

補足
[問題]
pip3 install pwntools
で弾かれる
[解決]
set up tools-rustがない(from setuptools_rust import RustExtension ModuleNotFoundError: No module named 'setuptools_rust'
)といわれていたので、pip install setuptools-rust
する
その後pip install --upgrade pip
し再度pip3 install pwntools
で成功
Successfully installed bcrypt-3.2.0 capstone-4.0.2 colored-traceback-0.3.0 cryptography-3.4.7 intervaltree-3.1.0 mako-1.1.4 paramiko-2.7.2 pathlib2-2.3.5 plumbum-1.7.0 psutil-5.8.0 pwntools-4.5.1 pyelftools-0.27 ropgadget-6.5 rpyc-5.0.1 unicorn-1.0.2rc3
WARNING: Running pip as root will break packages and permissions. You should install packages reliably by using venv: https://pip.pypa.io/warnings/venv

実行ファイルを逆アセンブル
obdjump -d -M intel hogehoge > hogehoge.txt

アセンブリ言語の文法はシンプル
一行ごとに
ニーモニックス:命令の種類を表す
ディスティネーションとソース:操作対象を示す
が書かれている
各命令は、ソース(とディスティネーション)を読んで演算し、結果をディスティネーションに書き込む。
ソースとディスティネーションをあわせてオペランドという。

checksec
$ ~/checksec.sh/checksec --file=strstr
RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH 78) Symbols No 0 2 strstr

oneGadget導入
$ sudo apt install ruby
$ sudo gem install one_gadget

解説サイトまとめ

コンパイル
アセンブラ ASCIIコード