ネットワーク
nc
TCP/UDP接続を確立するネットワークツール。CTFでのフラグ取得やポートスキャンにも使う
SYNTAX
nc [options] host port 主なオプション
| オプション | 説明 |
|---|---|
-l | リッスンモード(サーバー側として待ち受ける) |
-p <port> | ローカルポートを指定 |
-u | UDP を使用(デフォルトは TCP) |
-v | 詳細表示(接続状態を表示) |
-z | 接続確認のみ(データ送受信なし) |
-w <sec> | タイムアウト秒数 |
-n | DNS 解決をしない(IPアドレス直指定) |
使用例
サーバーへの接続
# ホストのポートに接続(フラグを返すCTFサービスに接続する典型例)
nc challenge.picoctf.org 25790
# Webサーバーに手動でHTTPリクエストを送る
nc example.com 80
GET / HTTP/1.0
Host: example.com
ポートの確認
# ポートが開いているか確認(-z = スキャンのみ)
nc -zv example.com 80
# ポート範囲をスキャン
nc -zv 192.168.1.1 20-100
ファイル転送
# 受信側(先に起動する)
nc -l -p 1234 > received_file.txt
# 送信側
nc 192.168.1.100 1234 < file_to_send.txt
簡易チャット
# サーバー側
nc -l -p 4444
# クライアント側
nc 192.168.1.100 4444
簡易Webサーバー(1回限り)
# HTTP レスポンスを返す
{ echo -e "HTTP/1.0 200 OK\r\n\r\nHello"; } | nc -l -p 8080
CTF での典型的な使い方
CTFのGENERAL SKILLSカテゴリでは「このホストのこのポートに接続せよ」という問題が頻出。
# 接続するだけでフラグが返ってくる
nc jupiter.challenges.picoctf.org 25790
# 対話的なシェルを要求するサービスに接続
nc pwn.challenge.ctf.io 9001
ncat(nmap版nc)との違い
GNU netcat (nc) と ncat (nmap付属) があり、オプションが若干異なる場合がある。nc -h でバージョンを確認するとよい。