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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
HRShell — HRShell は flask で構築された HTTPS/HTTP リバースシェルです。多くの機能と能力を備えた高度な C2 サーバーです。 | Kitploit
ツール/GitHubGitHub/chrispetrou/hrshell
暗号化/復号化ツールエクスプロイトリバースエンジニアリングシェルコードポストエクスプロイトウェブセキュリティペネトレーションテストコマンド&コントロールレッドチーミングペイロード開発Archived
GitHub
24869255年前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

HRShell

HRShell は flask で構築された HTTPS/HTTP リバースシェルです。多くの機能と能力を備えた高度な C2 サーバーです。

リポジトリを見る
HRShell: Flask で構築された高度な HTTP(S) リバースシェル

GPLv3 license version Known Vulnerabilities



HRShell は、Flask で構築された HTTPS/HTTP リバースシェルであり、Python 3.x に対応しています。client.py は以下の環境で正常にテストされています:

  • Linux Ubuntu 18.04 LTS、Kali Linux 2019.3
  • macOS Mojave/Catalina
  • Windows 7/10

一方、server.py は Unix システムに対応しています(Windows サポートは近日公開予定…)。

特徴

  • ステルス性が高い
  • TLS サポート 🔑
    • その場で生成される証明書を使用するか、
    • 証明書/鍵ペアを指定します(詳細は後述…)。
  • シェルコードインジェクション 💉(詳細は後述…)
    • 現在実行中のプロセスのスレッド/生成されたプロセスへのシェルコードインジェクション
      • 対応プラットフォーム:
        • Windows x86
        • Unix x86
        • Unix x64
    • または、PID を指定して別のプロセスにシェルコードを注入(migrate <PID>)
      • 対応プラットフォーム:
        • Windows x86
        • Windows x64
  • サーバー側からシェルコードをその場で設定/変更可能(詳細は後述…)
  • クライアントのプロキシサポート。
  • ディレクトリ移動(cd コマンドおよびそのバリエーション)。
  • Unix システムで使用可能なインタラクティブな history コマンド。
  • download/upload/screenshot/hex コマンドが使用可能。
  • パイプライン(|)および連鎖コマンド(;)をサポート。
  • (gdb、top などの)非インタラクティブなコマンドをすべてサポート。
  • サーバーは HTTP および HTTPS の両方に対応。
  • 現時点では 2 つの組み込みサーバーを搭載: Flask 組み込みおよび Tornado-WSGI。また、gunicorn や Nginx などの本番サーバーとも互換性があります。
  • server.py と client.py はどちらも簡単に拡張可能。
  • ほとんどの機能はサーバーのエンドポイント設計に由来するため、他の言語(Java、GO など)でクライアントを簡単に作成できます。

*バージョン変更については CHANGELOG を参照してください。

詳細


ステルス性 :shipit:

HRShell は、クライアントとサーバー間の通信に HTTP(S) プロトコルを使用するため、ステルス性が高くなります。さらに、TLS を使用する場合、トラフィックは暗号化されます。また、証明書がクライアント側にハードコードされておらず(これは実現可能なオプションです)、upload コマンドが使用されていない場合、client.py はディスクに一切触れません。

TLS 🔑

サーバー側: デフォルトでは server.py は HTTPS であり、その場で生成される証明書(Flask の組み込み機能)を使用します。ただし、-s tornado オプションを指定してサーバーに TLS を使用させる場合は、--cert および --key オプションを次のように指定する必要があります。

python server.py -s tornado --cert /path/cert.pem --key /path/key.pem

「本物の」証明書を使用するか、または mkcert や openssl を使用して証明書/鍵ペアを生成することもできます。例:

openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365

証明書/鍵ペアは Flask サーバーでも使用できます:

python server.py --cert /path/cert.pem --key /path/key.pem

⚠️ サーバーが TLS を使用している場合、設計上、クライアントは http://... でサーバーに接続できません。代わりに https を明示的に使用する必要があります。

クライアント側: デフォルトでは、クライアントの SSL 検証は無効になっています。ただし、以下の場合を除きます:

  • --cert パラメータが指定された場合。例:
    python client.py -s https://192.168.10.7:5000 --cert /path/cert.pem
    
  • または、CERT 変数がデフォルトの None 値ではなく、事前に有効な証明書に設定された場合。例:
    CERT = """
    -----BEGIN CERTIFICATE-----
    MIIBoDCCAUoCAQAwDQYJKoZIhvcNAQEEBQAwYzELMAkGA1UEBhMCQVUxEzARBgNV
    BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMSMwIQYD
    VQQDExpTZXJ2ZXIgdGVzdCBjZXJ0ICg1MTIgYml0KTAeFw05NzA5MDkwMzQxMjZa
    ...
    -----END CERTIFICATE-----
    """
    
    この場合、client.py はその場で隠しファイル .cert.pem を作成しようとし、それを使用します。

⚠️ クライアント側で SSL 検証がデフォルトで無効になっているからといって、TLS も無効になるわけでは決してありません。サーバーが TLS を使用している場合は TLS は有効になります。したがって、TLS はサーバーに完全に依存します。クライアント側の --cert オプションは、サーバーとクライアントが暗号化セッションを持つための代替手段として存在するだけです。

シェルコードインジェクション 💉

シェルコードインジェクションには、次の 2 つの「モード」があり、それぞれ以下のコマンドを使用します。

  1. migrate <PID>: このコマンドを使用すると、PID を指定して別のプロセスのメモリ空間にシェルコードを注入できます。現時点では、このコマンドは Windows x86/x64 プラットフォームでのみ適用可能です。
  1. inject shellcode: このコマンドを使用すると、現在のプロセスの新しいスレッド(Unix システムでは生成されたプロセス)が作成され、そのメモリ空間でシェルコードインジェクションが行われます。その結果、HTTP(S) シェルはインジェクションの影響を受けません。このコマンドが適用可能なプラットフォームは、Unix x86/x64、Windows x86 です。
注記
  • プロセスにインジェクションを行う場合、プロセスの権限が非常に重要です。適切な権限がないため、すべてのプロセスにインジェクションできるとは限りません。

シェルコードの設定/変更

クライアントに実行させるシェルコードの種類を指定/設定する方法は 2 つあります:

  • client.py スクリプト内の shellcode 変数に有効なシェルコードを事前に設定するか、
  • set shellcode <shellcode-id> コマンドを使用してその場で設定します。このコマンドを使用すると、サーバー側からクライアント側のシェルコードを何度でも更新できます。

最初の方法は非常に簡単です。ただし、2 番目のより便利な方法(既に指定されたシェルコードを変更することもできます)を使用するには、shellcodes/utils.py スクリプトに任意のシェルコードが含まれるように設定する必要があります。このスクリプトには、その方法の例が含まれています。

💡 server.py を起動した後でも、shellcodes/utils.py スクリプトは何度でも変更/更新できます。server.py は最新のバージョンを動的に使用するためです。これにより、その場でシェルコードを設定および変更できます。

使用可能なコマンド:

特殊コマンド:

gdb、top などの非インタラクティブなコマンドであれば、他のコマンドもすべてサポートされています。また、python server.py -h または python client.py -h と入力すると、サーバーとクライアントで使用可能な引数の情報を取得できます。

注記: クライアントがサーバーに接続されている状態でサーバーを終了する場合は、CTRL+C を押す前に、exit コマンドを使用して接続を閉じる必要があります。

カスタムコマンドの作成

クライアント側:

カスタムコマンドを作成するには、一般的に:

  • コマンドを記述する正規表現ルールをクライアント側で定義する必要があります。
  • そのコマンドを処理するコードを、クライアント側でも elif ステートメントとして追加する必要があります。

サーバー側:

コマンドがサーバー側に新しいエンドポイントの存在を要求する場合:

  • エンドポイントを定義:
    @app.route('/custom_endpoint/<arg>')
    def custom_endpoint(arg):
        """
        必要に応じてドキュメント
        """
        ...
        return ...
    
  • 次に、handleGET() を編集してクライアントをそのエンドポイントにリダイレクト:
    @app.route('/')
    def handleGET():
        ...
        return redirect(url_for('custom_endpoint',
            arg=...)
            )
    
  • 結果の表示を処理するために handlePOST() を適切に編集します。

スクリプト引数

両方のスクリプト(server.py と client.py)は引数でカスタマイズできます:

server.py

$ python server.py -h
usage: server.py [-h] [-s] [-c] [--host] [-p] [--http] [--cert] [--key]

server.py: 高度な機能を備えた HTTP(S) リバースシェルサーバー。

arguments:
  -h, --help      このヘルプメッセージを表示して終了します。
  -s , --server   使用する HTTP(S) サーバーを指定します(デフォルト: flask)。
  -c , --client   指定されたクライアント/IP からの接続のみを受け入れます。
  --host          使用する IP を指定します(デフォルト: 0.0.0.0)。
  -p , --port     使用するポートを指定します(デフォルト: 5000)。
  --http          TLS を無効にして HTTP を使用します。
  --cert          使用する証明書を指定します(デフォルト: None)。
  --key           使用する対応する秘密鍵を指定します(デフォルト: None)。

client.py

$ python client.py -h
usage: client.py [-h] [-s] [-c] [-p]

client.py: 高度な機能を備えた HTTP(S) クライアント。

arguments:
  -h, --help      このヘルプメッセージを表示して終了します。
  -s , --server   接続先の HTTP(S) サーバーを指定します。
  -c , --cert     使用する証明書を指定します。
  -p , --proxy    使用するプロキシを指定します [形式: host:port]

📦 必要条件:

サーバーの必要条件をインストールするには:

ツールをダウンロード