Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
exploit-writing-for-oswe — エクスプロイトスクリプトを(より速く!)書くためのヒント | Kitploit
ツール/GitHubGitHub/rizemon/exploit-writing-for-oswe
スクリプトと自動化ウェブアプリケーション悪用ウェブセキュリティペネトレーションテスト学習と教育厳選リソースペイロード開発
GitHubrizemon/exploit-writing-for-oswe

exploit-writing-for-oswe

エクスプロイトスクリプトを(より速く!)書くためのヒント

リポジトリを見る
591112162年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

OSWEのためのエクスプロイト作成

背景

概要

このリポジトリには、OSWEのラボおよび認定試験でエクスプロイトスクリプトを作成する際に役立つ、便利なスニペットとヒントの一覧が含まれています。

ここに示す例の一部は、特定のコーディング慣行に反するかもしれませんが、最終的な目標はエクスプロイトスクリプトを迅速かつ正確に書くことです。

requestsライブラリの使用に慣れていない場合や、Pythonに不慣れな場合は、コードスニペットセクションが最適な出発点です。それ以外の場合は、再利用可能なコードセクションまたはヒントセクションに進んでください。

目的

  • この認定資格に関するwrite-ups(解説記事)、レビュー、ノートは数多く存在しますが、エクスプロイトの作成プロセスに特化したリソースはほとんどありません。
  • エクスプロイトスクリプトの作成は、特にPythonに不慣れな方や、コードを通じてWebアプリケーションとやり取りした経験がほとんどない方にとっては、気が遠くなる作業になり得ます。
  • 脆弱性の特定や試験レポートの作成にかかる時間は大きく変動する可能性がありますが、エクスプロイトスクリプトの開発にかかる時間は、しっかりと習得すれば最小化し、一定に保つことができます。

目次

  • OSWEのためのエクスプロイト作成
    • 背景
      • 概要
      • 目的
    • 目次
    • コードスニペット
      • 開始用テンプレート
      • 便利なインポート
      • requestsライブラリの使用
        • 最もシンプルなHTTPリクエストを送信する
        • 異なるHTTPメソッドを指定する
        • HTTPレスポンスを読み取る
        • URL内のクエリ文字列としてデータを送信する(params引数を使用)
        • ボディ内のクエリ文字列としてデータを送信する(data引数を使用)
        • ボディ内のJSONとしてデータを送信する(json引数を使用)
        • ボディ内でファイルを送信する(files引数を使用)
        • HTTPヘッダーを設定する(headers引数を使用)
        • HTTP Cookieを設定する(cookies引数を使用)
        • 3XXリダイレクトの追跡を無効にする(allow_redirects引数を使用)
        • 検証されていないHTTPSサーバーとやり取りする(verify引数を使用)
        • HTTPプロキシ経由でリクエストを送信する(proxies引数を使用)
        • Sessionを作成する
        • 永続的なCookieを設定する
        • 永続的なヘッダーを設定する
      • トラブルシューティング
        • Wiresharkを使用してHTTPリクエストでフィルタリングする
        • HTTPリクエストの内容を出力する
        • HTTPリクエストをBurp Suite経由でプロキシして検査する
      • 再利用可能なコード
        • HTTP経由でファイルを配信する
        • HTTP Cookieを盗む
        • SQLインジェクションを高速化する
    • ヒント
      • HTTPリクエストのたびにassertを使用して健全性チェックを実行する
      • 各ステップの後に意味のあるメッセージを出力する
      • 各エクスプロイトステップを独自の関数に分離する
      • 各関数呼び出しに明示的に渡す必要がないように、グローバルなSessionオブジェクトを作成する
      • グローバルなBASE_URL文字列を作成し、そこから必要なURLを構築する
      • proxies引数を使用せずにすべてのHTTPリクエストをBurp Suite経由で送信するには、実行時にHTTP_PROXY / HTTPS_PROXY環境変数を設定する
      • ペイロードを安全に送信するためにエンコード/デコード方式を適用する
      • ペイロード文字列にシングルクォート(')とダブルクォート(")の両方が含まれる場合は、"""を使用して作成する
      • マルチスレッドを使用してSQLインジェクションを高速化する
      • 認証済み機能のエクスプロイトを開発する際は、認証済みユーザーのCookieをハードコードする
      • ペイロードに波括弧({})が多すぎる場合は、f-strings(f"")やstr.formatの使用を避ける

コードスニペット

開始用テンプレート

import requests

def main():
    print("Hello World!")

if __name__ == __main__:
    main()

便利なインポート

# For sending HTTP requests
import requests

# For Base64 encoding/decoding
from base64 import b64encode, b64decode, urlsafe_b64encode, urlsafe_b64decode

# For getting current time or for calculating time delays
from time import time

# For regular expressions
import re

# For running shell commands
import subprocess

# For multithreading
from concurrent.futures import ThreadPoolExecutor

# For running a HTTP server in the background
import threading
from http.server import HTTPServer, BaseHTTPRequestHandler

# For parsing HTTP cookies
from http import cookies

# For getting command-line arguments
import sys

requestsライブラリの使用

最もシンプルなHTTPリクエストを送信する

resp_obj = requests.get("https://github.com")

異なるHTTPメソッドを指定する

# GET method
requests.get("https://github.com")

# POST method
requests.post("https://github.com")

# PUT method
requests.put("https://github.com")

# PATCH method
requests.patch("https://github.com")

# DELETE method
requests.delete("https://github.com")

HTTPレスポンスを読み取る

resp_obj = requests.get("https://github.com")

# HTTP status code (e.g 404, 500, 301)
resp_obj.status_code

# HTTP response headers (e.g Location, Content-Disposition)
resp_obj.headers["Location"]

# Body as bytes
resp_obj.content

# Body as a string
resp_obj.text

# Body as a dictionary (if body is a JSON)
resp_obj.json()

URL内のクエリ文字列としてデータを送信する(params引数を使用)

params = {
    "foo": "bar"
}

requests.get("https://github.com", params=params)

ボディ内のクエリ文字列としてデータを送信する(data引数を使用)

data = {
    "foo": "bar"
}

requests.post("https://github.com", data=data)

ボディ内のJSONとしてデータを送信する(json引数を使用)

data = {
    "foo": "bar"
}

requests.post("https://github.com", json=data)

ボディ内でファイルを送信する(files引数を使用)

files = {
    #                (FILE_NAME, FILE_CONTENTS, FILE_MIMETYPE)
    "uploaded_file": ("phpinfo.php", b"<?php phpinfo() ?>", "application/x-httpd-php")
}

requests.post("https://github.com", files=files)

HTTPヘッダーを設定する(headers引数を使用)

headers = {
    "X-Forwarded-For": "127.0.0.1"
}

requests.get("https://github.com", headers=headers)

HTTP Cookieを設定する(cookies引数を使用)

cookies = {
    "PHPSESSID": "fakesession"
}

requests.get("https://github.com", cookies=cookies)

3XXリダイレクトの追跡を無効にする(allow_redirects引数を使用)

requests.post("https://github.com/login", allow_redirects=False)

検証されていないHTTPSサーバーとやり取りする(verify引数を使用)

ツールをダウンロード