WebGoatで脆弱性を学ぶ
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は省略可能
What is SQL injection?
クライアントからアプリケーションへのSQLクエリ入力を介した悪意のあるコードの挿入または「インジェクション」
SQLインジェクションは、検索フィールドからの入力など、クライアントからのフィルタリングされていないデータがアプリケーション自体のSQLインタープリターに入るときに発生する可能性があります。アプリケーションが(プリペアドステートメントなどを使用して)ユーザー入力を正しくサニタイズできない場合、または特殊文字に対して入力をフィルタリングできない場合、ハッカーは基盤となるSQLステートメントを有利に操作できます。
Consequences of SQL injection
- データベースから機密データを読み取って変更する
- データベースの管理操作を実行します
- テーブルとログを切り捨てる
- ユーザーを追加する
- オペレーティングシステムにコマンドを発行します
など
これにより、既存のデータを改ざんや取引の無効化や残高の変更、システム上のすべてのデータの完全な開示を許可するなどを行えるようになる。
*CIA トライアド
CIA(CIA トライアド、または AIC トライアドとも呼ばれます)は、秘匿性(Confidentiality)、完全性(Integrity)、可用性(Availability)からなり、情報セキュリティに関する組織の方針のガイドとなるモデルです。
*TAN = トランザクション認証番号 = ワンタイムパスワード
Authentication Bypasses
Insecure Login
XXE
Insecure Direct Object References
Cross Site Scripting
クロスサイトスクリプティング…エンコードやサニタイズなしでブラウザーにレンダリングされる入力としてのhtml / scriptタグの許容範囲を組み合わせた脆弱性/欠陥
攻撃されやすいもの
- 検索文字列をユーザーにエコーバックする検索フィールド
- ユーザーデータをエコーする入力フィールド
- ユーザー提供のテキストを返すエラーメッセージ
- ユーザー提供のデータを含む非表示フィールド
- ユーザー提供のデータを表示するページ
- 自由形式のコメント
- メッセージボード
- HTTPヘッダー
XSSの結果
- セッションCookieを盗む
- 誤ったリクエストの作成
- クレデンシャルを収集するためにページにfalseフィールドを作成する
- ページを「非フレンドリー」サイトにリダイレクトする
- 有効なユーザーになりすますリクエストを作成する
- 機密情報の盗難
- エンドユーザーシステムでの悪意のあるコードの実行(アクティブスクリプト)
- 敵対的で不適切なコンテンツの挿入
DOMベースのXSS
DOMと「従来の」反映されたXSSの違いは、DOMを使用すると、ペイロードがサーバーに送信されないことです。クライアントによってのみ処理されます。