ハッカーの最強のツールのひとつである「pwntools」入門
pwntoolsは、CTF(Capture The Flag)で使われるPython製の「道具箱」です。ハッカーにとって、最強のツールのひとつです。
ただし強力なツールなので、必ず自分のローカルや許可された環境で学び、他人のサーバーを攻撃しないことが大切ですね。
※イメージです。
pwntoolsとは
pwntools(パントゥールズ)は、CTF(Capture The Flag)で使う便利なライブラリです。
Pythonというプログラミング言語で書かれていて、ゲームのような脆弱プログラムに「自動で接続してやり取りする」作業をとても簡単にしてくれます。
たとえば「問題にログインして入力を送って、返ってきた答え(フラグ)を取る」という操作を短いコードで書くこともできます。
重要 絶対に他人のサーバーを攻撃しないでください
公開サービスや他人のサーバーへ攻撃する用途では絶対に使わないでください。
pwntoolsは学習や検証に便利な強力ツールですが、許可なく第三者のシステムに侵入・攻撃すると刑事罰や民事訴訟、損害賠償、キャリアの失墜といった深刻な結果を招きます。
学習や実験は必ず自分のローカル環境、仮想マシン(VirtualBox/VMware)、Dockerコンテナ、または運営者の明確な許可があるCTF・演習サーバーで行ってください。
pwntools が便利なところ
・短いコードで操作できる
手で入力→出力を繰り返す代わりにスクリプトで自動化できる。
・ネットワークとローカルを同じように扱える
自分のPCで動かすプログラム(ローカル)も、ネット上の挑戦(リモート)も似た書き方で扱える。
・バイナリ分析を助ける機能がある
プログラムの中身(ELF)を読み取ったり、ROP(高度な技)を組む道具がある。
・学習教材が多い
使い方を教える記事やサンプルがたくさんあるので学びやすい。
Kali Linuxでのpwntoolsインストール手順
私のKali Linuxの環境は、VirtualBox上でKali Linuxを起動しています。
まだ、上記の環境が無い方は、こちらをご覧ください。
Kali Linuxのターミナルを利用して、順に説明していきます。
1.現在作業しているディレクトリ(カレントディレクトリ)の絶対パスの表示
pwd
2.必要パッケージをインストール
sudo apt update
3.python3-venvを設定
sudo apt install -y python3-venv python3-pip
4.仮想環境を作る(ホームに作る例)
python3 -m venv ~/pwntools-venv
5.仮想環境を有効化して中に入る
source ~/pwntools-venv/bin/activate
プロンプトが (pwntools-venv) のように変わります
6.pip を更新して pwntools をインストール
pip install –upgrade pip
pip install pwntools
7.~/.local/bin を PATH に通しておく
export PATH=$PATH:~/.local/bin
8.作業が終わったら仮想環境から抜ける
deactivate
9.動作確認
・仮想環境を有効化して中に入る
source ~/pwntools-venv/bin/activate
10.インポートして簡単な関数を呼んでみます。エラーが出なければ実用上問題ありません
python3 – <<'PY’
from pwn import *
print('import ok’)
# 簡単な shellcraft の出力を確認(エラーにならなければOK)
print('asm sample size:’, len(asm(shellcraft.sh())))
PY
・出力結果(下記の情報が表示されればOKです。)
import ok
asm sample size: <数字>
・仮想環境から抜けます。
deactivate
※pwntoolsを利用する環境が整いました。
pwntoolsを安全に試すための手順と説明
Kali Linuxでのpwntoolsのインストールが完了しましたね。
ここではその目的と、各ステップで何をしているかを、ちょっと難しそうなので、わかりやすく説明したいと考えています。
・目的
この手順の目的はとてもシンプルです。
「自分のパソコン上に実験用の小さなプログラムを作り、pwntools(学習用の道具)を安全な環境で動かして、入出力が自動でできるか確認する」ことです。
重要なのは、実験は必ず自分のローカル(自分のマシンや、仮想マシン)で行うことです。
1.必要な道具をそろえる(システムを更新して必要ソフトを入れる)
最初に、Linux のパッケージ情報を更新し、プログラムを作ったり動かしたりするための基本的なツールを入れます。
※現在の位置
pwd
2.テスト用のフォルダーを作成します。
mkdir python_workspace
※テスト用のフォルダー名はなんでもかまいません。
テスト用のフォルダーに移動してください。
3.学習用のテストプログラム(相手役)を作る
pwntools がやり取りする相手を用意します。簡単な C プログラムをコンパイルして実行ファイルを作ります。
ファイル名はvulnerable_echo.cです。
nano vulnerable_echo.c
・プログラム
このプログラムは「Input:」と表示して入力を待ち、受け取った文字列をそのまま返すだけの単純なプログラムです。
// vulnerable_echo.c
#include <stdio.h>
int main(){
char buf[100];
printf(“Input:\n");
fgets(buf, sizeof(buf), stdin);
printf(“You said: %s", buf);
return 0;
}
Ctrl + o でセーブ
Ctrl + x で終了 となります。
4.vulnerable_echo.cをコンパイルします
gcc -o vulnerable_echo vulnerable_echo.c
5.仮想環境(venv)を作ります
仮想環境は「このプロジェクト専用の Python の箱」です。
中でライブラリを入れても、他のプロジェクトやシステムには影響しません。
・Python の仮想環境(venv)を作る。
python3 -m venv ~/pwntools-venv
・Python の仮想環境(venv)を有効化する。
source ~/pwntools-venv/bin/activate
※プロンプトが (pwntools-venv) になります。
終わったら仮想環境は、deactivateで抜けられます。
6.仮想環境の中で安全に pwntools をインストールします
pip install –upgrade pip
pip install pwntools
これで pwntools を自分の環境で使えるようになります。
7.pwntools で自動化を試します(echo を自動で使う)
最後に、pwntools を使った Python スクリプト(nano echo_client.py)を作り、プログラムとのやり取りを自動化してみます。
nano echo_client.py
・ソース
# echo_client.py
from pwn import *
p = process('./vulnerable_echo’)
p.recvline()
p.sendline(b’Hello pwntools!’)
print(p.recvline().decode())
p.close()
上記、echo_client.pyを実行する
python3 echo_client.py
実行すれば You said: Hello pwntools! と返ってくれば成功です。
自分でキーボードを叩く代わりに、スクリプトが自動で入力して結果を受け取る。
これが自動化の基本になります。
ハッカーの武器である「pwntools」入門のまとめ
インストールご苦労様でした。大変でしたね。
pwntoolsはCTF向けのPythonライブラリで、脆弱なプログラムへの接続や入出力自動化、ELF解析やROP構築などを短いコードで行えます。
pwntoolsはCTF向けのPythonライブラリで、脆弱なプログラムへの接続や入出力自動化、ELF解析やROP構築などを短いコードで行えます。
強力な反面、実験は必ず自分のローカルや仮想環境(venv/VirtualBox)や許可のあるCTFサーバーで行い、他人のサービスを絶対に攻撃してはいけません。
Kaliではpython3-venvで仮想環境を作りpipでpwntoolsを入れて動作確認するのが安全で確実です。
今後、このツールを利用したCTFの問題の解き方をご紹介したいと考えています。