Open18

WebGoatで脆弱性を学ぶ

こまきちこまきち

SQL Injection (intro)

データ制御言語(DCL)

DCLを使用して、テーブル、ビュー、関数などのデータベースオブジェクトに対する付与ができます。
DCLコマンドは、データベースオブジェクトにアクセス制御を実装するために使用されます。

  • GRANT
  • REVOKE

GRANTコマンド… 1つもしくは複数のユーザまたはユーザグループに、あるオブジェクト(テーブル、ビュー、シーケンス)に関する特定の権限を与えます。これらの権限は、もしこれまでに許可された権限があった場合それに追加されます。

GRANT
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    TO user_specification [, user_specification] ...
    [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
    [WITH with_option ...]


// テーブル books にデータを追加する権限を全てのユーザに与える
GRANT INSERT ON books TO PUBLIC;

// ビュー kinds の全ての権限を、ユーザtestuser に与えます。
GRANT ALL PRIVILEGES ON kinds TO testuser;



REVOKEコマンド…システム管理者は MySQL アカウントから権限を取り消すことができる

// test@localhostから全ての権限を取り消す
REVOKE ALL PRIVILEGES ON *.* FROM test@localhost;

*MySQL5.7ではPRIVILEGESは省略可能

https://dev.mysql.com/doc/refman/5.6/ja/grant.html
https://www.postgresql.jp/document/7.2/reference/sql-grant.html

こまきちこまきち

What is SQL injection?

クライアントからアプリケーションへのSQLクエリ入力を介した悪意のあるコードの挿入または「インジェクション」

SQLインジェクションは、検索フィールドからの入力など、クライアントからのフィルタリングされていないデータがアプリケーション自体のSQLインタープリターに入るときに発生する可能性があります。アプリケーションが(プリペアドステートメントなどを使用して)ユーザー入力を正しくサニタイズできない場合、または特殊文字に対して入力をフィルタリングできない場合、ハッカーは基盤となるSQLステートメントを有利に操作できます。

こまきちこまきち

Consequences of SQL injection

  • データベースから機密データを読み取って変更する
  • データベースの管理操作を実行します
    • テーブルとログを切り捨てる
    • ユーザーを追加する
  • オペレーティングシステムにコマンドを発行します
    など

これにより、既存のデータを改ざんや取引の無効化や残高の変更、システム上のすべてのデータの完全な開示を許可するなどを行えるようになる。

こまきちこまきち

*CIA トライアド
CIA(CIA トライアド、または AIC トライアドとも呼ばれます)は、秘匿性(Confidentiality)、完全性(Integrity)、可用性(Availability)からなり、情報セキュリティに関する組織の方針のガイドとなるモデルです。

https://developer.mozilla.org/ja/docs/Glossary/CIA

こまきちこまきち

Cross Site Scripting

クロスサイトスクリプティング…エンコードやサニタイズなしでブラウザーにレンダリングされる入力としてのhtml / scriptタグの許容範囲を組み合わせた脆弱性/欠陥

こまきちこまきち

攻撃されやすいもの

  • 検索文字列をユーザーにエコーバックする検索フィールド
  • ユーザーデータをエコーする入力フィールド
  • ユーザー提供のテキストを返すエラーメッセージ
  • ユーザー提供のデータを含む非表示フィールド
  • ユーザー提供のデータを表示するページ
    • 自由形式のコメント
    • メッセージボード
  • HTTPヘッダー
こまきちこまきち

XSSの結果

  • セッションCookieを盗む
  • 誤ったリクエストの作成
  • クレデンシャルを収集するためにページにfalseフィールドを作成する
  • ページを「非フレンドリー」サイトにリダイレクトする
  • 有効なユーザーになりすますリクエストを作成する
  • 機密情報の盗難
  • エンドユーザーシステムでの悪意のあるコードの実行(アクティブスクリプト)
  • 敵対的で不適切なコンテンツの挿入
こまきちこまきち

DOMベースのXSS

DOMと「従来の」反映されたXSSの違いは、DOMを使用すると、ペイロードがサーバーに送信されないことです。クライアントによってのみ処理されます。