您好,登錄后才能下訂單哦!
Cross-Site Scripting,簡稱為XSS或跨站腳本或者跨站腳本gongji。是一種針對網(wǎng)站或者應用程序的漏洞gongji技術(shù),也是利用代碼注入的一種。它允許惡意用戶將代碼注入網(wǎng)頁,其他用戶瀏覽網(wǎng)頁時將會受到影響。
XSS gongji分為三類:反射型,存儲型,DOM型
反射型XSS
反射型XSS又稱非持久型XSS,gongji方式僅具有一次性。
gongji方式:gongji者通過包含XSS代碼的惡意鏈接發(fā)送給受害者,當受害者訪問該連接時,服務器接收該受害者用戶的請求并進行處理,然后服務器把帶有XSS代碼的數(shù)據(jù)發(fā)送給受害者用戶的瀏覽器,瀏覽器解析這段包含XSS代碼的惡意腳本,就會觸發(fā)XSS漏洞,完成gongji。利用
我們用dvwa來展示基礎的XSS利用
在輸入框中輸入<script>alert(/xss/)</script>,點擊submit即可彈出存儲型XSS
存儲型XSS又稱持久型XSS,惡意腳本將被永久的保存在服務器的數(shù)據(jù)庫或者文件中。
gongji方式:多見與論壇,博客以及網(wǎng)站留言板。gongji者在發(fā)帖,留言的過程中,將惡意XSS腳本連同正常信息注入內(nèi)容,隨著帖子,留言板被服務器存儲下來,惡意XSS腳本也將保存在服務器中,當其他用戶瀏覽帖子或者留言時,惡意XSS腳本會在他們的瀏覽器中執(zhí)行。利用
在message框中輸入<script>alert(/xss/)</script>,點擊sign即可彈出xss
此時查看頁面源代碼
可以看到我們的惡意代碼成功保存在服務器上DOM型XSS
全稱Document Object Model,使用DOM可以使程序和腳本能夠動態(tài)訪問更新文檔的內(nèi)容,結(jié)構(gòu)及樣式。
DOM型XSS是一種特殊類型的反射型XSS,基于DOM文檔對象模型的一種漏洞。
gongji方式:用戶請求一個經(jīng)過專門設計的鏈接,由gongji者提交且包含惡意XSS代碼,服務器的響應不會以任何形式包含gongji者的腳本,當受害者的瀏覽器處理這個響應時,DOM對象就會處理XSS惡意代碼。利用
圖中DOM型XSS例子為再輸入框里輸入內(nèi)容點擊替換,會在“這里會顯示輸入的內(nèi)容”替換為輸入的信息
我們在輸入框中輸入<img src=1 onerror=alert(/xss/) /> ,點擊替換,即可觸發(fā)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>
<h7 id="id1">這里會顯示輸入的內(nèi)容</h7>
<form action="" method="post">
<input type="text" id="dom_input" value="輸入"><br />
<input type="button" value="替換" onclick="tihuan()">
</form>
<hr>
</center>
</body>
</html>
單擊替換時會執(zhí)行tihuan()函數(shù),而tihuan()函數(shù)是一個DOM操作,通過document,getElementById獲取ID為id1的節(jié)點,然后將節(jié)點id1的內(nèi)容修改成id為dom_input中的值。
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提供了四種字符編碼的策略
三位八進制數(shù)字,如果個數(shù)不夠,在前面補0,例如"e"的編碼為"\145"
兩位十六進制數(shù)字,如果個數(shù)不夠,在前面補0,例如"e"的編碼為"\x65"
四位十六進制數(shù)字,如果個數(shù)不夠,在前面補0,例如"e"的編碼為"\u0065"
對于一些控制字符,使用特殊的C類型的轉(zhuǎn)義風格(例如\n和\r)html實體編碼
命名實體:以&開頭,以分號結(jié)尾
字符編碼:十進制,十六進制ASCII碼或者Unicode字符編碼
url編碼
使用XSS編碼測試時需要考慮html渲染的順序,針對多種編碼的組合時,要選擇合適的編碼進行測試常用繞過方式
:
雙寫繞過:基于“黑名單”的方式如調(diào)用str_replace函數(shù)將輸入的<script>刪除,可以構(gòu)造語句:<sc <script> ript> alert(/ xss /)</ script>繞過
大小寫混淆繞過:<ScRipt> alert(/ xss /)</ script>
報錯繞過(利用img ,body 等標簽的事件或者iframe 等標簽的src 注入惡意的js 代碼,我這里直接就簡寫成報錯繞過了,因為基本都是靠報錯條件來觸發(fā)):<img src =1 onerror = alert(/ xss /)>
過濾用戶輸入的數(shù)據(jù)
對輸出到頁面的數(shù)據(jù)進行相應的編碼轉(zhuǎn)換
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。