最近ちょっとWeb関係の対応をしてたりするのだけど、よくXSSなどでテストの際に使用するalert()関数を上書きできると知ったので、実際にやってみることにする。
そもそもJavascriptでは、後から同じ関数を宣言することで上書きすることができるらしい。で、alertを上書きする場合、以下のようにするといいようだ。
<html>
<head>
<script>
(function(proxied) {
window.alert = function() {
// alertの内容をTEST1234に上書き
return proxied.apply(this, ['TEST1234']);
};
})(window.alert);
</script>
</head>
<body>
<script>alert('てすと');</script>
</body>
</html>
もともとあったalertの内容も利用する場合は、argumentsという配列に入っているので、そこから最初の要素を取り出して文字列結合してやればいい。
よくCTFなどでXSSに成功するとFLAGを取得したりページ遷移したりするサイトがあるけど、こういったことをしているのかな。