XSS漏洞原理及理解

1. 簡介

   XSS:跨站腳本攻擊(Cross Site Scripting):惡意攻擊者往Web頁面中插入惡意JavaScript代碼,當用戶瀏覽網頁時嵌入的JavaScript代碼執行,從而達到惡意攻擊用戶的目的。

2. XSS漏洞靶場搭建

2.1 靶場環境

  • kali虛擬機
  • Apache服務器
  • PHP
  • Firefox瀏覽器

2.2 靶場實現

  1. kali虛擬機安裝,kali虛擬機中集成了我們靶場需要的開發環境Apache2+php+Firefox

3 XSS原理

  1. service apache2 start 啓動Apache2服務,在/var/www/html路徑下新建一個xss.php頁面,文件中寫入代碼:

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <title>xss</title>
    </head>
    
    <body>
    <form action="" method="get">
        <input type="text" name="xss_input">
        <input type="submit">
    </form>
    <hr>
    <?php
    /**
     * Created by PhpStorm.
     * User: root
     * Date: 12/6/16
     * Time: 4:11 PM
     */
    $xss = $_GET['xss_input'];
    echo "your text is <br>" .$xss
    ?>
    </body>
    </html>
    
  2. 訪問頁面如圖所示:

    這裏寫圖片描述
  3. 在輸入框中輸入任意字符,你輸入的字符就會顯示在頁面中,比如輸入yaofei,返回如圖所示:

    這裏寫圖片描述
  4. 查看網頁源代碼:

    這裏寫圖片描述
    我們輸入的字符串原封不動的輸出出來,我們進行一個假設,當我們在輸入框中輸入<script>alert('hello')</script>時,會出現什麼樣的結果呢?按照上述的例子我們可以知道我們的輸入<script>alert('hello')</script>時,他應該存在第14行的<br></body>之間,所以會彈出hello的對話框。
  5. 輸入<script>alert('hello')</script>來驗證我們的想法:

    這裏寫圖片描述
    說明我們的想法是正確的,查看相應的源代碼:

    這裏寫圖片描述
    我們的假設成功了。

    注:chrome瀏覽器可能這個代碼不能實現,因爲chrome的內核和ie的內核不同,chrome的過濾機制比ie強,所以當你輸入xss的時候可能被chrome的過濾機制過濾了。

    這裏寫圖片描述

4 XSS利用輸出環境來構造代碼

  1. 在相同路徑下新建XSS2.php文件,代碼:

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>XSS_TEST</title>
    </head>
    <body>
    <center>
        <h6>INPUT VALUE</h6>
        <form action="" method="get">
            <h6>INPUT</h6>
            <input type="text" name="xss_input_value" value="input"><br>
            <input type="submit">
    
        </form>
        <hr>
    
    <?php
    /**
     * Created by PhpStorm.
     * User: root
     * Date: 12/19/16
     * Time: 1:46 PM
     */
        $xss = $_GET['xss_input_value'];
        if(isset($xss)){
            echo '<input type="text" value="'.$xss.'">';
        }
        else{
            echo '<input type="text" value="output">';
        }
    
    ?>
    </center>
    </body>
    </html>
    
  2. 頁面如圖所示:

    這裏寫圖片描述
    當你在輸入對話框中輸入你的內容,輸出對話框將你的內容進行輸出。我們同樣可以用<script>alert('hello')</script>來進行測試,發現輸出框直接源碼輸出了<script>alert('hello')</script>字符串。

    這裏寫圖片描述
    說明我們的js腳本並沒有執行。同樣,我們可以查看網頁的源代碼:

    這裏寫圖片描述
      我們看到,我們的輸入<script>alert('hello')</script>的腳本被存入了input標籤的value中,所以js腳本並沒有執行。通過第一個例子我們可以知道當我們的js腳本在<br><body>標籤裏的時候是可以執行的。
      所以要想我們的js腳本能夠執行的話,我們可以把我們的js“移動”到input標籤的外面,話說那我們怎麼才能把我們的js腳本移動到input標籤外面呢?
      聰明的人可能已經想到了,我們可以從輸入中自己構造代碼來使input標籤閉合。輸入"> <script>alert('hello')</script>,”>是用來閉合input標籤的,測試一下:

    這裏寫圖片描述
      成功彈框!!!查看一下源代碼:

    這裏寫圖片描述
      可以看到<script>alert('hello')</script>已經放到了input標籤外面,js腳本也執行了。
  3. XSS的腳本是不是一定要含有<script></script>標籤呢?因爲我們可以看到很多的網站對XSS漏洞進行防護的時候都會把<script>標籤給禁用掉,那樣是不是就徹底杜絕了XSS漏洞呢?
      答案當然是不是這樣的,XSS漏洞的原理就是頁面執行JavaScript腳本,難道調用JavaScript只能用<script>標籤嗎,很顯然不是的,下面我就介紹幾種XSS不需要調用<script>標籤的方法:
      還用這個環境: " onclick="alert('hello'),onclick事件可以執行js腳本,所以當我們點擊輸出框的時候可以看到彈出框,源代碼:

    這裏寫圖片描述
    同理:Onmousemove事件,鼠標移動時觸發也可以實現:" Onmousemove="alert('hello')
    同時還有其他標籤可以實現相效果:

    <img src=1 onerror=alert('hello')>:找不到圖片1的時候執行alert("hello")
    <a href=javascript:alert('hello')>s</a>:點擊s超鏈接執行js腳本alert("hello")
    <iframe src=javascript:alert('hello');height=0 width=0 />:利用<iframe>的src執行alert("hello")
    

5 XSS利用

  XSS 難道就是用來彈框的嗎?當然不是,我們之前做的所有的工作只是爲了驗證XSS漏洞的存在。
  XSS最有用的用途就是獲取用戶或者管理員的cookie,拿到cookie之後我們可以通過一些工具:如burpsuite來更改自己的cookie,就可以不用輸入用戶名,密碼,驗證碼等,以其他用戶的身份對網站進行控制用戶等操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章