インジェクション
- HTTPリクエスト送ると、Webアプリケーションは、さまざまなシステムに出力処理を行う場合があります
- データベースにデータを書く
- シェルを実行する
- メールを送る
- ブラウザに返信する
- 上記に共通することは、何らかの文字列を処理しているところ
- DBへの処理だと、SQL
- HTTPメッセージ処理だと、HTML
これらに不備があると脆弱性が発生します これらの脆弱性がインジェクンションに分類されます
代表的な攻撃を以下にまとめます
SQLインジェクション
- DBを利用しているWebアプリケーションで、SQLの呼び出しに不備がある場合に発生する脆弱性
検索画面があって、検索フォームに「ドラえもん」と入力する
- すると以下のようなURLをリクエストする
http://example.com/search?q=ドラえもん
- 上記リクエストからSQLを生成する処理が走る
SELECT * FROM animeTbl WHERE title='ドラえもん' and delete_flag = 0;
- もしインジェクションが発生するWebアプリだと「ドラえもん’ –」ように入力すると見られちゃまずいデータが見られることになります
http://example.com/search?q=ドラえもん' --
- なぜなら以下のようにSQLが解釈されてしまうから
SELECT * FROM animeTbl WHERE title='ドラえもん' --' and delete_flag = 0;
- 上記のSQLだと、delete_flagというものが無効になるので、delete_flagに関係なくデータが見えてしまう
- これを応用すると、さまざまなデータが見れてしまうことになります!
コマンドインジェクション
OSのシェルで動作するコマンドを不正に実行できてしまう脆弱性
SQLインジェクションと同様です
OSコマンドを実行するようなWebアプリケーションがあった場合、URL等に不正な文字列を入れられてしまうと、叩かれては行けないコマンドが叩かれてしまいます。
正常なURLの形 これで、ドメインの管理者を表示するようなWebアプリがあったとします
http://example.com/whois?domein=hoge.jp
- 上記の処理の内容は以下になります
<?php
$domain = $_GET['domain'];
system("/usr/bin/whois $domain");
- 上記の処理だと、以下のURLで悪用できてしまう
http://example.com/whois?domein=;cat /etc/hosts
- 見られていはまずいサーバー情報が見られてしまう。。
CRLFインジェクション
- HTTPレスポンスヘッダーや、メールヘッダーに改行コード(CR+LF)を挿入することで、意図しないヘッダーフィールドを追加することができる脆弱性
- 以下に詳細
HTTPヘッダーインジェクション
レスポンスフィールドに攻撃者が改行コードなどを挿入することで、任意のレスポンスヘッダーフィールドや、ボディを追加することができる脆弱性
にょこた
PM(プロダクトマネージャー)目指して奮闘中、プログラムから、アーキテクト設計、サービス検討から、チームマネジメント、DevOps、いろいろやってます。