ネットワーク

curl

URLからデータを転送するコマンド。HTTP/HTTPS/FTPなど多様なプロトコルに対応。APIのテストや調査に必須

SYNTAX curl [options] url

主なオプション

オプション説明
-X <method>HTTPメソッドを指定(GET/POST/PUT/DELETE など)
-H <header>リクエストヘッダを追加
-d <data>POST データを送信
-F <field=val>フォームデータを送信(multipart)
-o <file>レスポンスをファイルに保存
-OURLのファイル名でそのまま保存
-Lリダイレクトを追跡
-s進捗・エラーを非表示(サイレントモード)
-v詳細表示(リクエスト/レスポンスヘッダも表示)
-Iヘッダのみ取得(HEAD リクエスト)
-u user:passBasic 認証
-kSSL 証明書エラーを無視
-b <cookie>クッキーを送信
-c <file>レスポンスのクッキーをファイルに保存

使用例

基本的な取得

# ページの内容を表示
curl https://example.com
# ファイルをダウンロード(URL のファイル名で保存)
curl -O https://example.com/file.zip
# 別名で保存
curl -o myfile.zip https://example.com/file.zip
# リダイレクトを追跡して取得
curl -L https://short.url/abc

ヘッダの確認

# レスポンスヘッダのみ確認
curl -I https://example.com
# リクエスト・レスポンスを詳細表示
curl -v https://example.com

REST API の操作

# JSON データを取得(Accept ヘッダ付き)
curl -H "Accept: application/json" https://api.example.com/users
# POST: JSON を送信
curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name": "taro", "email": "taro@example.com"}'
# Authorization ヘッダ付きでリクエスト
curl -H "Authorization: Bearer <token>" https://api.example.com/me
# PUT: リソースを更新
curl -X PUT https://api.example.com/users/1 \
  -H "Content-Type: application/json" \
  -d '{"name": "jiro"}'
# DELETE
curl -X DELETE https://api.example.com/users/1

ファイルアップロード

# フォームファイルアップロード
curl -F "file=@/path/to/file.txt" https://upload.example.com/

クッキーの扱い

# ログインしてクッキーを保存
curl -c cookies.txt -d "user=admin&pass=secret" https://example.com/login

# 保存したクッキーを使って認証が必要なページを取得
curl -b cookies.txt https://example.com/dashboard

CTF での使い方

# フラグが含まれるかもしれないレスポンスを取得
curl -s https://challenge.ctf.io/flag

# hidden フォームパラメータを推測してPOST
curl -X POST https://challenge.ctf.io/ -d "secret=flag"

# カスタムヘッダを試す
curl -H "X-Admin: true" https://challenge.ctf.io/secret