十四、pikachu之XSS

文章目录

  • 1、XSS概述
  • 2、实战
    • [2.1 反射型XSS(get)](#2.1 反射型XSS(get))
    • [2.2 反射型XSS(POST型)](#2.2 反射型XSS(POST型))
    • [2.3 存储型XSS](#2.3 存储型XSS)
    • [2.4 DOM型XSS](#2.4 DOM型XSS)
    • [2.5 DOM型XSS-X](#2.5 DOM型XSS-X)
    • [2.6 XSS之盲打](#2.6 XSS之盲打)
    • [2.7 XSS之过滤](#2.7 XSS之过滤)
    • [2.8 XSS之htmlspecialchars](#2.8 XSS之htmlspecialchars)
    • [2.9 XSS之href输出](#2.9 XSS之href输出)
    • [2.10 XSS之JS输出](#2.10 XSS之JS输出)

1、XSS概述

Cross-Site Scripting 简称为"CSS",为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:

  • 反射性XSS;
  • 存储型XSS;
  • DOM型XSS;

XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致"精心构造"的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。

因此,在XSS漏洞的防范上,一般会采用对输入进行过滤输出进行转义的方式进行处理:

  • 输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;
  • 输出转义:根据输出点的位置对输出到前端的内容进行适当转义。

2、实战

2.1 反射型XSS(get)

(1)j既然已经提示这题属于反射型XSS,直接上payload:<script>alert("XSS")</script>;

发现:payload被截断了。查看前端源码:

输入框有长度限制,那么我们直接Burp进行抓包,修改数据包试试:

payload:http://192.168.92.1:32769/vul/xss/xss_reflected_get.php?message=%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%22%58%53%53%22%29%3c%2f%73%63%72%69%70%74%3e&submit=submit

2.2 反射型XSS(POST型)

(1)首先使用用户名和密码进行登录;

(2)这一题跟前一题差不多,直接在输入框中上payload:<script>alert(document.cookie)</script>

2.3 存储型XSS

(1)首先在留言板中输入一些特殊的字符串,发现并没有过滤:

(2)跟前面一样,直接上payload:<script>alert(document.cookie)<script>

与反射型XSS不同的是,存储型XSS会使每访问一次页面,页面都会弹框。

2.4 DOM型XSS

DOM型XSS和反射型XSS、存储型XSS的区别在于:DOM型不用将恶意脚本传输到服务器在返回客户端,而后两种恶意脚本都会经过服务器端然后返回给客户端。

对于浏览器来说,DOM文档就是一份XML文档,通过JavaScript就可以轻松的访问DOM文档。下面举例一个DOM将HTML代码转化成树状结构:

html 复制代码
<html>
    <head>
        <meta charset="gbk" />
        <title> TEST </title>
    </head>
    <body>
        <p>The is p.<p>
        <h1>Product:</h1>
        <ul>
            <li>Apple</li>
            <li>Pear</li>
            <li>Corn</li>
        </ul>
    </body>
</html>

转化成模型如下图:

通过这种简单的树状结构,就能把元素之间的关系简单明晰的表示出来,方便客户端的JavaScript脚本通过DOM动态的检查和修改页面内容,不依赖服务端的数据。

(1)在搜索框中随便输入12,页面回显"what do you see?"。

(2)查看页面源代码:

大意:点击"click me!"按钮,会执行domxss()函数,变量str的值为输入框中的内容,然后将str的值与<a href=''>what do you see?</a>进行拼接。

我们只需要闭合a标签,就可以使得payload执行。构造payload:'><img src="#" onmouseover="alert('xss')">

注意,不能再script标签下再嵌套script标签,故换一个payload,当鼠标移动到图片的的地方,就会弹窗。

2.5 DOM型XSS-X

查看源码;

关于window.location.search就是URL中?后面的字母,具体如下:

然后经过切分、替换,将str的值与<a href=''>就让往事都随风,都随风吧</a>进行拼接。构造payload:'><img src="#" onmouseover="alert('xss')">

需要点击有些费尽心机想要忘记的事情,后来真的就忘掉了之后,在将鼠标移动到图片处,才会弹框。

2.6 XSS之盲打

xss盲打是一种攻击场景,我们输出的payload不会在前端进行输出,当管理员查看我们的留言时就会遭到xss攻击。

输入常规的payload:<script>alert(/xss/)</script>,登录后台地址去看看(/xssblind/admin_login.php)。


2.7 XSS之过滤

绕过过滤的方法:

  • 前端限制绕过,直接抓包重放,或者修改html前端代码
  • 大小写,比如:<SCRIPT>aLeRT(111)</sCRIpt>
  • 拼凑:<scri<script>pt>alert(111)</scri</script> pt>
  • 使用注释进行干扰:<scri<!--test-->pt>alert(111)</sc <!--test--> ript>
  • 使用其他的标签,绕过script标签,如:<img src="#" onmouseover="alert('xss')">

这里使用payload:<img src="#" onmouseover="alert('xss')">

2.8 XSS之htmlspecialchars

htmlspecialchars()函数是php常用方法,是把预定义的字符转换为HTML实体。其语法:htmlspecialchars(string,flags,character-set,double_encode)

常见的预定义的字符有:

  • &(和号)成为&amp
  • "(双引号)成为&quot
  • (单引号)成为&#039
  • <(小于)成为&lt
  • >(大于)成为&gt

输入" ' > < 之后,发现除了单引号没被转化外,其他都被转化为HTML实体了。

故,构造payload:#' onclick='alert(/xss/),前一个引号闭合href属性,第二个引号闭合onclick属性。

2.9 XSS之href输出

在输入框中输入<script>alert('xss')</script>,打开源代码,发现均被HTML实体化了,闭合标签和闭合属性的方法行不通了。

关于<a> 标签的href属性:

<a> 标签的 href 属性用于指定超链接目标的 URL。href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段。如果用户选择了 <a> 标签中的内容,那么浏览器会尝试检索并显示 href 属性指定的 URL 所表示的文档,或者执行 JavaScript 表达式、方法和函数的列表。

总而言之,在a标签的href属性里面,可以使用javascript协议 来执行js,可以尝试使用伪协议绕过。构造payload:javascript:alert(/xss/)

注意:alert中字符串需要用"、' or /包含,数字不用。

2.10 XSS之JS输出

输入<script>alert('xss')</script>,发现不行,打开源代码,可以看到payload被带到script标签里去了。

构造payload:';alert(1);//';闭合掉当前的语句,然后插入新语句,然后再用//注释掉老语句遗留下来的';

相关推荐
Boilermaker199220 分钟前
【Java EE】SpringIoC
前端·数据库·spring
中微子31 分钟前
JavaScript 防抖与节流:从原理到实践的完整指南
前端·javascript
天天向上10241 小时前
Vue 配置打包后可编辑的变量
前端·javascript·vue.js
芬兰y1 小时前
VUE 带有搜索功能的穿梭框(简单demo)
前端·javascript·vue.js
好果不榨汁1 小时前
qiankun 路由选择不同模式如何书写不同的配置
前端·vue.js
小蜜蜂dry1 小时前
Fetch 笔记
前端·javascript
拾光拾趣录1 小时前
列表分页中的快速翻页竞态问题
前端·javascript
小old弟1 小时前
vue3,你看setup设计详解,也是个人才
前端
Lefan1 小时前
一文了解什么是Dart
前端·flutter·dart
Patrick_Wilson1 小时前
青苔漫染待客迟
前端·设计模式·架构