XSS漏洞詳解

Xss漏洞介紹:

Cross-Site Scripting,簡稱爲XSS或跨站腳本或者跨站腳本***。是一種針對網站或者應用程序的漏洞***技術,也是利用代碼注入的一種。它允許惡意用戶將代碼注入網頁,其他用戶瀏覽網頁時將會受到影響。
XSS***分爲三類:反射型,存儲型,DOM型

XSS漏洞原理及利用:

反射型XSS
反射型XSS又稱非持久型XSS,***方式僅具有一次性。
***方式:gongji者通過包含XSS代碼的惡意鏈接發送給受害者,當受害者訪問該連接時,服務器接收該受害者用戶的請求並進行處理,然後服務器把帶有XSS代碼的數據發送給受害者用戶的瀏覽器,瀏覽器解析這段包含XSS代碼的惡意腳本,就會觸發XSS漏洞,完成***。
利用
我們用dvwa來展示基礎的XSS利用
XSS漏洞詳解
在輸入框中輸入<script>alert(/xss/)</script>,點擊submit即可彈出
XSS漏洞詳解
存儲型XSS
存儲型XSS又稱持久型XSS,惡意腳本將被永久的保存在服務器的數據庫或者文件中。
***方式:多見與論壇,博客以及網站留言板。gongji者在發帖,留言的過程中,將惡意XSS腳本連同正常信息注入內容,隨着帖子,留言板被服務器存儲下來,惡意XSS腳本也將保存在服務器中,當其他用戶瀏覽帖子或者留言時,惡意XSS腳本會在他們的瀏覽器中執行。
利用
XSS漏洞詳解
在message框中輸入<script>alert(/xss/)</script>,點擊sign即可彈出xss
XSS漏洞詳解
此時查看頁面源代碼
XSS漏洞詳解
可以看到我們的惡意代碼成功保存在服務器上
DOM型XSS
全稱Document Object Model,使用DOM可以使程序和腳本能夠動態訪問更新文檔的內容,結構及樣式。
DOM型XSS是一種特殊類型的反射型XSS,基於DOM文檔對象模型的一種漏洞。
***方式:用戶請求一個經過專門設計的鏈接,由gongji者提交且包含惡意XSS代碼,服務器的響應不會以任何形式包含***者的腳本,當受害者的瀏覽器處理這個響應時,DOM對象就會處理XSS惡意代碼。
利用
XSS漏洞詳解
圖中DOM型XSS例子爲再輸入框裏輸入內容點擊替換,會在“這裏會顯示輸入的內容”替換爲輸入的信息
XSS漏洞詳解
我們在輸入框中輸入<img src=1 onerror=alert(/xss/) /> ,點擊替換,即可觸發XSS
XSS漏洞詳解


##這裏爲DOM型XSS漏洞源碼
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Test</title>
<script type="text/javascript">
function tihuan(){
document.getElementById("id1").innerHTML = document.getElementById("dom_input").value;
}
</script>
</head>
<body>
<center>
<h6 id="id1">這裏會顯示輸入的內容</h6>
<form action="" method="post">
<input type="text" id="dom_input" value="輸入"><br />
<input type="button" value="替換" onclick="tihuan()">
</form>
<hr>

</center>

</body>
</html>


單擊替換時會執行tihuan()函數,而tihuan()函數是一個DOM操作,通過document,getElementById獲取ID爲id1的節點,然後將節點id1的內容修改成id爲dom_input中的值。

XSS常用語句及編碼繞過

XSS常用測試語句
<script>alert(/xss/)</script>
<img src=1 onerror=alert(/xss/) >
<svg onload=alert(/xss/) >
<a href=javascript:alert(/xss/) >
常見的XSS編碼繞過有js編碼,html實體編碼,url編碼
js編碼
js提供了四種字符編碼的策略
三位八進制數字,如果個數不夠,在前面補0,例如"e"的編碼爲"\145"
兩位十六進制數字,如果個數不夠,在前面補0,例如"e"的編碼爲"\x65"
四位十六進制數字,如果個數不夠,在前面補0,例如"e"的編碼爲"\u0065"
對於一些控制字符,使用特殊的C類型的轉義風格(例如\n和\r)
html實體編碼
命名實體:以&開頭,以分好結尾
字符編碼:十進制,十六進制ASCII碼或者Unicode字符編碼
url編碼
使用XSS編碼測試時需要考慮html渲染的順序,針對多種編碼的組合時,要選擇合適的編碼進行測試
常用繞過方式
雙寫繞過:基於“黑名單”的方式如調用str_replace函數將輸入的<script>刪除,可以構造語句:<sc <script> ript> alert(/ xss /)</ script>繞過
大小寫混淆繞過:<ScRipt> alert(/ xss /)</ script>
報錯繞過(利用img ,body 等標籤的事件或者iframe 等標籤的src 注入惡意的js 代碼,我這裏直接就簡寫成報錯繞過了,因爲基本都是靠報錯來觸發):<img src =1 onerror = alert(/ xss /)>

XSS漏洞的修復

過濾輸入的數據
對輸出到頁面的數據進行相應的編碼轉換

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