Xss 之 当javascript代码已经gg

前段时间发现一个很奇怪的xss,它的输出点在类似:

<script>
thisisanerrorfunc();//Error Here
{xsscodehere}//Xss Here
</script>

由于在xss输出点的前面调用了一个错误的函数,导致 xsscode alert(); 不执行了

这也不是很罕见的问题,经常会出现xss在<script>标签中而前面的代码已经gg的情况。

这个时候我们就应该考虑 javascript 解释的优先级

在我看来,它就像是把全部javascript代码重新排序,比如一段代码为

function a(){var a=1}
alert(1);
function b(){var b=1}

最后解释起来应该是

function a(){var a=1}
function b(){var b=1}
alert(1);

因此在这个案例里,应该用function覆盖 逃过错误中断,
我在前面的代码中找到了类似这样的代码:

function kit(){document.write('xxx')}
kit()

在这儿定义了kit()函数并且调用,那么最后的xss payload应该是这样的(全文)

function kit(){document.write('xxx')}
kit();
thisisanerrorfunc();//Error
function kit(){alert()}//Xss

成功覆盖了kit函数并且绕过了javascript的错误中断!