xss靶場之xss-labs
靶場下載地址:https://github.com/lyshark/xss-labs
第一關
1.get請求,提交name變量test,完整的顯示在返回的頁面源代碼中
2.get請求的name變量放入xss poc,完整的返回在html中,瀏覽器響應xss poc。
3.后台代碼分析,通過$_GET["name"],獲取name的值,沒有過濾通過echo直接進行了輸出
第二關
1.利用name參數提交poc,查看返回的html代碼,需要構造閉合
2.構造閉合,瀏覽器響應poc
3.后台源代碼分析
獲取瀏覽器提交的keyword值,未進行過濾,輸出在<input name=keyword value="'.$str.'">。
如果是keyword提交的是<script>alert(xss)</script>,返回的就會是<input name=keyword value="<script>alert(1)</script>">,javascript引擎並不會執行<script>,所以需要構造閉合。
keyword提交test"><script>alert(1)</script>//,php處理后返回的html就會是<input name=keyword value="test“> <script>alert(1)</script>//">,//是注釋的作用,javascript引擎執行<script>alert(1)</script>
第三關
1.keyword提交"test><script>alert(1)</script>//構造閉合進行注入,根據返回的html代碼,后台對尖括號進行了過濾
2.構造標簽事件進行過濾,返回值實在input標簽中,嘗試構造onclick事件觸發xss。點擊輸入框后,觸發onclick事件,響應onclick中的javascript代碼。
3.構造事件onmouseover,事件成功執行javascript:偽協議。
5.后台源代碼分析,采用htmlspecialchars函數對獲取keyword變量進行過濾,輸出在input標簽的value中。htmlspecichars對尖括號進行了過濾。
第四關
1.keyword提交<script>poc,根據后台返回的源代碼,后台針對尖括號進行了過濾
2.構造事件onmouseover,構造語句閉合,成功執行javascript語句
3.后台源代碼分析。對get請求的keyword變量,過濾掉尖括號,采用htmlspecialchars過濾后用echo直接輸出在返回的html中。
第五關
1.構造事件 “ oninput='alert(1)',返回的html代碼對on進行了過濾。嘗試大小寫,依然進行了過濾。嘗試編碼,不識別。
2.嘗試POC test"><script>alert</script>//,根據返回的html,后台對script進行了過濾,但是並未對尖括號進行過濾。
3.利用沒有過濾尖括號,構造a標簽再嘗試利用a標簽的href屬性執行javascript:偽協議,"><a href='javascript:alert(1)'>,沒有對javascript進行過濾,觸發xss
4.后台源代碼分析,對get提交的keyword變量,script替換成scr_ipt,on替換成o_n,htmlspecialchars函數過濾后,輸出在html中
第六關
1.經測試替換了script,on,沒有過濾<>。構造a標簽,利用href屬性支持javascript:偽協議構造poc,后台對href關鍵字進行替換,嘗試采用大小寫混寫進行了繞過。
2.后台源代碼分析。對get提交的keyword變量,替換<script 、on、src、data、href關鍵字,采用htmlspecialchars過濾后輸出在html中
第七關
1.構造poc,test" /><a href="javascript:alert(1)">a</a>//,根據返回的html,過濾了href和script。嘗試大小寫不能進行繞過。
2.嘗試重復寫test" /><a hrhrefef="javascscriptript:alert(1)">a</a>//,可以進行繞過觸發poc
3.后台源代碼分析。先將get方式提交的keyword變量通過strtolower轉換為小寫,將關鍵字script、on、src、data、href關鍵字替換成空,然后輸出在html中
第八關
1.利用href屬性支持javascript:偽協議構造poc,javascript關鍵字被替換。嘗試大小寫,重復寫,無法進行繞過。
2.嘗試對poc進行編碼,可繞過
3.后台源代碼分析。將keyword提交的變量轉換為小寫,替換關鍵字script、on、src、data、href、",然后輸出在a標簽的href屬性中。
第九關
1.采用第八關的poc,發現poc中應包含合法的url,poc中添加//http://www.baidu.com,發現可以進行繞過
2.后台源代碼分析。get提交的keyword變量,替換關鍵字script、on、src、data、href、",判斷該變量有無http://
第十關
1.對keyword提交poc,根據返回的源代碼,過濾了尖括號,嘗試編碼不能繞過,無法構造事件觸發xss、無法利用屬性的javascript協議、無法利用css注入。
2.詳細查看源代碼,可能有隱藏的表單,嘗試提交t_link、t_history、t_sort變量,t_sort變量返回在了html的value中,嘗試進行了繞過。構造poc:"type="text" onclick="alert(1)",web瀏覽器成功執行 。ps:type="text"為構造一個文本框,用來觸發onclick事件
3.后台源代碼分析,獲取了get請求的keyword變量、t_sort變量,t_sort變量過濾掉了尖括號,輸出在value屬性中
第十一關
1.根據返回的html判斷refer字段為web頁面的自定義變量,可能存在xss注入點
2.進行測試,存在xss注入
3.后台源代碼分析,獲取get請求的keyword、t_sort變量和refer字段,過濾refer字段的尖括號后輸出在html代碼中
第十二關
1.根據返回的html判斷user-agent字段為web頁面的自定義變量,可能存在xss注入點
2.進行測試,存在xss注入
3.后台源代碼分析,獲取get請求的keyword、t_sort變量和user-agent字段,過濾refer字段的尖括號后輸出在html代碼中
第十三關
1.根據返回的html判斷cookie字段為web頁面的自定義變量,可能存在xss注入點
2.進行測試,存在xss注入
3.后台源代碼分析,獲取get請求的keyword、t_sort變量和cookie字段,過濾refer字段的尖括號后輸出在html代碼中
第十四關
本關因iframe調用的文件地址失效,無法進行測試。要考的應該是通過修改iframe調用的文件來實現xss注入
第十五關
1. 根據返回的源代碼判斷,變量src存在注入點
2.構造poc,並未觸發xss,ng-include屬性一直未生效,原來是調用的js文件中有地址被牆了,需要源代碼中修改js源文件路徑 https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js,觸發xss。
ng-include本地文件包含,調用本地有xss漏洞的文件,觸發xss
3.后台源代碼分析,nginclude調用采用htmlspecialchars過濾輸入的src變量
第十六關
1.據返回的源代碼分析,keyword參數存在xss注入。嘗試進行注入后發現對script、/、空格進行了轉換,需要進行繞過
2.采用回車符%0a進行繞過,觸發poc。poc:<a%0atype="text"%0a"alert">
3.源代碼分析,過濾了script、空格、/
第十七關
1.根據返回的代碼判斷,arg01和arg02提交的變量存在注入點
2.進行注入。ps:一直用的火狐瀏覽器沒成功,最后發現是火狐不支持swf,改成ie瀏覽器就可以了
第十八關
1.根據返回的源代碼判斷,arg01和arg02存在注入點,web服務器對"進行了過濾
2.改為onmouseover=alert(1),去掉”,觸發poc
第十九關
flash xss,涉及到反編譯,先暫時一放,研究明白了再更新。
第二十關
為flash xss,涉及到反編譯,先暫時一放,研究明白了再更新。
反射型XSS測試步驟總結:
1.檢測輸入變量,確認每個web頁面中用戶可自定義的變量,如HTTP參數、POST數據、隱藏表單字段值、預定義的radio值或選擇值
2.分別確認每個輸入變量是否存在xss漏洞。變量輸入處輸入poc,查看返回的web頁面的html中poc代碼是否被過濾,瀏覽器是否響應poc,若存在過濾,進行測試查看能否進行繞過。
xss的攻防:
1.利用<>標記,構造<script>標簽可執行javascript的xss代碼。
xss過濾函數需過濾<><script></script>等字符。
2.利用html標簽屬性支持javascript:偽協議(支持標簽屬性的有href、lowsrc、bgsound、background、value、action、dynsrc等),執行xss代碼。
xss 過濾函數需過濾JavaScript等關鍵字。
3.利用javascript在引號中只用分號分隔單詞或強制語句結束,用換行符忽略分號強制結束一個完整語句,而忽略回車、空格、tab等鍵,繞過對javascript的關鍵字的過濾。
4.利用html標簽屬性值支持ascii碼,對標簽屬性值進行轉碼進行規則庫的繞過。
xss 過濾函數需過濾&#\等字符。
5.利用事件處理函數,觸發事件,執行xss代碼。例如<img src='#' onerror=alert(/xss/)>,當瀏覽器響應頁面時,找不到圖片的地址,觸發onerror事件。
6.利用css執行javascript代碼
css代碼中利用expression觸發xss漏洞。如下所示:
<div style="width: expression(alert('xss'));>
<img src="#" style="xss:expression(alert(/xss/));">
<style>body {background-image:expression(alert("xss"));}</style>
<div style="list-style-image:url(javascript:alert('xss'))">
css代碼中利用@import觸發xss
<stytle>
@import 'javascript:alert("XSS")';
</stytle>
css代碼中使用@import和link方式導入外部含有xss代碼的樣式表文件
<link rel="stytlesheet" href="http://www.***.com/a.css">
<stytle type='text/css'>@import url(http://www.*.com/a.css);</style>
xss過濾函數需過濾style標簽、style屬性、expression、javascript、import等關鍵字。
7.利用大小寫混淆、使用單引號、不使用引號、使用/插入在img src中間、構造不同的全角字符、運用/**/混淆過濾規則來繞過過濾函數
8.利用字符編碼。javascript支持unicode、escapes、十六進制、八進制等編碼形式。