UNIONインジェクション実際に起きた事例SQLインジェクションを防ぐための対策セキュリティ業界に転職して、最初に自分に足りていないと感じたのが、Webアプリケーションに関する技術、知識です。公開されているサーバーということもあり、攻撃者にも狙われやすく、脆弱性も非常に多いです。私はその脆弱性の内容を知る前に、そもそもWebアプリの知識が無い!Webアプリケーションというわけではまずは簡単にWebアプリケーションについて。Webアプリケーションのシンプルな概念図は下図の通りです。いったサイトを表示するために稼働しているのが、Webサーバー上のWebアプリケーションです。WebアプリケーションはユーザーのHTTPリクエストの内容に応じて、データベースに要求を出し、その応答結果をユーザーのブラウザ上に表示させるといった動きをします。した仕組みは身近なところでいうと、ユーザーID/パスワードを入力させるログインページ等が該当します。ユーザーが入力する値があり、そこを介してWebアプリケーションやその裏のデータベースを攻撃する種類の1つにSQLインジェクションがあるようです。SQLインジェクションってどんなもん?アプリケーションのセキュリティ上の不備を意図的に利用し、アプリケーションが想定しないSQL文を実行させることにより、データベースシステムを不正に操作する攻撃方法のこと。その攻撃を可能とする脆弱性のことである。Wikipediaには記載があります。んーイメージ湧かない。SQL文が分からない。データベースを操作するための言語なんだろな〜くらい。無線通信ばかりやってきた人間にとって、アプリ側の言語はよう分からん。調べて学んでみますかね。Wikipediaですかね。分かれていて、今回の場合、操作言語がメインになりそうですね。特定の1行を取り出すときは以下のような構文になると。これが一番基本になりそうです。列名2=値2今回使いそうな構文はその他にはUNION句。以下の構文の場合、UNIONは2つのSELECT文を結合するする意味合いを持ちます。Products詳細は以下をご参照ください。MySQLの使い方SQLインジェクションの攻撃手法さて、じゃあどんな感じで実際に攻撃する方法を見て行こう。いくつか典型的な攻撃方法があるようです。認証回避Webページでよくあるユーザ名とパスワードを入力する画面です。そこでユーザ名($uid)とパスワード($pwd)を入れる場合のWebアプリケーション側の処理は以下になります。pwd='$pwd'入力されたユーザ名とパスワードがデータベースにある内容と一致した場合に認証する仕組みです。ここに以下のような入力をしてみましょう。'A'='Aそうすると、以下のようなSQL文になってしまします。'A'='A'こうなるとORの後の文は常に真なので、ユーザ名、パスワード関係なしにログインできてしまいます。して不正な方法でログインするのが認証回避のSQLインジェクションです。ふぅ、ようやく少し分かってきた。UNIONインジェクションさて、次はUNIONインジェクションです。これはどんな場面であるのか。代表的な例で見ていきましょう。Webページで商品検索とかできるページを例に考えます。攻撃対象は以下のような構文です。category='ユーザ入力'攻撃する入力は以下のような文を突っ込みます。account_table--これを入れた場合のSQL文は以下のようになります。account_table--'この場合、UNION句の後のSELECT文の結果も結合されてWebページ上に表示されます。してユーザーIDとパスワードの組み合わせの情報が不正に取得することができます。ここまで説明を繰り広げてきましたが、実際どないやねん、とイマイチイメージできない場合は実際に試しちゃいましょう。以下サイトをご参照ください。Lancork実際に起きた事例netshop.impress.co.jpwww.yomiuri.co.jpなどなど。調べれば山のように出てきます。Firewallなどなど。次回以降に紹介していきたいと思います。Firewall)について。転職して最初...2017-08-08ファイアウォールとDMZ化についてファイアウォールについて調べてみた。はてなブログProセキュリティ、無線、IoT、5Gなどの技術的な内容から転職などのキャリア形成について気が向くままに書いてます。(2)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。