記一次原生JS實現XSS攻擊案例

XSS:跨站腳本(Cross-site scripting

攻擊手段和目的:
攻擊者使被攻擊者在瀏覽器中執行腳本後,如果需要收集來自被攻擊者的數據(如cookie或其他敏感信息),可以自行架設一個網站,讓被攻擊者通過JavaScript等方式把收集好的數據作爲參數提交,隨後以數據庫等形式記錄在攻擊者自己的服務器上。

爲了加深自己對XSS攻擊的理解,特意嘗試了一下,並把整個過程記錄下來。

攻擊過程:
①、客戶端收集用戶數據(如留言、發佈文章功能)
②、攻擊者將留言內容寫入了可執行的JavaScript代碼
③、將上面的數據未經處理直接存入數據庫
④、其他用戶查看該網站,看了上面包含了可執行的JavaScript代碼的文章和評論
⑤、其他用戶就會在瀏覽器客戶端執行攻擊者注入的JavaScript代碼

本次試驗用到如下技術:
①、(客戶端)原生Ajax請求
②、(服務端)thinkphp,爲了試驗方便,不使用數據庫,直接返回數據
③、 Cors跨域

原生Ajax請求

<!DOCTYPE html>
<html lang="en">
<head> 
    <meta charset="UTF-8">
    <title>XSS測試</title> 
</head> 
<body> 
    <div id="Text"></div> 
    <input type="button" value="XSS測試"  onclick="ajax();"/> 
    
    <script type="text/javascript"> 
        function ajax() { 
            //先聲明一個異步請求對象 
            let xmlHttpReg = null; 
            if (window.ActiveXObject) { //如果是IE 
                xmlHttpReg = new ActiveXObject("Microsoft.XMLHTTP"); 
            } else if (window.XMLHttpRequest) { 
                xmlHttpReg = new XMLHttpRequest(); //實例化一個xmlHttpReg 
            } 
            
            //如果實例化成功,就調用open()方法,就開始準備向服務器發送請求 
            if (xmlHttpReg !== null) { 
                xmlHttpReg.open("get", "http://vueapp.com", true);
                xmlHttpReg.send(null); 
                xmlHttpReg.onreadystatechange = doResult; //設置回調函數 
            } 
        
            //設定函數doResult() 
            function doResult() { 
                if (xmlHttpReg.readyState == 4) {//4代表執行完成 
                    if (xmlHttpReg.status == 200) {//200代表執行成功 
                        document.getElementById("Text").innerHTML = xmlHttpReg.responseText;   
                    } 
                } 
             }
        } 
    </script> 
</body>
</html>

在這裏我使用的是get請求
其中請求地址http://vueapp.com 是我自定義的地址,使用Apache配置

由於這裏涉及到跨域問題(出於瀏覽器安全的同源策略,協議、域名、端口號任一不同都屬於跨域)

Failed to load http://vueapp.com/: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

我的解決方法是CORS
在後端的接口中添加這麼一行代碼

header('Access-Control-Allow-Origin:*');  // 允許所有訪問源

返回的數據是:

echo "<img src='11.png' onerror='alert(11)'/>";

這裏我們利用img標籤的onerrer屬性來執行JS代碼,所以src屬性填一個訪問不了就可以觸發onerrer了

開始測試

點擊 XSS測試 按鈕,結果如圖(谷歌瀏覽器):
圖片描述


圖片描述

這就是一個最最最簡單的XSS攻擊案例

這次我們去一個網站盜用cookie
圖片描述


圖片描述

可以看到所有的cookie信息都在這裏了

*發現的問題

爲什麼我不直接用script標籤,而用img的onerror屬性。
因爲script標籤有問題,在後臺返回來的script標籤在dom是存在的,但是並沒有執行
還請各位大佬多多指正
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章