XSS攻擊,指黑客利用網(wǎng)站漏洞把惡意的腳本代碼(通常包括HTML代碼和JS腳本)注入到網(wǎng)頁中,當(dāng)用戶瀏覽網(wǎng)頁時,就會執(zhí)行其中的惡意代碼(控制用戶瀏覽器),對受害用戶采取Cookie數(shù)據(jù)竊取、會話劫持、釣魚欺騙等各種攻擊。
它對Web服務(wù)器沒有直接危害,借助網(wǎng)站進行傳播,使網(wǎng)站的用戶受到攻擊。
攻擊者一般通過留言、電子郵件或其他途徑向受害用戶發(fā)送一個惡意的URL,當(dāng)惡意URL被用戶觸發(fā)時,惡意腳本就會在受害者的計算機上執(zhí)行。
造成XSS攻擊的因素?
Web瀏覽器的設(shè)計不安全,瀏覽器只執(zhí)行和解析JS等腳本,不會判斷數(shù)據(jù)和程序代碼是否惡意。
輸入和輸出的交過過程中,沒有做好安全防護。
團隊協(xié)作開發(fā),水平參差不齊,難免存在問題。
意識性不強
觸發(fā)惡意代碼的手段多樣,無法做到完全防御
XSS漏洞注入點多樣
XSS漏洞的危害
攻擊者通過注入如alert(/xss/)之類的JS代碼來證明XSS漏洞的存在性,但沒有真實地反映其危害性!
網(wǎng)絡(luò)釣魚,盜取用戶賬號。
cookies竊取,偽造身份進行對網(wǎng)站的操作。
劫持用戶(瀏覽器)會話,執(zhí)行任意操作,如非法轉(zhuǎn)賬等。
利用JS彈出廣告頁面,刷流量。
網(wǎng)頁掛馬
惡意操作
客戶端攻擊
獲取客戶端信息(用戶的瀏覽記錄、IP、開放的端口)
控制受害者電腦向其他網(wǎng)站進行攻擊
結(jié)合其他漏洞,如CSRF漏洞,實施進一步操作。
提升用戶權(quán)限,滲透網(wǎng)站。
傳播跨站腳本蠕蟲
反射型XXS(非持久型XSS,一次性):主要用于將惡意腳本附加到URL地址參數(shù)中。
攻擊者通過特定的手法,比如利用電子郵件,誘使用戶去訪問一個包含惡意代碼的URL,當(dāng)受害者觸發(fā)時,惡意JS代碼會直接在受害者主機上的瀏覽器執(zhí)行。特點是,只在用戶觸發(fā)的時候,執(zhí)行一次!
流程:
通常出現(xiàn)在網(wǎng)站的搜索欄,用戶登入口,用來竊取客戶端Cookie或進行釣魚欺騙。
POC:
<sCr<scrscRiptipt>ipt>OonN'"<>
過濾掉了<sCr<scrscRiptipt>OonN'"<>
DVWA
low:
過濾掉了<sCr<scrscRiptipt>,其他沒有過濾!
源碼:
構(gòu)造:
<inputonfocus=alert(/xss/)autofocus>
成功:
medium:
源碼:
也只進行了<script>過濾,替換了成空!攻擊手段同low一樣!
<inputonfocus=alert(/xss/)autofocus>
high:
impossible:
結(jié)論:
使用php中的htmlspecialchars函數(shù)把預(yù)定義的字符&、”、 ’、<、>轉(zhuǎn)換為 HTML 實體,
防止瀏覽器將其作為HTML元素!
存儲型XSS:也叫持久型跨站腳本,攻擊者事先將惡意JS代碼上傳或存儲到漏洞服務(wù)器中,只要瀏覽包含惡意JS代碼的頁面就會被執(zhí)行。
持久型XSS一般出現(xiàn)在網(wǎng)站的留言、評論等交互處,惡意腳本被存儲到客戶端或者服務(wù)器的數(shù)據(jù)庫中,當(dāng)用戶瀏覽該網(wǎng)頁時,服務(wù)器從數(shù)據(jù)庫中讀取惡意用戶存入的非法數(shù)據(jù),然后顯示在頁面中,在受害者電腦上的瀏覽器執(zhí)行惡意代碼。它不需要用戶去單擊URL進行觸發(fā),可以利用它滲透網(wǎng)站,掛馬,釣魚......
利用此XSS還能編寫XSS蠕蟲,能夠在網(wǎng)站中實現(xiàn)病毒的幾何數(shù)級傳播!XSS蠕蟲會直接影響網(wǎng)站的所有用戶,一個地方出現(xiàn)XSS漏洞,網(wǎng)站下的所有用戶都有可能被攻擊。
low:
<sCr<scrscRiptipt>ipt>OonN'"<>
<script>alert(/xss/)</script>
medium:
<sc<script>ript>alert(/xss/)</script>
high:
<imgsrc=1onerror=alert(/xss/)>
impossible:
Message: <sCr<scrscRiptipt>ipt>OonN\'\"<>
通過使用htmlspecialchars函數(shù),解決了XSS,但是要注意的是,如果htmlspecialchars函數(shù)使用不當(dāng),攻擊者就可以通過編碼的方式繞過函數(shù)進行XSS注入,尤其是DOM型的XSS。
DOM型XSS:通過修改頁面的DOM節(jié)點形成的XSS,并不會將payload上傳到服務(wù)器,沒有與服務(wù)器端進行交互,如果DOM中的數(shù)據(jù)沒有經(jīng)過嚴格確認,就會產(chǎn)生DOM—based XSS漏洞
可能觸發(fā)DOM型XSS的屬性
document.referer
window.name
location
innerHTML
documen.write
low:
查看頁面源代碼:
document屬于window 的一個子對象
window.location 包含 href 屬性,直接取值賦值時相當(dāng)于 window.location.href
window.location.href 當(dāng)前頁面完整 URL
document.location 包含 href 屬性,直接取值賦值時相當(dāng)于 document.location.href
document.location.href 當(dāng)前頁面完整 URL
decodeURI() 函數(shù)可對 encodeURI() 函數(shù)編碼過的 URI 進行解碼
插入的 java script 代碼可以在 decodeURL(lang) 被執(zhí)行
http://192.168.10.128/DVWA-master/vulnerabilities/xss_d/?default=English<script>alert(/xss/)</script>
meduim:
查看服務(wù)器端源碼:
array_key_exists() 函數(shù)檢查某個數(shù)組中是否存在指定的鍵名,如果鍵名存在則返回 true,如果鍵名不存在則返回 false。
stripos() 函數(shù)查找字符串在另一字符串中第一次出現(xiàn)的位置(不區(qū)分大小寫)
header() 函數(shù)向客戶端發(fā)送原始的 HTTP 報頭