在線XSS-labs靶場:https://xssaq.com/yx/
靶場搭建
靶場是直接使用docker搭建的
docker pull vulfocus/xss-labs
啟動靶場
docker run -p 8005:80 vulfocus/xss-labs
瀏覽器訪問IP+8005

windows搭建
使用phpstudy_pro搭建
下載地址:https://github.com/do0dl3/xss-labs
解壓檔案放入www檔案夾下,開啟服務
瀏覽器訪問127.0.0.1/xss-labs
level1

仔細觀察看到在url欄中傳了一個引數,所以在該引數處進行嘗試傳入其它引數

發現頁面有所變化,在 “歡迎用戶” 后有一個顯示位能對傳入的引數進行輸出
構造poc
<script>alert('xss')</script>

原始碼分析
程式將用戶以GET方式提交的引數name賦給$str獲取name的值,直接回傳前端使用,沒有對其進行過濾導致惡意代碼可以在前端執行
level2

來到第二關有搜索框,直接使用第一關的poc,沒有彈窗,代碼原樣輸出
<script>alert("xss")</script>

右鍵查看原始碼發現<>都被過轉義了

回到頁面F12定位到搜索框,發現是<input>標簽可以利用
利用:閉合<input>標簽

構造poc:
"><script>alert(xss)</script>

原始碼分析
程式沒有對value屬性使用htmlspecialchars() 函式進行處理,只對<h2>處進行過濾處理
知識補充

level3

先輸入字串test進行嘗試,傳入的引數和搜索框的一樣
查看源代碼和第二關差不多
使用第二關的poc
"><script>alert("xss")</script>
沒有彈窗
查看源代碼,發現兩處<>都被HTML物體化,可以推測這兩處都使用了htmlspecialchars()函式
<input>標簽無法閉合,可以繞開標簽去使用新標簽,<input>標簽的一些特殊事件來執行js代碼
使用單引號閉合屬性value,添加事件執行js
poc
'onfocus=javascript:alert('xss') >
onfocus是javascript中在物件獲得焦點時發生的事件,最簡單的實體就是網頁上的一個輸入框,當使用滑鼠點擊該輸入框時輸入框被選中可以輸入內容的時候就是該輸入框獲得焦點的時候,此時輸入框就會觸發onfocus事件.因此點擊當前頁面的輸入框就可以完成彈框了
源代碼分析
剛剛的推理正確,這兩處都使用了htmlspecialchars()函式
level4

這個和上兩關類似,直接丟入poc查看
<script>alert("xss")</script>
查看源代碼發現<h2>(標號1)使用了使用了htmlspecialchars()函式處理
標號2處< 和 >被洗掉
很明顯和第三關差不多,使用事件來觸發js,唯一不同的是使用雙引號閉合
poc
"onfocus=javascript:alert('xss') >
填入poc點擊搜索框觸發事件
源代碼分析
keyword引數的值賦給str變數,然后經過1處理將變數值中包含的<、>符號洗掉
2處對變數值進行編碼處理之后顯示在頁面之上
最后處將去除特殊符號后的變數值插入到<input>標簽的value屬性值中
level5

此題和上一關卡變化不大,但不知道服務器端對其是怎么處理的,直接丟入poc查看源代碼
<script>alert("xss")</script>
根據上幾題第一處很明顯使用htmlspecialchars()函式處理過才回傳到瀏覽器顯示的
二處可以看到<script>標簽被插入了一個_(下劃線)符號
可以簡單的推測一下服務器在2處使用了正則匹配,匹配到<script>標簽插入_符號
<script>標簽無法使用,可以使用其他的標簽繞過,使用事件進行繞過測驗
"onfocus=javascript:alert('xss') >
測驗發現沒有彈窗,查看源代碼onfocus事件也被插入了_(下劃線)符號
再次嘗試其他的標簽:<a>
使用新標簽要先閉合<inupt>標簽構造poc
"><a href=javascript:alert("xss")>xss</a>
填入poc,點擊鏈接觸發彈窗

源代碼分析
1標號處GTE入引數給str,分別對on 和<script>進行了過濾,,過濾之后再見值傳給了srt3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/551510.html
標籤:其他
下一篇:返回列表
