one、概念
XSS跨站腳本攻擊(Cross-Site Scripting)就是網站将使用者輸入的内容輸出到頁面上,在這個過程中可能有惡意代碼被浏覽器執行,XSS屬于被動式的攻擊,因為其被動且不好利用,是以許多人常呼略其危害性。
XSS通常情況可以有兩種解釋就是它可以是一種攻擊方式,或者是一種漏洞。
XSS其實叫CSS,但是由于和另一種網頁技術——層疊樣式表(Cascading Style Sheets)的縮寫一樣,為了防止混淆,是以把原本的CSS簡稱為XSS。
這一漏洞攻擊在各種WEB應用安全漏洞中,一直被OWASP(Open Web Application Security Project)組織評為十大應用安全中的其中之一。
XSS一般攻擊的是前端(比如盜取其他使用者cookie),而不是後端,是以XSS一般需要結合其他漏洞進行挂馬。(個人了解)
two、原理
XSS的原理是由于Web應用程式對使用者輸入過濾不足,這時候攻擊者就可以通過這些不足在網頁上面注入一些比如盜取cookie,轉賬等等的JavaScript腳本惡意代碼,當使用者浏覽這些網頁時就會執行其中的惡意代碼,進而就完成一個的完整的XSS攻擊流程。
跨站腳本,就是使用者稀裡糊塗地執行了攻擊者放在網頁上的惡意腳本,歸根結底就是服務端過于信任用戶端送出的資料。
在這裡由于XSS有分類,是以對XSS原理的解釋隻是一個比較泛的解釋,具體的原理還得需要具體的XSS類型去分析,即在下面博文中。
three、類型
上面說了,XSS隻是一個比較泛的概念,具體的攻擊漏洞,還得具體分析,一般XSS漏洞有反射型,存儲型、DOM型(DOM—based型)。
1、反射型XSS
感覺看上面的圖比較難了解,zzzzzz
反射型XSS又叫非持久型XSS,是使用者點選到攻擊者設定好的惡意網站(一般這種是POST請求才使用)或者是使用者通路到攻擊者設定好的URL(即可以使用GET請求),在網頁傳回的内容中出現攻擊者設定的XSS腳本代碼,并被浏覽器解析執行。反射的意思就是XSS攻擊腳本被Web伺服器反射回來給浏覽器解析執行。
在這裡我們會發現,反射型XSS由于請求方式不同攻擊手法也不同,但原理大同小異,就是都是讓客戶去觸發到這個漏洞點上,傳回伺服器反射給浏覽器并被浏覽器解析,這之間伺服器他就相當于一個傳遞者,将惡意代碼傳遞個使用者,這一過程看上去就像反射鏡反射一樣,攻擊者将一束光線射給反射鏡,反射鏡又将這束光反射給使用者。
注意:這裡是浏覽器解析了腳本,而不是伺服器
2、存儲型XSS
存儲型XSS也叫持久性XSS,是攻擊者将惡意腳本代碼存儲到Web伺服器中并被解析,客戶當通路到這網頁時将受到攻擊。在這裡一定要注意反射型與存儲型差別:連結在這裡。
這時我們就會發現不管是什麼方式請求,
注意:這裡是伺服器解析了腳本,而不是浏覽器
3、DOM型XSS
首先我們需要明白什麼是DOM?
DOM(Document Object Model),是一種文檔對象模型,DOM通常用于代表在HTML、XHTML和XML中的對象,使用DOM可以允許程式和腳本動态地通路和更新文檔的内容、結構和樣式,本質就是一種樹狀的模型。
DOM型XSS是基于DOM文檔對象模型的一種漏洞,是以受用戶端浏覽器的腳本代碼所影響,而不是想前面兩種會與伺服器互動(不是解析,是互動)。
DOM型XSS由于是取決于輸出位置,并不取決于輸出環境,是以也可以說DOM型XSS既有可能是反射型的,也有可能是存儲型的,就是說它的輸出點是在DOM位置上。
這個類型有點抽象,說實話自己在了解到這個類型XSS時也是懵逼的很,看了這篇博文,大概懂了個一二:連結
就是說DOM型XSS隻在浏覽器上有惡意代碼才算。
如果對三種類型的XSS還有不了解或者區分不開的讀者可以檢視這個連結:連結在此
four、危害
個人覺得XSS與SQL注入是漏洞安全中兩個必不可少的話題,就像倚天劍和屠龍刀一樣,其危害可想而知。
以下是說可能涉及到的危害:
- 1、盜取各類使用者帳号
- 2、控制網站伺服器資料
- 3、盜竊所屬網站公司的商業價值資料
- 4、非法轉賬
- 5、傳播XSS跨站腳本蠕蟲
- 6、結合其他漏洞進行綜合漏洞攻擊
- 7、提升攻擊者權限
- 8、控制受害者機器向其他網站發起攻擊
- 9、網站挂馬
five、XSS攻擊流程
攻擊流程:
我們來假設一個情景:現在有一個網站,它可能有XSS漏洞,那麼攻擊流程可以如下:
1、先在文本框或者URL裡判斷這個輸入位是在HTML屬性裡面還是在屬性外面,如果是屬性裡面,那麼我們就需要對其進行閉合猜測,即:>、’>、">等等,并且可以利用未閉合的特點加入事件引發彈窗等現象,如果是在外面,那麼進入下一步
2、我們可以使用<script>alert(/xss/)</script>語句及其變種進行初步測試,如果有結果,那麼我們就進入第四步,如果沒有結果,那麼我們就進入下一步
3、使用特殊的方式方法對XSS防禦進行繞過,當繞過成功時進入下一步
4、對網站進行進一步滲透,并結合其他漏洞進行綜合滲透
5、整理資料,書寫漏洞報告
測試XSS:
- 檢測XSS一般分兩種:手工檢查、全自動檢測
-
手工檢查
一般使用盲打的方式,就是不知道背景代碼,靠自己的經驗去猜測,或者使用一些比較敏感的符号
反正見到輸入框或者是URL參數就是加代碼。'<>"/()
-
全自動檢測
檢測工具:Appscan、AWVS、BurpSuite。。。
一些常見的腳本代碼函數:
<script>alert(/xss/)</script> alert()方法用于顯示帶有指定消息和确認按鈕的警告框
"><script>alert(/xss/)</script> 對頁面屬性的閉合操作
document.cookie 顯示目前頁面的cookie
window.location.hostname 傳回Web主機的域名
window.location.pathname 傳回目前頁面的路徑和檔案名
window.location.port 傳回Web主機的端口(80或443)
window.location.protocol 傳回所使用的Web協定(http:或https:)
window.location.href 傳回目前顯示的文檔的完整URL
onload 一張頁面或一幅圖像完成加載
onsubmit 确認按鈕被點選觸發
onmousemove 滑鼠移動到相應位置觸發
onerror 在加載文檔或圖像時發生錯誤
xss-labs-master靶機攻略
攻略位址:連結在此
Six、防禦措施
- 1、對任何使用者的輸入與輸出都采取不信任
- 2、對特殊符号及特殊語句進行的嚴格過濾
- 3、設定黑名單與白名單
- 4、在開發時開發人員嚴格設定WEB安全編碼規範
- 5、對cookie進行特殊防禦
- 6、對進行網頁編碼實體化
- 7、對Session标記、驗證碼或者HTTP頭的檢查
防禦措施說白了,就是對任何使用者都采取不信任。
後語:我們不是網絡上面的破壞者,而是網絡世界的維護者,我們是白帽子,也是紅帽子!