XSS簡(jiǎn)介與分類

簡(jiǎn)介

什么是XSS

XSS 漏洞胃碾,通常指的是網(wǎng)站對(duì)用戶輸入數(shù)據(jù)未做有效過(guò)濾陆爽,攻擊者可以將惡意腳本注入網(wǎng)站頁(yè)面中胶逢,達(dá)到執(zhí)行惡意代碼的目的曹体。攻擊者只需要誘使受害者打開特定的網(wǎng)址俗扇,就可以在受害者的瀏覽器中執(zhí)行被注入的惡意代碼,從而竊取用戶身份箕别,執(zhí)行一些敏感操作铜幽,或是進(jìn)行其他的危害行為。在常見的Web 漏洞中串稀,XSS(Cross-site Script除抛,跨站腳本)漏洞是最多見的,跨站腳本(Cross-site Script),按理應(yīng)該簡(jiǎn)稱為 CSS母截,但為了與層疊樣式表(CSS)區(qū)分開到忽,特意改為 XSS。

XSS的起源

最早的XSS 漏洞可追溯到 1999 年末清寇,微軟安全工程師發(fā)現(xiàn)一些網(wǎng)站遭到攻擊喘漏,網(wǎng)站被插入了一些惡意腳本和圖像標(biāo)簽。隨后华烟,微軟對(duì)此類漏洞進(jìn)行研究分析翩迈,并在 2000 年 1 月,正式使用“cross-site scripting”這個(gè)名稱盔夜,然后逐漸被業(yè)界采用负饲,留傳至今。

XSS漏洞的分類

反射型 XSS

反射型 XSS 又被稱為非持久型跨站腳本喂链,它是將攻擊代碼放在 URL 參數(shù)中绽族,而不是存儲(chǔ)到服務(wù)器,因此需要誘使用戶點(diǎn)擊才能觸發(fā)攻擊衩藤。
如:通過(guò)向 name 參數(shù)輸入以下代碼即可觸發(fā)漏洞

<script>alert(1)</script>
image.png

在 Chrome 瀏覽器中,用“檢查”功能看下網(wǎng)頁(yè)源碼涛漂,可以發(fā)現(xiàn)我們輸入的代碼被解析并執(zhí)行了:


image.png

漏洞代碼也非常簡(jiǎn)單赏表。從 GET 參數(shù) name 獲取用戶輸入后,未經(jīng)過(guò)濾就直接調(diào)用 echo 函數(shù)輸出到頁(yè)面匈仗,最終導(dǎo)致 XSS的產(chǎn)生瓢剿。漏洞代碼如下:

<?php

// Is there any input?

if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {

    // Feedback for end user

    echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';

}

?>

存儲(chǔ)型XSS

存儲(chǔ)型被稱為持久型跨站腳本。攻擊者將惡意代碼存儲(chǔ)到服務(wù)器上悠轩,只要誘使受害者訪問被插入惡意代碼的頁(yè)面即可觸發(fā)间狂。存儲(chǔ)型 XSS 經(jīng)常出現(xiàn)在一些可以發(fā)表評(píng)論的地方,如帖子火架、博客鉴象。

如:一個(gè)留言本的功能忙菠,支持用戶發(fā)表評(píng)論,然后將用戶輸入的數(shù)據(jù)直接存儲(chǔ)到數(shù)據(jù)庫(kù)纺弊,并輸出到頁(yè)面上牛欢。這個(gè)過(guò)程中因?yàn)槲醋鋈魏蔚倪^(guò)濾,導(dǎo)致了 XSS 漏洞的產(chǎn)生淆游。存儲(chǔ)型 XSS 的特點(diǎn)就是不需要在誘使用戶訪問的URL中包含攻擊代碼傍睹,因?yàn)樗呀?jīng)存儲(chǔ)到了服務(wù)器中,只需要讓用戶訪問包含輸出攻擊代碼的頁(yè)面即可

image.png

漏洞代碼

<?php

if( isset( $_POST[ 'btnSign' ] ) ) {

    // Get input

    $message = trim( $_POST[ 'mtxMessage' ] );

    $name    = trim( $_POST[ 'txtName' ] );

    // Sanitize message input

    $message = stripslashes( $message );

    $message = mysql_real_escape_string( $message );

    // Sanitize name input

    $name = mysql_real_escape_string( $name );

    // Update database

    $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";

    $result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );

    //mysql_close();

}

?>

從 POST 參數(shù)中獲取 mtxMessage 和 txtName 參數(shù)后犹菱,雖然經(jīng)過(guò)一定過(guò)濾才插入到數(shù)據(jù)庫(kù)中拾稳,但是中括號(hào)不會(huì)被過(guò)濾
在 Message 中輸入“<script>alert(1)</script>”,點(diǎn)擊“Sign Guestbook”提交腊脱,即可觸發(fā)漏洞访得。

image.png

查看頁(yè)面源碼


image.png

DOM 型 XSS

DOM 型 XSS是基于文檔對(duì)象模型(Document Objeet Model,DOM虑椎,用于將 Web 頁(yè)面與腳本語(yǔ)言連接起來(lái)的標(biāo)準(zhǔn)編程接口)的一種漏洞震鹉,它不經(jīng)過(guò)服務(wù)端,而是通過(guò) URL 傳入?yún)?shù)去觸發(fā)捆姜,因此也屬于反射型 XSS传趾。

由于客戶端的JavaScript可以訪問瀏覽器頁(yè)面中的 DOM 對(duì)象,因此它能夠決定如何處理當(dāng)前頁(yè)面的 URL泥技,比如獲取 URL 中的相關(guān)數(shù)據(jù)進(jìn)行處理浆兰,然后動(dòng)態(tài)更新到頁(yè)面上。這導(dǎo)致 DOM 型 XSS 的漏洞代碼常位于網(wǎng)頁(yè)的 JavaScript 代碼中珊豹。

看例子:


image.png

點(diǎn)擊事件函數(shù)

image.png

用戶輸入內(nèi)容后點(diǎn)擊"click me"回調(diào)函數(shù)執(zhí)行:
第一行代碼先通過(guò) document.getElementById("text").value 獲取 ID 為“text”的元素內(nèi)容簸呈。其實(shí)這就是輸入框的內(nèi)容,輸入框的 ID就叫“text”店茶。
第二行代碼是將獲取的輸入框內(nèi)容傳遞給 ID 為“dom”的元素蜕便,并將其寫入 innerHTML,也就是輸出到 HTML 頁(yè)面中贩幻,整個(gè)過(guò)程對(duì)用戶輸入數(shù)據(jù)都未做任何過(guò)濾轿腺。直接輸入 test 看下:

image.png

如此,我們直接利用 JavaScript 偽協(xié)議來(lái)構(gòu)造鏈接觸發(fā) JS 代碼的執(zhí)行丛楚,輸入代碼javascript:alert(1)族壳,然后點(diǎn)擊"clickme",等回調(diào)函數(shù)執(zhí)行完,點(diǎn)擊“whatdo you see?”鏈接后即可觸發(fā)

image.png

DOM 型 XSS 的相關(guān) DOM 操作函數(shù)有很多,如 eval趣些、document.write 等可觸發(fā)漏洞的數(shù)據(jù)輸出位置仿荆。
這是一份關(guān)于 DOM XSS 的數(shù)據(jù)污染源(Source,即用戶輸入數(shù)據(jù))和漏洞觸發(fā)點(diǎn)(Sink)的列表(雖然不夠全面,但可以作為參考)


image.png

若數(shù)據(jù)從 Source 傳到 Sink 過(guò)程中拢操,未做任何過(guò)濾锦亦,就有可能存在 DOM XSS。這個(gè)思路也常作為動(dòng)靜態(tài)檢測(cè) DOM XSS 的重要思路庐冯。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末孽亲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子展父,更是在濱河造成了極大的恐慌返劲,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栖茉,死亡現(xiàn)場(chǎng)離奇詭異篮绿,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)吕漂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門亲配,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人惶凝,你說(shuō)我怎么就攤上這事吼虎。” “怎么了苍鲜?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵思灰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我混滔,道長(zhǎng)洒疚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任坯屿,我火速辦了婚禮油湖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘领跛。我一直安慰自己乏德,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布吠昭。 她就那樣靜靜地躺著喊括,像睡著了一般。 火紅的嫁衣襯著肌膚如雪怎诫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天贷痪,我揣著相機(jī)與錄音幻妓,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛肉津,可吹牛的內(nèi)容都是我干的强胰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼妹沙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼偶洋!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起距糖,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤玄窝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后悍引,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恩脂,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年趣斤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俩块。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浓领,死狀恐怖玉凯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情联贩,我是刑警寧澤漫仆,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站撑蒜,受9級(jí)特大地震影響歹啼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜座菠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一狸眼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浴滴,春花似錦拓萌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至品嚣,卻和暖如春炕倘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翰撑。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工罩旋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓涨醋,卻偏偏與公主長(zhǎng)得像瓜饥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子浴骂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容