1. 程式人生 > >第二百六十五節,xss腳本攻擊介紹

第二百六十五節,xss腳本攻擊介紹

服務器端 引號 能夠 需要 當前 意思 什麽 模型 留言

xss腳本攻擊介紹

Cross-Site Scripting(XSS)是一類出現在 web 應用程序上的安全弱點,攻擊者可以通過 XSS 插入一 些代碼,使得訪問頁面的其他用戶都可以看到,XSS 通常是可以被看作漏洞的。它允許攻擊者繞過安全機 制,通過嘗試各種不同的方法插入惡意代碼,攻擊者可以得到敏感頁面的權限,會話,cookies,或者其 他的東西,XSS 分為三類

XSS 分類:

非持久性,持久性和基於 Dom(此類可以是持久的,也可以是不持久的)

非持久性:

  非持久性 XSS 也被稱為反射性 XSS,是目前最普遍的類型,當攻擊者提供了一些代碼的時候, 服務器端馬上就會返回頁面的執行結果。舉個例子,就比如某個網頁上的搜索引擎,如果攻擊者搜索的字 符串包含了一些 html 標簽,通常來說,搜索的結果就會以該形式顯示出來,或者,至少,搜索的字符串 會包含在頁面裏。而這個我們是可以修改的,如果任何搜索的字符串都沒有被 html 編碼,XSS 漏洞就產 生了。

持久性 XSS:

  也叫做存儲型 XSS,或是二次漏洞,他能夠導致更加有效的攻擊。當攻擊者提交到 web 應用 程序裏的數據會永久性的存儲到服務器的時候會產生這類漏洞,(比如數據庫,文件系統,其他位置),之 後,如果沒有經過 HTML 編碼,那麽每一個訪問該頁面的用戶都會被攻擊,典型的例子就是在線留言板, 它允許用戶提交數據。

基於 DOM 的 XSS:

  也叫做本地跨站,基於 html/xml 上叫做文檔對象模型(DOM)的標準對象模型,這類 漏洞,問題出現在頁面的客戶端腳本上,比如,如果一個 javascript 腳本處理 url 請求參數,然後使用這 個參數值來顯示給用戶頁面,沒有經過任何編碼,那麽 XSS 漏洞產生,和非持久的類似,攻擊者可以用惡 意代碼填充這個參數,然後覆寫的頁面誘騙用戶點擊,然後就會被瀏覽器解析成 html,包含了惡意的腳本 代碼。

發現XSS 漏洞

最常用的 XSS 漏洞測試代碼::

<script>alert("XSS")</script>

當這個代碼被註入到輸入框或是 url 參數的時候,會成功也可能會失敗,如果失敗了。也不意味著網站就 是安全的。需要繼續滲透。

XSS 繞過過濾

轉義字符串

第一步是查看當前的頁面源代碼,看看是不是包含了我們的這個測試的字符串,如果你發現了。你就會發 現很有意思。要細心。看到了把。是在一個輸入(INput)標簽裏。

<INPUT type="text" value=‘<SCRIPT>alert("XSS")</SCRIPT>‘>

在這個例子,我們可以修改我們的輸入來包含兩個字符,來讓代碼跳出那對外圍的單引號,

‘><SCRIPT>alert("XSS")</SCRIPT>

現在我們的代碼執行了。因為我們閉合了前面的 html 標簽,就觸發了 XSS,但是,你可能會發現,頁面 上會顯示一個多出來的單引號,為什麽,因為後面的那個原來的單引號沒有匹配,我們繼續修改我們的代 碼。

‘><SCRIPT>alert("XSS")</SCRIPT><xss a=‘

所有的輸入就會變成這樣:

<INPUT type="text" value=‘‘><SCRIPT>alert("XSS")</SCRIPT><xss a=‘‘>

Ok 了。Javascript 代碼就註入了。這個沒什麽意義,你可以自己改,但是符合 html 的標準, 頁面不會出錯。

繞過單引號過濾繼續!

同樣的例子,但是我們假設管理員在我們的單引號之前放置了一個“\”,有時候雙引號之前也會放置,通 過一些類似 add_slashes 的函數可以實現,這個就是轉義字符,我們先前的代碼就會變成這樣:

<INPUT type="text" value=‘\‘><SCRIPT>alert(\"XSS\")</SCRIPT>‘>

有一些方法可以繼續,但是要看過濾的那個函數是怎麽放的了。其中一個方法就是使用字符實體,學過 html 的都知道,就是一些特殊字符會用一些固有的符號組合來表示,舉個例子,你不能用<>表示大於和小於, 因為這被解釋為 html 標簽,但是,你如果要用,可以用下面的來代替。

技術分享

第二百六十五節,xss腳本攻擊介紹