簡單易懂的XSS(跨站指令碼攻擊)

C_Halin發表於2020-10-29

跨站指令碼(簡稱為XSS或跨站指令碼或跨站指令碼攻擊)是針對Web應用程式的安全漏洞攻擊,允許使用者插入惡意的指令碼,從而當使用者瀏覽網頁時,插入的指令碼就會執行。從而達到攻擊的目的。

1.反射型XSS

反射型XSS又叫非永續性XSS,反射型XSS注入的惡意程式碼不會儲存在伺服器端,需要欺騙使用者去點選惡意連結才能攻擊成功。一般通過XSS來竊取使用者的cookie。
反射型XSS攻擊流程:
在這裡插入圖片描述

2.儲存型XSS

儲存型XSS又叫持久型XSS,攻擊指令碼會永久儲存在目標伺服器中。例如在個人資訊或者留言板之類的地方插入惡意指令碼,使用者訪問這些帶有惡意指令碼的頁面時會觸發惡意指令碼中的程式碼。
儲存型XSS攻擊流程:
在這裡插入圖片描述

3.DOM型XSS

DOM型XSS也屬於反射型XSS的一種,是通過修改頁面的DOM節點形成的XSS。

DOM節點:
在這裡插入圖片描述
能觸發DOM型XSS的屬性

document.referer
window.name
location
innerHTML
document.write
eval

小結

在三種型別的XSS漏洞中,儲存型的XSS危害最大。因為他儲存在伺服器端,所以不需要我們和被攻擊者有任何接觸,只要被攻擊者訪問了該頁面就會遭受攻擊。而反射型和DOM型的XSS則需要我們去誘使使用者點選我們植入了惡意指令碼的URL,比如利用社會工程學或者利用在其他網頁掛馬的方式。

反射型XSS

頁面原始碼:

<div id="xssr_main">
                <p class="xssr_title">Which NBA player do you like?</p>
                <form method="get">
                    <input class="xssr_in" type="text" maxlength="20" name="message" />
                    <input class="xssr_submit" type="submit" name="submit" value="submit" />
                </form>
                <?php echo $html;?>
            </div>


        </div><!-- /.page-content -->
    </div>
</div><!-- /.main-content -->





<?php
include_once $PIKA_ROOT_DIR.'footer.php';

?>

這裡有一個使用者提交的頁面,使用者可以在此提交資料,資料提交之後會交給後臺處理。但是站點在前端對輸入的長度進行了限制,我們須在控制檯上修改輸入的長度。
在這裡插入圖片描述

之後,我們可以在輸入框中提交資料: ,看看有什麼反應。
在這裡插入圖片描述
在這裡插入圖片描述
頁面直接彈出了hello的頁面,可以看到我們插入的語句已經被頁面給執行了。

儲存型XSS

頁面原始碼:

<div class="main-content">
    <div class="main-content-inner">
        <div class="breadcrumbs ace-save-state" id="breadcrumbs">
            <ul class="breadcrumb">
                <li>
                    <i class="ace-icon fa fa-home home-icon"></i>
                    <a href="xss.php">xss</a>
                </li>
                <li class="active">儲存型xss</li>
            </ul><!-- /.breadcrumb -->

            <a href="#" style="float:right" data-container="body" data-toggle="popover" data-placement="bottom" title="tips(再點一下關閉)"
               data-content="無用提示:這個留言板的框框是可以拉長和拉寬的,還行不,大兄弟!">
                點一下提示~
            </a>

        </div>
        <div class="page-content">

            <div id="xsss_main">
                <p class="xsss_title">我是一個留言板:</p>
                <form method="post">
                    <textarea class="xsss_in" name="message"></textarea><br />
                    <input class="xsss_submit" type="submit" name="submit" value="submit" />
                </form>
                <div id="show_message">
                    <br />
                    <br />
                    <p class="line">留言列表:</p>
                    <?php echo $html;
                    $query="select * from message";
                    $result=execute($link, $query);
                    while($data=mysqli_fetch_assoc($result)){
                        echo "<p class='con'>{$data['content']}</p><a href='xss_stored.php?id={$data['id']}'>刪除</a>";
                    }

                    echo $html;
                    ?>



                </div>
            </div>



        </div><!-- /.page-content -->
    </div>
</div><!-- /.main-content -->





<?php
include_once $PIKA_ROOT_DIR.'footer.php';
?>

這裡有一個留言板提交的頁面,資料提交給後端之後,後端會將資料儲存在資料庫中。然後當其他使用者訪問這個頁面的留言時,後端調出該資料,顯示給使用者,XSS程式碼就被執行了。

我們在留言框中提交資料: 。
在這裡插入圖片描述
再重新整理下檢視反應。
在這裡插入圖片描述
這時惡意程式碼就插入到資料庫中了。

DOM型XSS

<div class="main-content">
    <div class="main-content-inner">
        <div class="breadcrumbs ace-save-state" id="breadcrumbs">
            <ul class="breadcrumb">
                <li>
                    <i class="ace-icon fa fa-home home-icon"></i>
                    <a href="xss.php">xss</a>
                </li>
                <li class="active">DOM型xss</li>
            </ul><!-- /.breadcrumb -->

            <a href="#" style="float:right" data-container="body" data-toggle="popover" data-placement="bottom" title="tips(再點一下關閉)"
               data-content="先到這裡把什麼是dom搞明白了在說http://www.w3school.com.cn/htmldom/">
                點一下提示~
            </a>

        </div>
        <div class="page-content">

            <div id="xssd_main">
                <script>
                    function domxss(){
                        var str = document.getElementById("text").value;
                        document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
                    }
                    //試試:'><img src="#" onmouseover="alert('xss')">
                    //試試:' οnclick="alert('xss')">,閉合掉就行
                </script>
                <!--<a href="" onclick=('xss')>-->
                <input id="text" name="text" type="text"  value="" />
                <input id="button" type="button" value="click me!" onclick="domxss()" />
                <div id="dom"></div>
            </div>


        </div><!-- /.page-content -->
    </div>
</div><!-- /.main-content -->





<?php
include_once $PIKA_ROOT_DIR.'footer.php';
?>

what do you see?中,我們需要對程式碼進行閉合操作。如,’>。

在這裡插入圖片描述
點選click me!。
在這裡插入圖片描述
發現彈出hello
在這裡插入圖片描述
這裡發現,我們插入的語句已經被頁面給執行了。
這個就是DOM型XSS漏洞

相關文章