目次

目次

あなたのWebアプリケーションは安全ですか? 〜 インジェクション編 〜

にょこた
にょこた
最終更新日2017/09/07 投稿日2017/09/07

インジェクション

  • 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、いろいろやってます。

目次