ネットワーク
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> | レスポンスをファイルに保存 |
-O | URLのファイル名でそのまま保存 |
-L | リダイレクトを追跡 |
-s | 進捗・エラーを非表示(サイレントモード) |
-v | 詳細表示(リクエスト/レスポンスヘッダも表示) |
-I | ヘッダのみ取得(HEAD リクエスト) |
-u user:pass | Basic 認証 |
-k | SSL 証明書エラーを無視 |
-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": "[email protected]"}'
# 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