<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    跨站腳本漏洞(XSS)基礎講解

    VSole2021-10-18 05:42:07

    XSS漏洞

    一、文章簡介

       XSS漏洞是Web應用程序中最常見的漏洞之一。如果您的站點沒有預防XSS漏洞的固定方法,那么很可能就存在XSS漏洞。

    這篇文章將帶你通過代碼層面去理解三個問題:

    • 什么是XSS漏洞?
    • XSS漏洞有哪些分類?
    • 如何防范XSS漏洞?

    二、XSS 漏洞簡介

        跨站腳本攻擊是指惡意攻擊者往Web頁面里插入惡意Script代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的Script代碼會被執行,從而達到惡意攻擊用戶的目的。

        xss漏洞通常是通過php的輸出函數將javascript代碼輸出到html頁面中,通過用戶本地瀏覽器執行的,所以xss漏洞關鍵就是尋找參數未過濾的輸出函數

        常見的輸出函數有:echo printf print print_r sprintf die var-dump var_export.

    xss 分類:(三類)

    • 反射型XSS:<非持久化> 攻擊者事先制作好攻擊鏈接, 需要欺騙用戶自己去點擊鏈接才能觸發XSS代碼(服務器中沒有這樣的頁面和內容),一般容易出現在搜索頁面。
    • 存儲型XSS:<持久化> 代碼是存儲在服務器中的,如在個人信息或發表文章等地方,加入代碼,如果沒有過濾或過濾不嚴,那么這些代碼將儲存到服務器中,每當有用戶訪問該頁面的時候都會觸發代碼執行,這種XSS非常危險,容易造成蠕蟲,大量盜竊cookie(雖然還有種DOM型XSS,但是也還是包括在存儲型XSS內)。
    • DOM型XSS:基于文檔對象模型Document Objeet Model,DOM)的一種漏洞。DOM是一個與平臺、編程語言無關的接口,它允許程序或腳本動態地訪問和更新文檔內容、結構和樣式,處理后的結果能夠成為顯示頁面的一部分。DOM中有很多對象,其中一些是用戶可以操縱的,如uRI ,location,refelTer等。客戶端的腳本程序可以通過DOM動態地檢查和修改頁面內容,它不依賴于提交數據到服務器端,而從客戶端獲得DOM中的數據在本地執行,如果DOM中的數據沒有經過嚴格確認,就會產生DOM XSS漏洞。

    三、XSS 漏洞原理

    3.1 反射型XSS

        在黑盒測試中,這種類型比較容易通過漏洞掃描器直接發現,我們只需要按照掃描結果進行相應的驗證就可以了。

        相對的在白盒審計中, 我們首先要尋找帶參數的輸出函數,接下來通過輸出內容回溯到輸入參數,觀察是否過濾即可。

        無案例不足以求真,這里我們選用echo()函數作為實例來分析:

        新建 XssReflex.php,代碼如下:

    XSS
    
    
    
    
    
    
    
    
    $XssReflex = $_GET['input'];
    echo 'output:
    '.$XssReflex;
    ?>
    
    
    

        這是一個很簡單、也很常見的頁面:

        變量 $XssReflex 獲取 get 方式傳遞的變量名為 input 的變量值(值為一個字符串),然后直接通過echo()函數輸出,注意這中間并未對用戶輸入進行任何過濾。

        打開Firefox輸入url:localhost/codeaudit/xss/XssReflex.php :

        當我們輸入 1 ,頁面返回 1 :

        當我們輸入hello時,頁面返回 hello :

        

        以上都為正常的輸出,但如果我們輸出一些javascript代碼呢?

        比如我們輸入alert('xss') :

        

        可以看到瀏覽器成功彈窗,說明我們輸出的JavaScript代碼成功被執行了。

    我們查看網頁html代碼:

        第12行增加了:

    alert('xss')
    

        這個彈窗并沒有什么實際的意義,但通過它我們知道輸入javascript代碼是可以被執行的,當我們輸入一些其他函數,比如document.cookie就可以成功盜取用戶的cookie信息,或者讀取用戶瀏覽器信息等,為我們進一步深入攻擊做鋪墊。

    3.2 存儲型XSS

        和反射性XSS的即時響應相比,存儲型XSS則需要先把利用代碼保存在比如數據庫或文件中,當web程序讀取利用代碼時再輸出在頁面上執行利用代碼。但存儲型XSS不用考慮繞過瀏覽器的過濾問題,屏蔽性也要好很多。

        存儲型XSS攻擊流程:

        存儲型XSS的白盒審計同樣要尋找未過濾的輸入點和未過濾的輸出函數。

        使用cat命令查看 XssStorage.php 代碼

    shiyanlou:~/ $ cat XssStorage.php
    

        代碼如下:<參考自JackholeLiu的博客>

    XssStorage
    
    
    Message Board
    
    
        Message:
    
    
        Subuser:
    
    
    
    
    if(isset($_POST['user'])&&isset($_POST['desc'])){  
        $log=fopen("sql.txt","a");  
        fwrite($log,$_POST['user']."\r");  
        fwrite($log,$_POST['desc']."\r");  
        fclose($log);  
        }  
    
    if(file_exists("sql.txt"))  
        {  
        $read= fopen("sql.txt",'r');  
    while(!feof($read))  
        {  
    echo fgets($read)."
    ";  
        }  
        fclose($read);  
        }  
    ?>
    
    
    

        頁面功能簡述:

    這個頁面采用POST提交數據,生成、讀取文本模擬數據庫,提交數據之后頁面會將數據寫入sql.txt,再打開頁面時會讀取sql.txt中內容并顯示在網頁上,實現了存儲型xss攻擊模擬。

        打開Firefox輸入url:localhost/codeaudit/xss/XssStorage.php :


        我們隨意輸出一些內容:


        可以看到頁面正常顯示頁面留言信息。

        當我們在Message中輸入alert('xss')時,頁面成功彈窗 :

        并且我們重啟瀏覽器之后再加載該頁面,頁面依然會彈窗,這是因為惡意代碼已經寫入數據庫中,每當有人訪問該頁面時,惡意代碼就會被加載執行!


        我們查看網頁html代碼:


        這就是所謂的存儲型XSS漏洞,一次提交之后,每當有用戶訪問這個頁面都會受到XSS攻擊,危害巨大。

    3.3 DOM XSS

        這種XSS用的相對較少,并且由于其特殊性,常見的漏掃工具都無法檢測出來,這里先不做講解。

        記個待辦,以后來補!

    四、XSS漏洞防范

    4.1 反射型xss漏洞防范

       php中xss的漏洞防范方法總結:<參考自Segmentfault>

    A.PHP直接輸出html的,可以采用以下的方法進行過濾:
    
        1.htmlspecialchars函數
        2.htmlentities函數
        3.HTMLPurifier.auto.php插件
        4.RemoveXss函數
    
    B.PHP輸出到JS代碼中,或者開發Json API的,則需要前端在JS中進行過濾:
    
        1.盡量使用innerText(IE)和textContent(Firefox),也就是jQuery的text()來輸出文本內容
        2.必須要用innerHTML等等函數,則需要做類似php的htmlspecialchars的過濾
    
    C.其它的通用的補充性防御手段
    
        1.在輸出html時,加上Content Security Policy的Http Header
        (作用:可以防止頁面被XSS攻擊時,嵌入第三方的腳本文件等)
        (缺陷:IE或低版本的瀏覽器可能不支持)
        2.在設置Cookie時,加上HttpOnly參數
        (作用:可以防止頁面被XSS攻擊時,Cookie信息被盜取,可兼容至IE6)
        (缺陷:網站本身的JS代碼也無法操作Cookie,而且作用有限,只能保證Cookie的安全)
        3.在開發API時,檢驗請求的Referer參數
        (作用:可以在一定程度上防止CSRF攻擊)
        (缺陷:IE或低版本的瀏覽器中,Referer參數可以被偽造)
    

        這里我們選用htmlentities()函數進行測試:

    htmlentities() 函數把字符轉換為 HTML 實體。

        新建Xss_htmlentities.php, 代碼如下:

    XSS
    
    
    
    
    
    
    
    
    $XssReflex = $_GET['input'];
    echo 'output:
    '.htmlentities($XssReflex);#僅在這里對變量 $XssReflex 做了處理.
    ?>
    
    
    

        在Firefox輸入url:localhost/codoaudit/xss/Xsshtmlentities.php :

    當我們輸入alert('xss') :

        可以看到頁面并沒有彈窗。

        我們再查看網頁html代碼:

        可以看到htmlentities()函數對用戶輸入的<>做了轉義處理,惡意代碼當然也就沒法執行了。

        還有其他過濾函數,紙上學來終覺淺,有興趣的同學可以自己去嘗試一番

    4.2 存儲型xss漏洞防范

        存儲型XSS對用戶的輸入進行過濾的方式和反射型XSS相同,這里我們使用htmlspecialchars()函數進行演示:

    htmlentities() :把預定義的字符 "<" (小于)和 ">" (大于)轉換為 HTML 實體

       htmlspecialchars和htmlentities的區別:

        htmlspecialchars 只轉義 & 、" 、' 、< 、> 這幾個html代碼,而 htmlentities 卻會轉化所有的html代碼,連同里面的它無法識別的中文字符也會轉化。

        新建Xss_htmlspecialchars_Storage.php ,代碼如下:

    XssStorage
    
    
    Message Board
    
    
        Message:
    
    
        Subuser:
    
    
    
    
    if(isset($_POST['user'])&&isset($_POST['desc'])){  
        $log=fopen("sqlStorage.txt","a");  
        fwrite($log,htmlspecialchars($_POST['user'])."\r"); # 在此對用戶輸入數據$_POST['user']進行過濾
        fwrite($log,htmlspecialchars($_POST['desc'])."\r"); # 在此對用戶輸入數據$_POST['desc']進行過濾
        fclose($log);  
        }  
    
    if(file_exists("sqlStorage.txt"))  
        {  
        $read= fopen("sqlStorage.txt",'r');  
    while(!feof($read))  
        {  
    echo fgets($read)."
    ";  
        }  
        fclose($read);  
        }  
    ?>
    
    
    

        在Firefox輸入url:localhost/codoaudit/xss/Xss_htmlspecialchars_Storage.php :


        當我們在Message中輸入alert('xss') :

        可以看到頁面并沒有彈窗。

        我們再查看網頁html代碼:

        可以看到htmlspecialchars()函數對用戶輸入的<>做了轉義處理。

    五、總結及回顧

    • XSS漏洞原理和相關函數:eval() assert() preg_replace() 回調函數 動態執行函數
    • XSS漏洞的防范
    xssdom
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    XSS 的認識與防護策略
    2021-10-15 07:30:55
    防止 XSS 攻擊預防存儲型和反射型 XSS 攻擊存儲型和反射型 XSS 都是在服務端取出惡意代碼后,插入到響應 HTML 里的;因此預防這兩種漏洞,有兩種常見做法:對文本內容做充分轉義。禁止內聯腳本執行。禁止外域提交,網站被攻擊后,用戶的數據不會泄露到外域。
    XSS漏洞是Web應用程序中最常見的漏洞之一。如果您的站點沒有預防XSS漏洞的固定方法,那么很可能就存在XSS漏洞。 這篇文章將帶你通過代碼層面去理解三個問題: 什么是XSS漏洞? XSS漏洞有哪些分類? 如何防范XSS漏洞?
    跨站腳本英文全稱(Cross Site Scripting跨站腳本),為了不和css層疊樣式表(英文全稱:Cascading Style Sheets)混淆,因此將跨站腳本縮寫為XSS。本期我們講解一下XSS漏洞原理和利用檢測。
    對于初了解xss漏洞的人來說,XSS漏洞的危害就是獲取受害者的cookie,來進行 ‘cookie劫持’。今天就總結一下XSS漏洞的危害性,望安全人員不要輕視,開發人員不要忽視XSS漏洞簡介XSS攻擊通常指黑客通過“HTML注入”篡改網頁,插入惡意腳本,從而使用戶瀏覽網頁時控制用戶瀏覽器的一種攻擊。
    下面,我們介紹如何把 JavaScript 嵌入到 PDF 文檔之中。 我使用的是迅捷 PDF 編輯器未注冊版本 1、啟動迅捷 PDF 編輯器打開一個 PDF 文件,或者使用“創建 PDF 文件”功能,通過將其他文檔和資源轉換為“可移植文檔格式”來創建 PDF 文件。
    漏洞測試我們介紹如何把 JavaScript 嵌入到 PDF 文檔之中。我使用的是迅捷 PDF 編輯器未注冊版本1、啟動迅捷 PDF 編輯器打開一個 PDF 文件,或者使用“創建 PDF 文件”功能,通過將其他文檔和資源轉換為“可移植文檔格式”來創建 PDF 文件。
    時間在2020年,當時使用xray,發現它的的反射型xss掃描很好用,于是想知道原理,好奇探索了下大概的xss掃描規則。當時自己的機器都是2H1G的小機器,想提高效率,于是學習用分布式,但是又由此帶來了很多第三方的數據庫,隊列什么的,更加壓迫了我機器的性能..做了這么多,成果也很喜人,各大src,微軟都有,運氣好也獲得了微軟1000多刀的賞金。
    Swagger-UI中存在跨站腳本漏洞,雖然該漏洞已在2020年末修復被修復,但截止2022年5月16日,研究人員仍然可以在Paypal、Atlassian、Microsoft、GitLab、Yahoo等網站中發現漏洞的實例。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类