什么是XSS
XSS(Cross Site Scripting)会钝,跨站腳本攻擊澜沟。
目標網(wǎng)站目標用戶的瀏覽器,渲染HTML文檔過程中,出現(xiàn)非預(yù)期腳本指令,并且被執(zhí)行時蘑辑,XSS就發(fā)生了。
XSS攻擊能做什么坠宴?
Cookie
攻擊者通過document.cookie訪問受害者與網(wǎng)站關(guān)聯(lián)的cookie以躯,然后傳送到攻擊者自己的服務(wù)器,接著從cookie中提取敏感信息啄踊,如Session ID。
Keylogging
攻擊者可以使用addEventListener方法注冊用于監(jiān)聽鍵盤事件的回調(diào)函數(shù)刁标,并且把所有用戶的敲擊行為發(fā)送到他自己的服務(wù)器颠通,這些敲擊行為可能記錄著用戶的敏感信息,比如密碼和信用卡密碼膀懈。
Phishing
攻擊者可以通過修改DOM在頁面上插入一個假的登陸框顿锰,也可以把表單的action屬性指向他自己的服務(wù)器地址,案后欺騙用戶提交自己的敏感信息启搂。
等等……
XSS攻擊類型
持續(xù)型XSS攻擊
惡意文本來源于網(wǎng)站的數(shù)據(jù)庫硼控。
反射型XSS攻擊
惡意文本來源于受害者的請求。
基于DOM的XSS攻擊
利用客戶端而不是服務(wù)端代碼漏洞發(fā)動攻擊胳赌。
常見輸入點
document.URL
document.URLUnencoded
document.location
document.referrer
document.cookie
window.location
window.name
xhr請求回來的數(shù)據(jù)
表單項的值
常見輸出點
直接輸出HTML內(nèi)容
document.write()
document.writeln()
document.body.innerHtml
直接修改DOM樹
document.forms[0].action 其他屬性集合也可以牢撼,例如src、href等
document.attachEvent()
document.create()
document.execCommand()
document.body 通過body訪問對象DOM
window.attachEvent()
替換document.URL
document.location
document.location.hostname
document.location.replace()
document.location.assign()
document.URL
window.navigate()
打開或修改新窗口
document.open()
window.open()
window.location
window.location.href
window.location.host
window.location.hostname
直接執(zhí)行腳本
eval()
window.execScript()
window.setInterval()
window.setTimeout()
常見繞過方法及實例
示例來源:XSS Challenges
XSS最基本的就是閉合標簽疑苫、可以跨域請求的方法熏版。后面就是繞過姿勢、同源和CSP之類的了捍掺。
一點一點來撼短,慌不要慌。
輸出點在標簽之間
關(guān)鍵: 閉合標簽挺勿,構(gòu)造新標簽曲横。
繞過姿勢:
<script src=””></script>
<img onerror="alert()" src= />
實例:
關(guān)注一下GIF中用鼠標選中的部分。我們首先隨便輸入內(nèi)容search看看不瓶,發(fā)現(xiàn)源碼的變化禾嫉,輸出點在標簽之間。在這里輸出點為HTML標簽湃番。
本題Payload:
通過閉合標簽<b>構(gòu)造payload:
</b><img onerror="alert(document.domain)" src= />通過在html標簽內(nèi)使用JavaScript標簽構(gòu)造payload:
<script>alert(document.domain)</script>
輸出點在標簽屬性內(nèi)
關(guān)鍵: 閉合引號
引號沒有被過濾時
繞過姿勢:
text" onclick="alert()" />
實例:
輸出點在HTML的input標簽的value屬性值中夭织。
本題Payload: nice" onclick="alert(document.domain)" />
引號被過濾時
繞過姿勢:
javascript:alert()
實例:
輸出在HTML的a標簽的harf屬性值中,但是引號被過濾吠撮。
本題Payload: javascript:alert(document.domain)
注意: 當引號被過濾尊惰,并且輸出點在屬性中時讲竿,還可以使用src屬性添加外部JS腳本來實現(xiàn)彈框。
尖括號被過濾時
繞過姿勢:
在IE環(huán)境下弄屡,使用``
讓我們自己設(shè)置的屬性逃逸出來题禀,不然會被當成字符串。
格式樣例: `` onclick=alert()
因為今天IE不知道為啥膀捷,瓦特了迈嘹,這一部分示例就不放了。具體應(yīng)該是在XSS Challenges的第12關(guān)全庸。
關(guān)鍵字被過濾時
繞過姿勢:
- 把被繞過的關(guān)鍵字中的其中一個字母進行hex轉(zhuǎn)義秀仲;
- 在被過濾的關(guān)鍵字中間插入hex轉(zhuǎn)義后的不可見字符,例如制表符壶笼、空格等神僵。
實例:
on開頭的動作、script關(guān)鍵字覆劈、style關(guān)鍵字都被過濾保礼,轉(zhuǎn)義關(guān)鍵字中其中一個字符來實現(xiàn)彈框。
本題Payload: "><a href=javascript:alert(document.domain)>test</a>
今天也是莫得技術(shù)责语,莫得頭發(fā)炮障,還更不完內(nèi)容的白小胖。