Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

はじめに

先日セキュリティを題材にワークショップを受けてきたのでそのメモ。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は無効化できる。
楽しい٩( 'ω' )و

uc18uc
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away