接下來一年時間將會主要研究滲透測試方向的眾多問題,文章中的內容也會在后面定期更新。本文主要記錄了一些XSS漏洞挖掘中的實用心得和學習筆記。
漏洞描述
漏洞描述:跨站腳本攻擊的英文全稱是Cross Site Script,為了和樣式表區分,縮寫為
XSS。發生的原因是網站將用戶輸入的內容輸出到頁面上,在這個過程中可能有惡意代碼被
瀏覽器執行。跨站腳本攻擊,它指的是惡意攻擊者往Web頁面里插入惡意html代碼,當用戶
瀏覽該頁之時,嵌入其中Web里面的html代碼會被執行,從而達到惡意用戶的特殊目的。已
知的跨站腳本攻擊漏洞有三種:1)存儲式;2)反射式;3)基于DOM。1、 存儲型跨站腳本攻擊涉及的功能點:用戶輸入的文本信息保存到數據庫中,并能夠在頁面展示的功能點,例如用戶留言、發送站內消息、個人信息修改等功能點。
2、 反射型跨站腳本攻擊涉及的功能點:URL參數需要在頁面顯示的功能點都可能存在
反射型跨站腳本攻擊,例如站內搜索、查詢功能點。
3、 基于DOM跨站腳本攻擊涉及的功能點:涉及DOM對象的頁面程序,包括(不限這
些):
document.URL
document.URLUnencoded
document.location
document.referrer
window.location
測試方法:
1)?在輸入的參數后逐條添加以下語句,以第一條為例,輸入
http://www.exmaple.com/page.xxx?name=<script>alert(123456)</script>
只要其中一條彈出顯示123456的告警框,就說明存在跨站漏洞,記錄漏洞,停止測試。
2)?如果沒有彈出顯示123456的告警框,則在返回的頁面上單擊鼠標右鍵,選擇“查看源文件”。
3)?查找網頁源文件中是否包含完整的字符串<script>alert(123456)</script>,則不管有沒有彈出顯示123456的告警框,都表明存在跨站腳本漏洞。
4)?由于有些HTML元素(比如<textarea>或”)會影響腳本的執行,所以不一定能夠正確彈出123456告警框,需要根據返回網頁源文件的內容,構造value的值,比如多行文本輸入框:
</textarea><script>alert(123456)</script>
文本輸入框:
</td><script>alert(123456)</script>
'><script>alert(123456)</script>
"><script>alert(123456)</script>
</title><script>alert(123456)</script>
--><script>alert(123456)</script>
[img]javascript:alert(123456)[/img]
<scrip<script>t>alert(123456)</scrip</script>t>
</div><Script>alert(123456)</script>
需要對頁面上所有可以提交參數的地方進行測試。具體跨站腳本的測試語句根據實際情況的不同而不同,可自行構造,以及觸發事件等切換,這里只列出了一些最常見構造語句。
基本用例
從攻的角度探討以下用例
1、利用<>標記注射腳本
最簡單的就是<script>alert(123456)</script>,但是XSS。filter首當其沖要進行過濾和轉義的就是<>和<script>這類字符。
2、利用HTML標簽屬性值
可以利用HTML中標簽的屬性值,很多HTML標記中的屬性都支持jcavscript:[code]的偽協議形式,例子如下:
<img src="javascript:alert('XSS');">
但這個方式由于瀏覽器的升級局限性較高
3、使用空格回車鍵
在引號中使用額外的換行和分隔來跳過過濾,因為JS語句通常以分號結尾。
例子:
<img src ="javas
ceript:
alert(/xss/)" width=100>
4、對標簽屬性轉碼:
支持ASCII形式
5、產生自己的事件
6、使用CSS進行xss
7、擾亂過濾規則
使用不同的大小寫、使用單引號、不使用引號等方式