這個文章好
https://blog.csdn.net/huangyongkang666/article/details/123624164?fromshare=blogdetail&sharetype=blogdetail&sharerId=123624164&sharerefer=PC&sharesource=2401_88818565&sharefrom=from_link
什么是xss
XSS(跨站腳本攻擊,Cross-Site Scripting)是一種常見的網絡安全漏洞,攻擊者在網頁中嵌入客戶端腳本,通常是js編寫的危險代碼,當用戶使用瀏覽器瀏覽網頁時,腳本就會在用戶的瀏覽器上執行,從而達到攻擊者的目的。XSS 通常用于竊取用戶信息、會話劫持、篡改網頁內容或傳播惡意軟件。
如:盜取網站保存的cookie登陸其他用戶,攝像頭拍照
- 需要有xss接受平臺
- 生成一段js文件
- 找到由xss漏洞的地方,植入js
- 等待受害者訪問
發送的網址不要點,用虛擬機點
相關問題
網站:正常網站(有xss漏洞)
xss平臺:js文件下載
客戶端瀏覽器
js執行
js可以操作cookie
跨站腳本攻擊:執行了其他網址上的惡意js文件
如何區別是不是同一個網站:
https
http
瀏覽器根據同源策略判斷這兩個是不是同一個網站
同源策略:
協議 + 主機(域名/IP) + 端口,任何一個地方不一樣就不是同一個網站
瀏覽器是根據同源策略來單獨存儲每一個網站的cookie
漏洞產生原因
前端傳入的數據沒有做處理,變成了html的一部分來處理
處理指的是編碼處理。
將<
變成了<
在html語言里很注重<>
如何讓語句里出現尖括號,用html實體符號
顯示結果 | 描述 | 實體名稱 | 實體編號 |
---|---|---|---|
空格 | |   | |
< | 小于號 | < | < |
> | 大于號 | > | > |
xss漏洞的危害
- 對于訪問量小的網站,發生xss漏洞沒什么用。一般在各類的社交平臺,郵件系統,開源流行的web應用,博客等。造成的殺傷力十分強大。
- 劫持用戶cookie是常見的跨站攻擊形式,通過在網頁中寫入并執行腳本執行文件(多數情況下是js腳本代碼),劫持用戶瀏覽器,將用戶當前使用的sessionID信息發送到攻擊這控制的網站或服務器中
- “框架釣魚”,利用js腳本的基本功能之一:操作網頁的DOM樹結構和內容,在網頁中通過js腳本,生成虛假的頁面,欺騙用戶執行操作,而用戶所有的輸入內容會被發送到攻擊者的服務器上。
- 掛馬(水坑攻擊)
- 有局域性的鍵盤記錄
xss分類
- 反射型
- 存儲型
- DOM型
挖漏洞,點到為止用alter()
反射型
中危漏洞
把http請求發送后又回到客戶端前端代碼中。
必須要點擊url,http
別亂點什么別人發的網址
出現位置:搜索框
存儲型
留言,到數據庫
先有一個人,把數據存進數據庫,又有人訪問時,將數據庫里的數據返回到客戶端瀏覽器。
高危漏洞。
進入網站就觸發
DOM型
js代碼彈窗
alert
href
prompt(1)
能看懂前端js代碼,不需要給服務器發http請求
xss漏洞存在位置
- 搜索框
- 登錄框
- 發表評論/發表文章
- 其他輸入框
常見的執行xss的html標簽
xss執行方法:
- 使用
<script>alert(111)</script>
有的客戶端會有過濾,將script替換為空 - 用
<img src=xx onerror="alert(111)">
<a href=xx onclick="alert(111)"></a>
<svg olnload="alert(111)">
- 可以去網上搜索‘
xss防御
xss防御的總體思路是:對輸入進行過濾,單引號,雙引號,尖括號之類,對輸入進行編碼
過濾:根據業務需求進行過濾,比如輸入點要求輸入手機號,則只允許輸入手機號格式的數字
轉義:所有輸出到前端的數據都是根據輸出點進行轉義,比如輸入到html中進行html實體轉義,輸入到js里面的進行js轉義
xss之href輸出繞過:javascript:alert(111),直接帶入a標簽href里面一樣可以繞過htmlspecialchars,如果沒有用戶提交的數據交給a標簽,其實很難繞過
xss-labs
1
url?name=
2 轉義
再試一下1沒成功
看到網頁源碼,發現特殊符號沒有轉義
"> <script>alert()</script>
3 onclick
先試一下
看看源代碼,這里是單引號閉合,并且符號被實體化
htmlspecialchars()函數將一些預定義的字符轉換為html實體
沒對’設置,可以用onfocus或者onclick
js’ οnclick=‘alert(111)’
'將value閉合
但是我再搜索框中不行,閉合不了,但再開發者工具里編輯html元素可以
4
這里和3一樣,不過將’改為"就行
5 a href
我咋感覺f12中,找到需要更改的位置編輯為html元素就行
正常先試試3的payload發現不行,所有帶on的語句在on中間會加入_,那這里用a href標簽
" > <"
6 大小寫
這一關href也不行了
過濾了好多,看看大小寫能不能繞過
發現大小寫沒有被過濾掉,這題能利用大小寫進行繞過,所以我們可以用下面的方法,構造payload
用上面的改成部分大寫
“> <”
7 的、雙寫
先上關鍵字試試看
由源碼
這里面進行了小寫轉化,將檢測出來的on,script,href給刪掉了,但是沒有關系,我們可以利用雙拼寫來繞過。
我是l" oonnclick=‘alert(123)’
8 編碼
輸入的值在兩個,input標簽,href屬性
看看過濾了啥關鍵字
input標簽添加了html實體轉化函數還把雙引號也給實體化了, 添加了小寫轉化函數,還有過濾掉了src、data、onfocus、href、script、"
利用href的隱藏屬性自動Unicode解碼,將之前的payload編碼
javascript:alert(123)
9
這一關有檢查,需要向傳入的值里面添加http://并用注釋符注釋掉否則會執行不了無法彈窗
javascript:alert()/* http:// */
10 隱藏傳參
沒搜索框
看到源代碼,有隱藏傳參,并過濾掉了<>號,不能閉合插入標簽,但是我們還能用on
click事件,因為這里輸入框被隱藏了,需要添加type=“text”
?t_sort="οnclick=‘alert(11)’ type="text
11 referer抓包
試試和上一關一樣的
發現被轉義
?t_sort="οnclick=‘alert(11)’ type="text
其他的傳參也試試了發現不行
難搞查了一下,t_ref的標簽是http頭referer的參數(就是由啥地址轉跳到這里的,http頭的referer會記錄有)
那進行抓包傳參
把大于小于號><給刪掉了
抓包之后構造請求
Referer:js" οnclick=‘alert(111)’ type="text
12 User-Agent
和11一樣看到網頁源代碼可以看到,t_ua
在User-Agent中清除加入:js" οnclick=‘alert(111)’ type="text
13 cookie
t_cook,想到cookie
f12
cookie名為user,我們直接在這里改一下就好