pwntools

エクスプロイト開発のためのツール

remote()関数とは?

pwntoolsremote()関数は、リモートのサービスに接続し、そのサービスとの間でデータの送受信を行うための関数です。CTF問題を解く際、リモートサービスと通信し、入力や出力をやり取りすることで問題を解いていくことが多く、このremote()関数が非常に重要な役割を果たします。

remote()関数の基本的な使い方

from pwn import *

# リモートサービスに接続
p = remote('localhost', 1337')

# データを送信
p.sendline('Hello, world!')

# データを受信
data = p.recvline()
print(data)

remote()関数のオプション

remote()関数には、他にも様々なオプションがあります。

# タイムアウトを5秒に設定
p = remote('localhost', 1337', timeout=5)

# SSL/TLS接続で接続
p = remote('example.com', 443', ssl=True)

remote()関数を使った具体的な例

ファイルのアップロード

# ファイルを読み込む
with open('payload.bin', 'rb') as f:
    payload = f.read()

# リモートサービスにファイルを送信
p.send(payload)

特定の文字列を探す

# 特定の文字列を含むデータを受信するまで待つ
p.recvuntil(b'password:')

インタラクティブモード

# インタラクティブモードに入る
p.interactive()

インタラクティブモードに入ると、Pythonの対話型シェルのように、リモートサービスと直接やり取りできます。

その他の便利な関数

See Also

pwntools

エクスプロイト開発のためのツール

bytes

バイナリデータを表す不変なシーケンス

算術関数

数値計算に用いる関数

リスト

データの入れ物

辞書 / ディクショナリ

キーと値からなるリスト

Jupyter Notebook

OSの機能を使用する

統合開発環境

開発から実行までをお手軽に