Cross-Site Script

Cross-Site Script(跨站腳本)XSS 整理於《淺析XSS(Cross Site Script)漏洞原理》
 
瞭解XSS的觸發條件就先得從HTML(超文本標記語言)開始,咱們瀏覽的網頁所有都是基於超文本標記語言建立的,如顯示一個超連接:

    <A HREF="http://safe.it168.com">IT168安全頻道</A>javascript


    而XSS的原理也就是往HTML中注入腳本,HTML指定了腳本標記<script></script>.在沒有過濾字符的狀況下,只須要保持完整無錯的腳本標記便可觸發XSS,假如咱們在某個資料表單提交內容,表單提交內容就是某個標記屬性所賦的值,咱們能夠構造以下值來閉和標記來構造完整無錯的腳本標記,html

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

    結果造成了<A HREF=""><script>alert(XSS);</script> <"">茄子寶的博客在這裏</A>這樣一個標記,:)這裏和SQL注入很像!程序員

    測試閉和表單賦值所在的標記,造成完整無錯的腳本標記可觸發XSS,可是沒有腳本標記怎麼觸發XSS呢?呵呵,咱們只好利用其餘標記了,假如要在網頁裏顯示一張圖片,那麼就要使用一個<img>標記,示例以下:瀏覽器

    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示例:xss

<img src=" http://xss.jpg" onerror=alert(XSS)>如圖二函數

\

 

    綜合這一部分,咱們知道XSS的觸發條件包括:完整無錯的腳本標記,訪問文件的標記屬性和觸發事件測試

2、XSS轉碼引起的過濾問題網站

    有攻就有防,網站程序員確定不會聽任你們利用XSS,因此他們常會過濾相似javascript的關鍵字符,讓你們構造不了本身的XSS,我這裏就撿兩個被忽略慣了的字符來講,它們是"&""".首先來講說"&"字符,玩過SQL注入的都知道,注入的語句能夠轉成16進制再賦給一個變量運行,XSS的轉碼和這個還真有殊途同歸之妙,緣由是咱們的IE瀏覽器默認採用的是UNICODE編碼,HTML編碼能夠用&#ASCII方式來寫,這種XSS轉碼支持10進制和16進制,SQL注入轉碼是將16進制字符串賦給一個變量,而XSS轉碼則是針對屬性所賦的值,下面我就拿<img src="javascript:alert(XSS);">示例:

    <img src="javascript:alert

('XSS');"> //10進制轉碼 如圖三

 

\

 

    <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"> //16進制轉碼。

    這個&#分隔符還能夠繼續加0變成「j」 ,「j」 ,「j」 ,「j」等形式。

    而這個""字符卻暴露了一個嚴重的XSS 0DAY漏洞,這個漏洞和CSS(Cascading Style Sheets)層疊樣式表有很大的關聯,下面我就來看看這個漏洞,先舉個javascript的eval 函數的例子,官方是這樣定義這個函數:

    eval(codeString),必選項 codestring 參數是包含有效 JScript 代碼的字符串值。這個字符串將由 JScript 分析器進行分析和執行。

    咱們的JavaScript中的""字符是轉義字符,因此可使用""鏈接16進制字符串運行代碼

    <SCRIPT LANGUAGE="JavaScript">
eval("x6ax61x76x61x73x63x72x69x70x74x3ax61x6cx65x72x74x28x22x58x53x53x22x29")
</SCRIPT>恐怖的是樣式表也支持分析和解釋""鏈接的16進制字符串形式,瀏覽器能正常解釋。下面咱們來作個實驗:    寫一個指定某圖片爲網頁背景的CSS標記:

    <html>
    <body>
    <style>
    BODY { background: url(http://up.2cto.com/Article/201103/20110330123053137.gif) }
    </style>
    <body>
    <html>

    保存爲HTM,瀏覽器打開顯示正常。

    轉換background屬性值爲""鏈接的16進制字符串形式,瀏覽器打開一樣顯示正常。

    <html>
    <body>
    <style>
    BODY { background: 75726c28687474703a2f2f3132372e302e302e312f7873732e67696629 }
    </style>
    <body>
    <html>

    在文章第一部分我已經說過XSS的觸發條件包括訪問文件的標記屬性,所以咱們不難構造出

    <img STYLE="background-image: url(javascript:alert(XSS))">

    這樣的XSS語句。有了實驗的結果,咱們又能對CSS樣式表的標記進行XSS轉碼,瀏覽器將幫咱們解釋標記內容,XSS語句示例:

    <img STYLE="background-image: 75726c286a6176617363726970743a616c6572742827585353272929"> 看圖四

\
相關文章
相關標籤/搜索