`

淺析XSS(Cross Site Script)漏洞原理

阅读更多
註:以下文章非本人撰寫為中國大陸網路轉載文章,,並經本人整理。

來源:IT168安全頻道分析XSS(Cross Site Script)漏洞原理
作者:茄子寶

如果你還不知道什麼是XSS,那我來解釋一下,XSS的全稱是Cross Site Scripting,意思是跨站腳本.這第一個單詞是Cross,為什麼縮寫成X呢?因為CSS是層疊樣式表的縮寫(Cascading Style Sheets)的縮寫,同時Cross發音和X相似,為了避免混淆用X來代替,縮寫成XSS。其實我覺得叫XSS挺合適的,因為現在流行AJAX嘛,新的跨站腳本攻擊技術很多都是和XMLHTTP控制項無間配合,嘿嘿,這個是題外話,我們只講原理,下面我就分兩個部分分析XSS原理:


一、XSS的觸發條件
瞭解XSS的觸發條件就先得從HTML(超文字標記語言)開始,我們流覽的網頁全部都是基於超文字標記語言創建的,如顯示一個超連結:
    <A HREF="http://safe.it168.com">IT168安全頻道</A>
而XSS的原理也就是往HTML中注入腳本,HTML指定了腳本標記<script></script>.在沒有過濾字元的情況下,只需要保持完整無錯的腳本標記即可觸發XSS,假如我們在某個資料表單提交內容,表單提交內容就是某個標記屬性所賦的值,我們可以構造如下值來閉和標記來構造完整無錯的腳本標記,
    "><script>alert('XSS');</script><"
結果形成了<A HREF=""><script>alert('XSS');</script> <"">茄子寶的博客在這裡</A>這樣一個標記,這裡和SQL注入很像!
測試表單值所在的標記,形成完整無錯的腳本標記可觸發XSS,但是沒有腳本標記怎麼觸發XSS呢?呵呵,我們只好利用其他標記了,假如要在網頁裡顯示一張圖片,那麼就要使用一個<img>標記,示例如下:
    <img src=" http://safe.it168.com /xss.gif">
img標記並不是真正地把圖片給加入到Html文檔把兩者合二為一,而是通過src屬性賦值。那麼瀏覽器的任務就是解釋這個img標記,訪問src屬性所賦的值中的URL位址並輸出圖片。問題來了!瀏覽器會不會檢測src屬性所賦的值呢?答案是否!
那麼我們就可以在這裡大做文章了,接觸過javascript的人應該知道,javascript有一個URL偽協議,可以使用“javascript:”這種協議說明符加上任意的javascript代碼,當流覽器裝載這樣的URL時,便會執行其中的代碼.於是我們就得出了一個經典的XSS示例:
    <img src="javascript:alert('XSS');">
結果如圖一:

當然並不是所有標記的屬性都能用,細心的你應該發現標記的屬性在訪問檔才觸發的XSS,這裡我就不再深入,因為離開標記的屬性還有事件能?明我們觸發XSS.那什麼是事件呢?只有達到某個條件才會引發事件,正巧img標記有一個可以利用的onerror()事件,當img標記內含有一個onerror()事件而正好圖片沒有正常輸出便會觸發這個事件,而事件中可以加入任意的腳本代碼,其中的代碼也會執行.現在我們又得到了另外一個經典的XSS示例:
<img src=" http://xss.jpg" onerror=alert('XSS')>
結果如圖二:

綜合這一部分,我們知道XSS的觸發條件包括:完整無錯的腳本標記,訪問檔的標記屬性和觸發事件。
二、XSS轉碼引發的過濾問題
有攻就有防,網站程式師肯定不會放任大家利用XSS,所以他們常會過濾類似javascript的關鍵字符,讓大家構造不了自己的XSS,我這裡就撿兩個被忽略慣了的字元來說,它們是"&"和"\".首先來說說"&"字元,玩過SQL注入的都知道,注入的語句可以轉成16進制再賦給一個變數運行,XSS的轉碼和這個還真有異曲同工之妙,原因是我們的IE流覽器預設採用的是UNICODE編碼,HTML編碼可以用&#ASCII方式來寫,這種XSS轉碼支持10進制和16進制,SQL注入轉碼是將16進制字串賦給一個變數,而XSS轉碼則是針對屬性所賦的值,下面我就拿
<img src="javascript:alert('XSS');">
使用10進制轉碼來作範例:
<img src="&#106&#97&#118&#97&#115&#99&#114&#105&#112&#116&#58&#97&#108&#101&#114&#116&#40&#39&#88&#83&#83&#39&#41&#59">
結果如圖三:

使用16進制轉碼來作範例:
<img src="&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3a&#x61&#x6c&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29&#x3b">
這個&#分隔符號還可以繼續加0變成“&#0106” ,“&#00106” ,“&#000106” ,“&#0000106”等形式。
而這個"-:special:1:-字元卻暴露了一個嚴重的XSS 0DAY漏洞,這個漏洞和CSS(Cascading Style Sheets)層疊樣式表有很大的關聯,下面我就來看看這個漏洞,先舉個javascript 的eval 函數的例子,官方是這樣定義這個函數:
eval(codeString),必選項 codestring 參數是包含有效 JScript 代碼的字串值。這個字串將由 JScript 分析器進行分析和執行。
我們的JavaScript中的"-:special:1:-字元是轉義字元,所以可以使用"-:special:1:-連接16進制字串運行代碼:
<SCRIPT LANGUAGE="JavaScript">
eval("\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3a\x61\x6c\x65\x72\x74\x28\x22\x58\x53\x53\x22\x29")
</SCRIPT>
恐怖的是樣式表也支援分析和解釋"-:special:1:-連接的16進制字串形式,流覽器能正常解釋。下面我們來做個實驗:
寫一個指定某圖片為網頁背景的CSS標記:
<html>
<body>
<style>
BODY { background: url(http://127.0.0.1/xss.gif) }
</style>
<body>
<html>
存檔為HTM,瀏覽器打開顯示正常。
轉換background屬性值為"-:special:1:-連接的16進制字串形式,瀏覽器打開同樣顯示正常。
<html>
<body>
<style>
BODY { background: \75\72\6c\28\68\74\74\70\3a\2f\2f\31\32\37\2e\30\2e\30\2e\31\2f\78\73\73\2e\67\69\66\29 }
</style>
<body>
<html>
在文章第一部分我已經說過XSS的觸發條件包括訪問檔的標記屬性,因此我們不難構造出
<img STYLE="background-image: url(javascript:alert('XSS'))">
這樣的XSS語句。有了實驗的結果,我們又能對CSS樣式表的標記進行XSS轉碼,瀏覽器將幫我們解釋標記內容,XSS語法範例:
<img STYLE="background-image: \75\72\6c\28\6a\61\76\61\73\63\72\69\70\74\3a\61\6c\65\72\74\28\27\58\53\53\27\29\29">
結果如圖四:

原編者語:XSS攻擊以及的可怕性及靈活性深受駭客的喜愛。針對XSS攻擊,編者給一般瀏覽網頁使用者及WEB應用開發者給出以下的安全建議:
web使用者:
在電子郵件或者即時通訊軟體中點選連結時需要格外小心:留心可疑的過長連結,尤其是它們看上去包含了HTML代碼。如果對其產生懷疑,可以在流覽器位址欄中手工輸入功能變數名稱,而後通過該頁面中的連結瀏覽你所要的資訊。
對於XSS漏洞,沒有哪種web流覽器具有明顯的安全優勢。也就是Firefox也同樣不安全。為了獲得更多的安全性,可以安裝一些流覽器外掛程式:比如Firefox的NoScript或者Netcraft工具條。
世界上沒有“100%的有效”。儘量避免訪問有問題的網站:比如提供hack資訊和工具、破解軟體、成人照片的網站。這些類型的網站會利用瀏覽器漏洞並危害作業系統。
web應用開發者:
對於開發者,首先應該把精力放到對所有使用者提交內容進行可靠的輸入驗證上。這些提交內容包括URL、查詢關鍵字、http頭、post資料等。只接受在你所規定長度範圍內、採用適當格式、你所希望的字元、阻檔、過濾或者忽略其它的任何東西。
保護所有敏感的功能,以防被bots自動化或者被協力廠商網站所執行。實現session標記(session tokens)、CAPTCHA系統或者HTTP引用頭檢查。
如果你的web應用必須支援用戶提供的HTML,那麼應用的安全性將受到災難性的下滑。但是你還是可以做一些事來保護web網站:確認你接收的HTML內容被妥善地格式化,僅包含最小化的、安全的tag(絕對沒有JavaScript),去掉任何對遠端內容的引用(尤其是樣式表和JavaScript)。為了更多的安全,請使用httpOnly的cookie。
本文章來自於神魂顛倒論壇  http://bbs.flash2u.com.tw
原文網址:http://bbs.flash2u.com.tw/dispbbs_171_87491.html

分享到:
评论

相关推荐

    XSS.rar_XSS_cross scripting_cross site java_cross site scripting

    XSS,全称为"Cross Site Scripting",是一种常见的网络安全漏洞,它允许攻击者在用户的浏览器中注入恶意脚本。这种攻击方式通常发生在Web应用中,攻击者利用网站未能充分过滤或转义用户输入的数据,将恶意代码嵌入到...

    Input XSS最新漏洞及利用

    Input XSS,全称为Input-Based Cross-Site Scripting,是一种常见的Web安全漏洞,允许攻击者通过在输入字段中注入恶意脚本来操纵用户浏览器的行为。这种漏洞通常发生在网站未能正确过滤或转义用户提供的数据,导致...

    XSS漏洞扫描 XSS漏洞扫描

    XSS(Cross-Site Scripting)漏洞扫描是网络安全领域中的一个重要话题,主要针对Web应用程序的安全检测。这种漏洞允许攻击者在用户的浏览器上注入恶意脚本,从而窃取用户数据、执行钓鱼攻击或进行其他有害操作。XSS...

    XSS Attacks CROSS SITE SCRIPTING EXPLOITS AND DEFENSE

    ### XSS Attacks: Cross-Site Scripting Exploits and Defense #### 概述 跨站脚本攻击(Cross-Site Scripting, XSS)是一种常见的网络安全威胁,尤其针对Web应用程序。本书《XSS Attacks: Cross-Site Scripting ...

    跨站脚本攻击XSS(Cross Site Script)的原理与常见场景分析

    跨站脚本攻击(XSS,Cross Site Scripting)是一种常见的网络安全漏洞,它允许恶意攻击者在用户浏览器中注入并执行恶意脚本。攻击者通常通过在网页上插入恶意HTML或JavaScript代码来实现这一目标。当用户访问这些被...

    javaweb配置xssproject,完美解决安全检测报XSS漏洞

    JavaWeb配置XSSProject是为了有效防止XSS(跨站脚本攻击)这一常见的网络安全问题。XSS攻击允许攻击者在用户的浏览器中注入恶意脚本,可能导致数据泄露、用户会话劫持等严重后果。XSSProject是一个专门针对XSS攻击...

    XSS跨站脚本攻击漏洞修复方法

    XSS(Cross-Site Scripting)跨站脚本攻击是一种常见的网络安全威胁,它允许攻击者在用户的浏览器上执行恶意代码,从而窃取用户敏感信息、操纵用户行为或者对网站进行破坏。本文将深入探讨XSS攻击的类型、危害,并...

    XSS_Rays.zip_XSS Rays 下载_tool_xss扫描_xss扫描器_漏洞扫描

    最近The Spanner发布了一个名为XSS Rays的 XSS漏洞扫描器。这tool有点意思,是使用JS写的,JS遍历目标的link、form,然后构造测试用例去测试,可以发现DOM的XSS(当然是在测试用例打对了的情况下)。它的调用方式也...

    xss-labs-xss漏洞

    xss xss漏洞 xss漏洞 xss漏洞 xss漏洞 xss漏洞

    前端顽疾--XSS漏洞分析与解决.ppt

    %3C%2Fscript%3E,来了解 XSS 漏洞的原理和危害。 2. 了解漏洞原理 可以通过了解 XSS 漏洞的原理,例如了解 JavaScript 的执行环境、HTML 标签的 onload、onerror 等事件的执行机制,来诊断 XSS 漏洞。 四、XSS ...

    xss漏洞jar.rar

    跨站脚本(Cross site script,简称xss)是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称之为“跨域脚本”。 我们常常听到“注入”(Injection),如SQL注入,那么到底“注入”是什么?注入本质上就是...

    XSS Scanner 1.0 挖掘XSS漏洞的利器

    XSS(Cross-Site Scripting)扫描器是网络安全领域中的一种重要工具,它主要用于检测Web应用程序是否存在XSS漏洞。XSS Scanner 1.0作为一款专门的XSS挖掘工具,可以帮助安全研究人员和开发者识别并修复可能导致敏感...

    Syngress - Xss Attacks - Cross Site Scripting Exploits And Defense.pdf

    4/159 Syngress - Xss Attacks - Cross Site Scripting Exploits And Defense

    web漏洞之XSS_TEST漏洞实践练习代码

    Web漏洞中的XSS(Cross Site Scripting)攻击是一种常见的安全问题,主要针对Web应用程序。XSS允许攻击者在用户浏览器中注入恶意脚本,从而控制用户的会话、窃取敏感信息或者执行其他恶意操作。本资源"XSS_TEST漏洞...

    jQuery-with-XSS 检测jQuery版本是否存在XSS漏洞

    动态站点会受到一种名为“跨站脚本攻击”(Cross Site Scripting, 安全专家们通常将其缩写成XSS,原本应当是css,但为了和层叠样式表(Cascading Style Sheet,CSS )有所区分,故称XSS)的威胁,而静态站点则完全不受...

    xss漏洞讲解.pdf

    XSS漏洞,全称为跨站脚本攻击(Cross-Site Scripting),是一种常见的网络安全漏洞。它允许攻击者将恶意脚本代码注入到正常的网页之中,当其他用户浏览这些网页时,嵌入在其中的恶意脚本就会执行,从而达到攻击者的...

    XSS漏洞挖掘与安全防护.pdf

    XSS(Cross Site Scripting,跨站脚本攻击)是一种常见的Web安全漏洞。它允许攻击者在用户的浏览器中执行脚本,从而窃取信息或进行恶意操作。XSS攻击有多种形式,包括反射型(存储型和DOM型)。XSS通常通过网站或...

    百度编辑器解决xss漏洞

    百度编辑器解决xss漏洞

    测试文档(Xss漏洞)

    XSS(Cross-site Scripting,跨站脚本攻击)是一种常见的Web应用安全漏洞,攻击者可以通过在网站上注入恶意脚本,以便在用户的浏览器中执行恶意代码,窃取用户的敏感信息或实施其他恶意行为。 XSS攻击的危害主要...

Global site tag (gtag.js) - Google Analytics