Details - TK-CTF/CTF GitHub Wiki

Cross-Site Scripting(XSS)

動的に生成するHTMLにJavaScriptなどを注入する

テクニック

  • 属性値(URL)のJavaScriptスキーム
  • イベントハンドラ
  • script要素内の文字列リテラル
  • Service Worker(?)
  • アップロードしたファイルをHTMLとして認識させる

影響

  • Cookie値の盗み出し(受動的攻撃)
  • 画面の書き換え
  • その他のJavaScriptによる攻撃

対策

  • 要素内容なら<&をエスケープ
  • 属性値なら"で囲って<"&をエスケープ
  • HTTPレスポンスに文字エンコーディングを明示
  • 入力値の妥当性検証
  • X-XSS-Protectionレスポンスヘッダ
  • HttpOnly属性

SQL Injection

テクニック

  • 常に真
    ' OR 0=0 --
  • INFORMATION_SCHEMA
    UNION SELECT table_name, column_name, data_type, NULL, NULL, NULL, NULL FROM information_schema.columns ORDER BY 1 --
  • Blind SQL Injection
    • 文字数%dを取得
      ' OR (SELECT length(pass) FROM user WHERE id = 'admin') > %d --
    • %d番目の文字%cを取得
      ' OR substr((SELECT pass FROM user WHERE id = 'admin'), %d, 1) = %c --

影響

  • エラーメッセージ経由の情報漏洩
  • UNION SELECTを用いた情報漏洩
  • 認証回避
  • データ改竄
  • OSコマンドの実行
  • ファイルの読み書き
  • HTTPリクエストにより他のサーバーを攻撃

対策

  • 入力値の妥当性検証
  • 静的プレースホルダ
  • (PD0)
  • 詳細なエラーメッセージの抑止
  • データベースの権限設定

Cross-Site Request Forgery(CSRF)

テクニック

  • パスワードの変更
  • 複数のiframeで多段攻撃

手順

  1. ユーザが罠サイトを閲覧
  2. 仕掛けのあるHTMLが正規サイトに攻撃用リクエスト
  3. 正規サイトのサーバーを不正操作

対策

ユーザの意図したリクエストか確認

  • 秘密情報の埋め込み
  • パスワード再入力
  • Refererのチェック

Directory Traversal

テクニック

  • Directory Listing
  • ファイル名が日付やユーザ名、連番など推測可能
  • ありがちな名前
  • Host/Split(ヌルバイト)
  • プライベートIPアドレスの推測

影響

  • Webサーバー内のファイルの閲覧
  • Webサーバー内のファイルの改竄、削除

対策

  • ファイル名を外部から指定できる仕様を避ける
  • ファイル名にディレクトリ名が含まれないようにする
  • ファイル名を英数字に限定する
  • アプリケーションの設計時に、ファイルの安全な格納位置を決める

OS Command Injection

テクニック

  • find + * -exec cat {} +
  • 内部でシェルを呼び出す関数
    • PHP
      • system
      • exec
      • passthru
      • proc_open
      • popen
      • shell_exec
      • `...`
    • Perl
      • exec
      • system
      • `...`
      • qx/.../
      • open
    • Ruby
      • exec
      • system
      • `...`

シナリオ

  1. 攻撃用ツールを外部からダウンロードする
  2. ダウンロードしたツールに実行権限を与える
  3. OSの脆弱性を内部から攻撃して管理者権限を得る

対策

  • OSコマンドを使わない実装方法を選択する
  • シェル呼び出し機能のある関数の利用を避ける
  • 外部から入力された文字列をコマンドラインのパラメータに渡さない
  • OSコマンドに渡すパラメータを安全な関数によりエスケープする

Denial of Service(DoS)

対策

アップロードできるファイルに制限を課す

Remote Code Execution(RCE)

テクニック

  • 実行ファイルをサーバ内に作成またはアップロード
    • php
    • asp
    • aspx
    • jsp
    • html(SSI:Server Side Include)
    • 多重拡張子
  • eval()

影響

  • OSコマンドの実行
  • Webサーバー内のファイルの閲覧/改竄/削除
  • 外部へのメール送信
  • 別のサーバーへの攻撃(踏み台)
  • サーバー上での暗号通貨の採掘(マイニング)

対策

  • アップロードしたファイルを公開ディレクトリに保存しない

Server-Side Request Forgery

テクニック

  • AWS CLIへのアクセス
  • gopherプロトコル(MySQL)
  • Docker/Kubernetesの呼び出し

Insecure Deserialization

  • Serialize/アプリケーション内部の構造を持ったデータを保存転送する目的でバイト列に変換すること
  • Deserialize/Serializeされたデータから元のデータに戻すこと

テクニック

  • PHPGGC
  • Pickle RCE
  • PHP
    • デストラクタ
    • unserialize_callback_func
    • __wakeup
    • __toString(マジックメソッド)
  • Java
    • readObject

影響

  • OSコマンドの実行
  • 情報漏洩
  • サイト改竄
  • 不正な機能実行
  • 他サイトへの攻撃(踏み台)
  • 暗号通貨の採掘(マイニング)

対策

  • Serialize形式ではなくJSON形式によりデータを受け渡す
  • Cookieやhiddenパラメータではなくセッション変数など書き換えできない形でSerialize形式のデータを受け渡す
  • HMACなどの改竄検知の仕組みを導入してデータが改竄されてないことを確認する

XML External Entity(XXE)

対策

  • XMLの代わりにJSONを用いる
  • libxml2のバージョン2.9以降を用いる
  • libxml_disable_entity_loader(true)を呼び出す

Local/Remote File Inclusion

テクニック

  • PHP入力ストリーム
  • data:ストリームラッパー

影響

  • Webサーバー内のファイルの閲覧による情報漏洩
  • 任意スクリプトの実行
    • サイト改竄
    • 不正な機能実行
    • 他サイトへの攻撃(踏み台)

対策

  • 外部からファイル名を指定する仕様を避ける
  • ファイル名を英数字に限定する

URL上でOSコマンドを実行できる脆弱性

PHP

/test.php?a=testにおいてa=testがクエリー文字列 /test.cgi?hoge+-piyoというURLと
php test.cgi hoge -piyoは等価

Perl

/test.pl/|lsというURLと
perl test.pl |lsは等価