ハッカーの最強のツールのひとつである「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構築などを短いコードで行えます。
強力な反面、実験は必ず自分のローカルや仮想環境(venv/VirtualBox)や許可のあるCTFサーバーで行い、他人のサービスを絶対に攻撃してはいけません。
Kaliではpython3-venvで仮想環境を作りpipでpwntoolsを入れて動作確認するのが安全で確実です。
今後、このツールを利用したCTFの問題の解き方をご紹介したいと考えています。