当前位置: 首页 > news >正文

十四、pikachu之XSS

文章目录

  • 1、XSS概述
  • 2、实战
    • 2.1 反射型XSS(get)
    • 2.2 反射型XSS(POST型)
    • 2.3 存储型XSS
    • 2.4 DOM型XSS
    • 2.5 DOM型XSS-X
    • 2.6 XSS之盲打
    • 2.7 XSS之过滤
    • 2.8 XSS之htmlspecialchars
    • 2.9 XSS之href输出
    • 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><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);//';闭合掉当前的语句,然后插入新语句,然后再用//注释掉老语句遗留下来的';

在这里插入图片描述

http://www.lryc.cn/news/141581.html

相关文章:

  • 五分钟了解最短路径寻路算法:Dijkstra 迪杰斯特拉
  • 【ARM】Day8 中断
  • 大数据Flink(六十八):SQL Table 的基本概念及常用 API
  • 算法练习- 其他算法练习6
  • ModaHub魔搭社区:WinPlan经营大脑管理中心
  • 滑动窗口系列4-Leetcode322题零钱兑换-限制张数-暴力递归到动态规划再到滑动窗口
  • Nginx全局配置
  • VUE笔记(四)vue的组件
  • 菜鸟教程《Python 3 教程》笔记
  • JAVA学习-愚见
  • Watch数据监听详解
  • UML建模以及几种类图的理解
  • opencv进阶18-基于opencv 决策树导论
  • 13.4 目标检测锚框标注 非极大值抑制
  • 【论文笔记】最近看的时空数据挖掘综述整理8.27
  • 【大模型】基于 LlaMA2 的高 star 的 GitHub 开源项目汇总
  • 解决elementUI打包上线后icon图标偶尔乱码的问题
  • yolov3加上迁移学习和适度的数据增强形成的网络应用在输电线异物检测
  • 香橙派OrangePi zero H2+ 驱动移远EC200A
  • 写一个java中如何用JSch来连接sftp的类并做测试?(亲测)
  • 【沐风老师】如何在3dMax中将3D物体转化为样条线构成的对象?
  • 2023国赛数学建模思路 - 案例:随机森林
  • wxpython:wx.html2 是好用的 WebView 组件
  • 《QT+PCL 第五章》点云特征-PFH
  • 【分享】小型园区组网场景
  • LeetCode 1267. 统计参与通信的服务器
  • 169. 多数元素(哈希表)
  • 微服务集成spring cloud sentinel
  • 2023年最新版Windows环境下|Java8(jdk1.8)安装教程
  • linux -- jdk 的安装