【概要】
■SQLiでの文字列定数の終端方法
| 記号 | シチュエーション |
|---|---|
| ' | 検索式に「 ' 」が使用されている場合 |
| " | 検索式「 " 」が使用されている場合 |
■SQLiでの検索条件の終了・追加方法
| 記号 | 意味 |
|---|---|
| -- | 以降の内容をコメントとして無視させる |
| ; | マルチプルステートメント |
| UNION | SELECT句を追加 |
◇テーブル・カラム定義の読み出し
| DB種別 | 読み出し方法 |
|---|---|
| ORACLE | ' UNION SELECT table_name, column_name FROM user_tab_columns-- |
| SQL Server | ' UNION SELECT t.name, c.name FROM sysobjects t, syscolumns c WHERE t.id=c.id-- |
■SQLi攻撃の防御方法
| シングルクォートのエスケープ | 「'」を「''」に変換 |
| ¥ のエスケープ | 「\」を 「\\」に変換 |
| プリペアードステートメント | ? の場所に入力を埋め込む |
■OSコマンドインジェクション(bash)
| 形式 |
意味 |
説明 |
|---|---|---|
| foo ; bar | 順次実行 | コマンドfooが実行されたあと、コマンドbarが実行される |
| foo & bar | 並列実行 | コマンドfooとコマンドbarが並列で実行される |
| foo ¦ bar | パイプ | コマンドfooとコマンドbarが並列で実行され、fooの標準出力がbarの標準入力に送り込まれる |
| foo && bar | 論理AND | コマンドfooが正常終了(リターンコード 0で終了)したときbarが実行される |
| foo ¦¦ bar | 論理OR | コマンドfooが異常終了(リターンコード 0以外で終了)したときbarが実行される |
| foo `bar` | 引数埋め込み | コマンドbarが実行され、その標準出力がコマンドfooの引数に与えられる |
| foo $(bar) | 引数埋め込み | foo `bar`と同じ |
| foo <(bar) | 名前付パイプ入力 | コマンドbarの出力を受け取る名前付きパイプのデバイス名をfooの引数として与える |
| foo >(bar) | 名前付パイプ出力 | コマンドbarが入力を受け取る名前付きパイプのデバイス名をfooの引数として与える |
https://thinkit.co.jp/free/tech/7/5/4.html
■その他のインジェクション攻撃
| 攻撃の種類 |
行われる不正 |
攻撃例 |
|---|---|---|
| XPathインジェクション | XPath(XML Path 言語)によるXML内要素の検索に干渉して情報を流出させる | user_list//user[uid='foo' and pw='bar']/secret_info/text() fooの場所に「' or 1=1 or ''='」のような値を与えて検索条件を歪める |
| LDAPインジェクション | LDAPの検索条件に干渉して情報を流出させる | (userid=foo) fooの場所にワイルドカード「*」を含む表現を混入し検索条件を緩和する |
| SSIインジェクション | コマンドの不正実行 | HTMLソースにユーザ入力が貼付けられる箇所にのような文字列を与える |
| ファイルの流出 | HTMLソースにユーザ入力が貼付けられる箇所にのような文字列を与える |
https://thinkit.co.jp/free/tech/7/5/4.html
【公開情報】
◆脆弱なWebアプリケーション 第5回:インジェクション攻撃 (セントラル・コンピュータ・サービス 長谷川 武, 2005/05/25)
https://thinkit.co.jp/free/tech/7/5/1.html
https://thinkit.co.jp/free/tech/7/5/2.html
https://thinkit.co.jp/free/tech/7/5/3.html
https://thinkit.co.jp/free/tech/7/5/4.html
【関連まとめ記事】
◆SQL Injection (まとめ)
https://malware-log.hatenablog.com/entry/SQL_Injection