LoginSignup
14
11

More than 5 years have passed since last update.

脆弱性のあるwebサービスを攻撃してみた

Last updated at Posted at 2014-10-21

はじめに

先日セキュリティを題材にワークショップを受けてきたのでそのメモ。iOSのクライアント側の開発ばかりやってきた自分にとって新鮮で面白い内容でした。講義の内容はXSSやSQLインジェクション、CSRFの脆弱性などでとりあえずXSSの初歩についてまとめてみる。

XSSとは
ネットワークを通じた攻撃手法の一つで、保安上の弱点(脆弱性)のあるWebサイトを踏み台に、悪意のあるプログラムをそのサイトの訪問者に送り込む手法。また、そのような攻撃に利用される脆弱性のこと
クロスサイトスクリプティングとは 【 XSS 】 【 Cross Site Scripting 】 - 意味/解説/説明/定義 : IT用語辞典

初めてのXSS

http://localhost:8888/enquiry-form.php?msg=aaaa
上記のようにURLのmsgを受け取って

html
<dd>
    <textarea style="width: 300px; height: 300px;">
        aaaa
    </textarea>
</dd>

このようにhtmlを表示するとき

php
<dd>
    <textarea style="width: 300px; height: 300px;">
        <?php print isset($_GET['msg']) ? $_GET['msg'] : '' ?>
    </textarea>
</dd>

とphpが記述されていた場合、以下のようなURLでscriptを実行することができる。

http://localhost:8888/enquiry-form.php?msg=</textarea></dd><script>alert(document.cookie)</script>

これで簡単にcookieが取得できてしまう。
例えば攻撃者が誰かにこのようなURLを踏ませてcookieを送信させればcookieをゲットできてしまう。
対処法としてphp部分を以下のように変更することで解決できる。

php
<dd>
    <textarea style="width: 300px; height: 300px;">
        <?php print htmlspecialchars(isset($_GET["msg"]) ? $_GET["msg"]: '')?>
    </textarea>
</dd>

ここで使っているのがhtmlspecialchars関数で以下のような特徴を持つ。

htmlspecialchars関数とは
HTMLには特殊な意味(役割)を持っている文字(特殊文字)があり、その文字をHTMLでの意味(役割)としてではなく、ただの文字(見た目は記号)として表示する(させる)ために文字参照値(という言い方が正しいかどうかは分からないが)に置き換える機能を持つ関数。
フォームなどでユーザー(他者)からの悪意ある入力を無害化するのに用いられ、安全性を高めるためにも指定しておくことが望ましい。
htmlspecialchars関数

これでさっきのscriptは無効化できる。
楽しい٩( 'ω' )و

14
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11