javascript関数ハイジャック[xfocus]第1/3ページ


一、概説javascript関数ハイジャック、つまり外国人が言及したjavascript hijacking技術です。最初は剣心の学生と問題を討論する時に偶然見たコードです。大体こんなふうに書いています。window.alert=function()です。このような使い方はとても巧みで新奇だと思います。API Hookとは違って、むしろjavascript function hookと言います。つまり関数ハイジャックです。js関数を置き換えることによって、この関数の呼び出しをハイジャックする目的を達成します。完全なhook alert関数の例は以下の通りです。1.httm-->
 
<script type="text/javascript">
<!--
var _alert = alert;
window.alert = function(s) {
if (confirm(" , \"" + s + "\"?")) {
_alert(s);
}
}
//-->
</script>
<html>
<body>
<input type="button" onclick="javascript: alert('Hello World!')" value="test" />
</body>
</html>
API Hookをやったことがある学生達はこのコードを見てきっと会心して笑って、先に元の関数を保存して実現して、それから私達自身の関数に変えて実現して、私達の処理ロジックを追加してから最後に元の関数を呼び出して実現します。このalert函数は私達に乗っ取られました。原理はとても簡単です。次にはいくつかの典型的な応用を挙げてみます。私達はそれを利用して何をすることができますか?二、応用例1.簡単なjavascript debuggerを実現します。ここではdebuggerと比較してタイトル党と言いますが、実はdebuggerの機能に少し似ています。主にjs関数をハイジャックして関数のbreak pointを実現します。簡単な例を見てみます。
 
<script type="text/javascript">
<!--
var _eval = eval;
eval = function(s) {
if (confirm("eval


" + eval.caller + "


" + s)) {
_eval(s);
}
}
//-->
</script>
<html>
<head>
</head>
<body>
<script type="text/javascript">
<!--
function test() {
var a = "alert(1)";
eval(a);
}
function t() {
test();
}
t();
//-->
</script>
</body>
</html>
はjs関数ハイジャックの中断関数で実行して、パラメータと関数のコードを表示します。完全な例の効果を見てください。help debug commands:bp-set a breakpoint on on a function、e.g.「bpwindow.alert」.bl-list all breakpoints.bc-remove a break breakpoint byber.specifide.g.「bc 0」.help-help information.>bp window.alert*breakpoint on function「window.alert」added success fully.>bl*1 breakpoints:0-windows.alert>bc 0*breakpoint on function「windows.windowlect.windows.windows.dowlect.」ここでデモポイントを削除します。2.トラップを設定してリアルタイムでクロスステーションテスト者を捕らえ、クロスステーションをする人はいつもalertでスパンがあるかどうかを確認します。もし誰かがあなたのウェブサイトのxssをテストしているかを監視したいなら、監視したいページでhookalert関数を記録します。alert呼び出し状況を記録します。
 
<script type="text/javascript">
<!--
function log(s) {
var img = new Image();
img.style.width = img.style.height = 0;
img.src = "http://yousite.com/log.php?caller=" + encodeURIComponent(s);
}
var _alert = alert;
window.alert = function(s) {
log(alert.caller);
_alert(s);
}
//-->
</script>
もちろん、この関数はページの最初に追加します。赫赫、あなたは甚だしきに至ってはalertを枠を弾きませんかますそれとも警告枠を弾きませんことができて、テスト者に気違いをさせます。3.DOM XSS自動化スキャンを実現し、現在一般的なXSS自動化スキャンの方法は、httpの返却結果から特徴を検索して、ホールがあるかどうかを判定することであるが、DOM XSSをスキャンするのには適用されない。例えば、この間剣心によって発見されたgoogleのスパン(付録[2])の原理は以下の通りです。document.write(document.location.hash);このようなスパンはhttp reponseに反映されないので、伝統的なスキャン方法はスキャンできません。しかし、前の例からインスピレーションを受けると、必ず落とし穴を設ける方法が思いつきます。DOM XSSは最終的にalertを実行させます。だから、私達のhook alert関数は落とし穴を設置します。XSSが成功すれば、alert関数を呼び出して、私達の落とし穴記録結果をトリガします。4.jsハイジャックを活用して、ページコードの分析作業をサポートします。例えば、木馬のページコードを分析する時、evalまたはdocument.writeを通じて暗号化する場合がよくあります。そこで、私達はセクションhook evalとdocument.writeのツールを作成して、復号を支援します。
 
<script type="text/javascript">
<!--
var _eval = eval;
eval = window.execScript = window.document.write = window.document.writeln = function(s) {
document.getElementById("output").value = s;
}
//-->
</script>
<html>
<body>
input:
<textarea id="input" cols="80" rows="10"></textarea>
<input type="button" onclick="javascript: _eval(document.getElementById('input').value);" value="decode" />
<br />
output:
<textarea id="output" cols="80" rows="10"></textarea>
</body>
</html>
はinputボックスに暗号化コードを入力します。eval(unescape%%)。outputボックスに復号後のコードを出力します。alert(1);もちろん、もっと柔軟な応用を考えられます。
1 2 3 次のページ 全文を読む