one、概念
XSS跨站腳本攻擊(Cross-Site Scripting)就是網站將用戶輸入的內容輸出到頁面上,在這個過程中可能有惡意代碼被瀏覽器執行,XSS屬於被動式的攻擊,因爲其被動且不好利用,所以許多人常呼略其危害性。
XSS通常情況可以有兩種解釋就是它可以是一種攻擊方式,或者是一種漏洞。
XSS其實叫CSS,但是由於和另一種網頁技術——層疊樣式表(Cascading Style Sheets)的縮寫一樣,爲了防止混淆,所以把原本的CSS簡稱爲XSS。
這一漏洞攻擊在各種WEB應用安全漏洞中,一直被OWASP(Open Web Application Security Project)組織評爲十大應用安全中的其中之一。
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頭的檢查
防禦措施說白了,就是對任何用戶都採取不信任。
後語:我們不是網絡上面的破壞者,而是網絡世界的維護者,我們是白帽子,也是紅帽子!