XSS

XSS攻擊

XSS攻擊全稱跨站腳本攻擊,是為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆切厘,故將跨站腳本攻擊縮寫為XSS,XSS是一種在web應用中的計算機安全漏洞懊缺,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中疫稿。

什么是XSS攻擊?

XSS是一種經(jīng)常出現(xiàn)在web應用中的計算機安全漏洞鹃两,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中遗座。比如這些代碼包括HTML代碼和客戶端腳本。攻擊者利用XSS漏洞旁路掉訪問控制——例如同源策略(same origin policy)俊扳。這種類型的漏洞由于被黑客用來編寫危害性更大的網(wǎng)絡釣魚(Phishing)攻擊而變得廣為人知途蒋。對于跨站腳本攻擊,黑客界共識是:跨站腳本攻擊是新型的“緩沖區(qū)溢出攻擊“馋记,而JavaScript是新型的“ShellCode”号坡。
它與SQL注入攻擊類似,SQL注入攻擊中以SQL語句作為用戶輸入梯醒,從而達到查詢/修改/刪除數(shù)據(jù)的目的宽堆,而在xss攻擊中,通過插入惡意腳本冤馏,實現(xiàn)對用戶游覽器的控制日麸,獲取用戶的一些信息寄啼。

XSS的原理:

1.攻擊者對含有漏洞的服務器發(fā)起XSS攻擊(注入JS代碼)逮光。
2.誘使受害者打開受到攻擊的服務器URL。
3.受害者在Web瀏覽器中打開URL墩划,惡意腳本執(zhí)行涕刚。

XSS攻擊的危害包括:

1、盜取各類用戶帳號乙帮,如機器登錄帳號杜漠、用戶網(wǎng)銀帳號、各類管理員帳號
2、控制企業(yè)數(shù)據(jù)驾茴,包括讀取盼樟、篡改、添加锈至、刪除企業(yè)敏感數(shù)據(jù)的能力
3晨缴、盜竊企業(yè)重要的具有商業(yè)價值的資料
4、非法轉(zhuǎn)賬
5峡捡、強制發(fā)送電子郵件
6击碗、網(wǎng)站掛馬
7、控制受害者機器向其它網(wǎng)站發(fā)起攻擊

XSS攻擊分類

(1)反射型: 又稱為非持久性跨站點腳本攻擊们拙,它是最常見的類型的XSS稍途。漏洞產(chǎn)生的原因是攻擊者注入的數(shù)據(jù)反映在響應中。一個典型的非持久性XSS包含一個帶XSS攻擊向量的鏈接(即每次攻擊需要用戶的點擊)砚婆。詳細說就是發(fā)出請求時械拍,XSS代碼出現(xiàn)在URL中,作為輸入提交到服務器端装盯,服務器端解析后響應殊者,XSS隨響應內(nèi)容一起返回給瀏覽器,最后瀏覽器解析執(zhí)行XSS代碼验夯,這個過程就像一次發(fā)射猖吴,所以叫反射型XSS。
簡單例子

正常發(fā)送消息:

http://www.test.com/message.php?send=Hello,World挥转!

接收者將會接收信息并顯示Hello,Word

非正常發(fā)送消息:

http://www.test.com/message.php?send=<script>alert(‘foolish!’)</script>海蔽!

接收者接收消息顯示的時候?qū)棾鼍娲翱?/p>

(2)存儲型: 存儲型XSS和反射型的XSS差別就在于,存儲型的XSS提交的代碼會存儲在服務器端(數(shù)據(jù)庫绑谣,內(nèi)存党窜,文件系統(tǒng)等),下次請求目標頁面時不用再提交XSS代碼借宵。又稱為持久型跨站點腳本幌衣,當一個頁面被用戶打開的時候執(zhí)行。每當用戶打開瀏覽器,腳本執(zhí)行壤玫。持久的XSS相比非持久性XSS攻擊危害性更大,因為每當用戶打開頁面豁护,查看內(nèi)容時腳本將自動執(zhí)行。谷歌的orkut曾經(jīng)就遭受到XSS欲间。

簡單例子:

從名字就可了解到存儲型XSS攻擊就是將攻擊代碼存入數(shù)據(jù)庫中楚里,然后客戶端打開時就執(zhí)行這些攻擊代碼。例如留言板

留言板表單中的表單域:<input type=“text” name=“content” value=“這里是用戶填寫的數(shù)據(jù)”>

正常操作:

用戶是提交相應留言信息猎贴;將數(shù)據(jù)存儲到數(shù)據(jù)庫班缎;其他用戶訪問留言板蝴光,應用去數(shù)據(jù)并顯示。

非正常操作:

攻擊者在value填寫<script>alert(‘foolish!’)</script>【或者html其他標簽(破壞樣式达址。蔑祟。。)沉唠、一段攻擊型代碼】做瞪;

將數(shù)據(jù)存儲到數(shù)據(jù)庫中;

其他用戶取出數(shù)據(jù)顯示的時候右冻,將會執(zhí)行這些攻擊性代碼

DOMBasedXSS(基于dom的跨站點腳本攻擊)

基于DOM的XSS有時也稱為type0XSS装蓬。當用戶能夠通過交互修改瀏覽器頁面中的DOM(DocumentObjectModel)并顯示在瀏覽器上時,就有可能產(chǎn)生這種漏洞纱扭,從效果上來說它也是反射型XSS牍帚。

通過修改頁面的DOM節(jié)點形成的XSS,稱之為DOMBasedXSS乳蛾。

前提是易受攻擊的網(wǎng)站有一個HTML頁面采用不安全的方式從document.location 或document.URL 或 document.referrer獲取數(shù)據(jù)(或者任何其他攻擊者可以修改的對象)暗赶。
例如:
<SCRIPT>
var pos=document.URL.indexOf("name=")+5;
document.write(document.URL.substring(pos,document.URL.length));
</SCRIPT>
name是截取URL中g(shù)et過來的name參數(shù)
正常操作:

http://www.vulnerable.site/welcome.html?name=Joe

非正常操作:

http://www.vulnerable.site/welcome.html?name=<script>alert(document.cookie)</script>

受害者的瀏覽器接收到這個鏈接,發(fā)送HTTP請求到www.vulnerable.site并且接受到上面的HTML頁肃叶。受害者的瀏覽器開始解析這個HTML為DOM蹂随,DOM包含一個對象叫document,document里面有個URL屬性因惭,這個屬性里填充著當前頁面的URL岳锁。當解析器到達javascript代碼,它會執(zhí)行它并且修改你的HTML頁面蹦魔。倘若代碼中引用了document.URL激率,那么,這部分字符串將會在解析時嵌入到HTML中勿决,然后立即解析乒躺,同時,javascript代碼會找到(alert(…))并且在同一個頁面執(zhí)行它低缩,這就產(chǎn)生了xss的條件嘉冒。

XSS攻擊實例

1.簡單XSS攻擊

留言類,簡單注入javascript

有個表單域:<input type=“text” name=“content” value=“這里是用戶填寫的數(shù)據(jù)”>

1咆繁、假若用戶填寫數(shù)據(jù)為:<script>alert('foolish!')</script>(或者<script type="text/javascript" src="./xss.js"></script>)

2讳推、提交后將會彈出一個foolish警告窗口,接著將數(shù)據(jù)存入數(shù)據(jù)庫

3么介、等到別的客戶端請求這個留言的時候娜遵,將數(shù)據(jù)取出顯示留言時將執(zhí)行攻擊代碼蜕衡,將會顯示一個foolish警告窗口壤短。

【將數(shù)據(jù)改成html標簽進行攻擊设拟,則會將原本的樣式打亂。久脯。纳胧。。帘撰。跑慕。。摧找『诵校】

2.盜取cookie

什么是Cookie?

Cookie蹬耘,有時也用其復數(shù)形式 Cookies芝雪,指某些網(wǎng)站為了辨別用戶身份、進行 session 跟蹤而儲存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密)综苔。定義于 RFC2109 和 2965 中的都已廢棄惩系,最新取代的規(guī)范是 RFC6265 [1] 。(可以叫做瀏覽器緩存)

這里如筛,我們只是直觀的感受一下Cookie堡牡。
在瀏覽器的地址欄輸入:javascript:alert(document.cookie),按下Enter鍵杨刨,即能看到當前Cookie值晤柄。


圖片.png

有人可能會疑惑:這么復雜的一段代碼,攻擊者難道真的能破解出明文妖胀,然后冒充我們的身份可免?

事實上,攻擊者并不需要知道這段代碼的含義做粤!

攻擊者只需要把這個Cookie信息提交給服務器并通過驗證浇借,那么攻擊者就可以冒充受害者的身份登陸網(wǎng)站。

這就是我們常說的Cookie欺騙/Cookie會話攻擊怕品。

Cookie竊取攻擊

最基本的XSS跨站攻擊方法就是竊取受害者Cookie信息妇垢。

其基本原理如下:

這里寫圖片描述
  • 當攻擊者發(fā)現(xiàn)網(wǎng)站存在XSS漏洞時,攻擊者會先向存在XSS漏洞的網(wǎng)頁中注入惡意的腳本代碼肉康。

  • 當受害者訪問到此含有惡意腳本代碼的網(wǎng)頁時闯估,惡意腳本代碼相應的執(zhí)行。

  • 由于在受害者請求服務器的協(xié)議中含有Cookie信息吼和,網(wǎng)站相應的得到用戶Cookie信息涨薪。

  • 用戶注入的惡意腳本代碼是經(jīng)過精心構(gòu)造的,同時在遠程服務器端或者攻擊者使用的XSS平臺上炫乓,有一個用戶接受和記錄Cookie信息的文本刚夺。

  • 攻擊者訪問此記錄Cookie信息的文本献丑,得到受害者的Cookie信息。

  • 攻擊者利用受害者Cookie信息侠姑,通過桂林老兵创橄、firecookie等工具,以受害者的身份信息訪問網(wǎng)站莽红。
    Cookie竊取攻擊的步驟:

    步驟一 判斷網(wǎng)站是否存在反射型XSS/存儲型XSS漏洞
    步驟二 注入Cookie信息竊取的惡意代碼
    一般情況下妥畏,我們都是利用XSS平臺的代碼進行注入。這樣安吁,我們能夠在XSS平臺的對應項目中找到受害人Cookie醉蚁。
    步驟三 冒充被害人身份登陸網(wǎng)站。
    可以使用的工具有很多鬼店,例如桂林老兵馍管,firefox瀏覽器插件firecookie等。

XSS的防御措施:

XSS漏洞的起因就是沒有對用戶提交的數(shù)據(jù)進行嚴格的過濾處理薪韩。因此在思考解決XSS漏洞的時候确沸,我們應該重點把握如何才能更好的將用戶提交的數(shù)據(jù)進行安全過濾。

什么是html實體俘陷?

在html中有些字符罗捎,像(<)這類的,對HTML(標準通用標記語言下的一個應用)來說是有特殊意義的拉盾,所以這些字符是不允許在文本中使用的桨菜。要在HTML中顯示(<)這個字符,我們就必須使用實體字符捉偏。

html實體的存在是導致XSS漏洞的主要原因之一倒得。

因此我們需要將這些實體全部轉(zhuǎn)換為相應的實體編號。
編碼:對用戶輸入的數(shù)據(jù)進行HTML Entity編碼

這里寫圖片描述

用戶將數(shù)據(jù)提交上來的時候進行HTML編碼夭禽,將相應的符號轉(zhuǎn)換為實體名稱再進行下一步的處理霞掺。
在PHP中已經(jīng)存在這樣子功能的函數(shù),即是htmlentities($str)函數(shù)讹躯。
與之相反的就是html_entity_decode($str)函數(shù)菩彬,它將實體名稱轉(zhuǎn)換為相應的符號。

過濾:移除用戶上傳的DOM屬性潮梯,如onerror等骗灶,移除用戶上傳的style節(jié)點,script節(jié)點秉馏,iframe節(jié)點等耙旦。
1、將重要的cookie標記為http only, 這樣的話Javascript 中的document.cookie語句就不能獲取到cookie了.

2萝究、表單數(shù)據(jù)規(guī)定值的類型免都,例如:年齡應為只能為int锉罐、name只能為字母數(shù)字組合。琴昆。氓鄙。馆揉。

4业舍、對數(shù)據(jù)進行Html Encode 處理

5、過濾或移除特殊的Html標簽升酣, 例如: <script>, <iframe> , < for <, > for >, &quot for

6舷暮、過濾JavaScript 事件的標簽。例如 "onclick=", "onfocus" 等等噩茄。

【特別注意:】

在有些應用中是允許html標簽出現(xiàn)的下面,甚至是javascript代碼出現(xiàn)。因此我們在過濾數(shù)據(jù)的時候需要仔細分析哪些數(shù)據(jù)是有特殊要求(例如輸出需要html代碼绩聘、javascript代碼拼接沥割、或者此表單直接允許使用等等),然后區(qū)別處理凿菩!
校正:避免直接對HTML Entity編碼机杜,使用DOM Prase轉(zhuǎn)換,校正不配對的DOM標簽衅谷。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末椒拗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子获黔,更是在濱河造成了極大的恐慌蚀苛,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玷氏,死亡現(xiàn)場離奇詭異堵未,居然都是意外死亡,警方通過查閱死者的電腦和手機盏触,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門兴溜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人耻陕,你說我怎么就攤上這事拙徽。” “怎么了诗宣?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵膘怕,是天一觀的道長。 經(jīng)常有香客問我召庞,道長岛心,這世上最難降的妖魔是什么来破? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮忘古,結(jié)果婚禮上徘禁,老公的妹妹穿的比我還像新娘。我一直安慰自己髓堪,他們只是感情好送朱,可當我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著干旁,像睡著了一般驶沼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上争群,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天回怜,我揣著相機與錄音,去河邊找鬼换薄。 笑死玉雾,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的轻要。 我是一名探鬼主播复旬,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼伦腐!你這毒婦竟也來了赢底?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤柏蘑,失蹤者是張志新(化名)和其女友劉穎幸冻,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咳焚,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡洽损,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了革半。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碑定。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖又官,靈堂內(nèi)的尸體忽然破棺而出延刘,到底是詐尸還是另有隱情,我是刑警寧澤六敬,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布碘赖,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏普泡。R本人自食惡果不足惜播掷,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撼班。 院中可真熱鬧歧匈,春花似錦、人聲如沸砰嘁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽般码。三九已至妻率,卻和暖如春乱顾,著一層夾襖步出監(jiān)牢的瞬間板祝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工走净, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留券时,地道東北人。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓伏伯,卻偏偏與公主長得像橘洞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子说搅,可洞房花燭夜當晚...
    茶點故事閱讀 45,926評論 2 361

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