跨站脚本攻击漏洞(XSS)-基础篇

news2025/1/11 6:06:37

数据来源

跨站脚本攻击 

1、什么是跨站脚本攻击?

        跨站脚本( Cross-site Scripting)攻击,攻击者通过网站注入点注入客户端可执行解析的 payload(脚本代码),当用户访问网页时,恶意 payload自动加载并执行,以达到攻击者目的(窃取 cookie、恶意传播、钓鱼欺骗等)。

        为了避免与HTML语言中的CSS相混淆,通常称它为“XSS”。

2、危害?

  • 获取用户信息:(如浏览器信息、ip地址、cookie信息等)
  • 钓鱼:(利用xss漏洞构造出一个登录框,骗取用户账户密码,提示登录过期,模拟一个网站的登录框,将用户名、密码发送到攻击者服务器)
  • 注入木马或广告链接:(有些在主站注入非法网站的链接,对公司的声誉有一定的影响)·
  • 后台增删改网站数据等操作:(配合CSR漏洞,骗取用户点击,利用s模拟浏览器发包)
  • xss蠕虫(微博蠕虫:只要看过某人的微博就是自动关注某人;贴吧蠕虫:看过某个帖子就是自动回复这个帖子) 

跨站脚本攻击漏洞类型及利用场景

反射型XSS

http://testfire.net  这是一个开源的测试网站,攻击这个网站不犯法。

示例-测试网站是否存在反射型xss

先在输入框输入点东西,随便写如:hello、你好啊,李银河  如下图:

然后加上一些HTML标签,如:h1~h3、p、a等等

 <a href="https:www.baidu.com">你好啊,李银河</a>

李银河是谁?我也不知道.

        测试到这里我们就可以得出结论,这个网站存在反射型xss,可以被不法分子利用,出现这个漏洞的原因:写这个网站的前端开发人员没有对输入框的输入内容进行过滤,当然一般大型网站是没有这种漏洞的,Altoro Mutua这个网站是外国人专门开发给别学习测试攻击的所以有很多漏洞。

如果你需要在输入框执行JS代码则需要写在 <script>标签内,如:

<script>alert("hello,zhangsan")</script>

        alert() 这个函数的效果就是在页面弹窗,完整写法:window.alert() 简写: alert()

        或者输入:<img src=1 οnerrοr=alert(1)>     # img 是图像标签,src填写的是图片路径这里写1路径肯定是不存在的然后就报错,error 就是捕获报错的事件,on是绑定事件给这个img标签,“=”后面就可以跟我们要执行的JS代码

存储型XSS

这里我就使用DVWA靶场做测试(windows安装,kali安装)

1)把靶场的安全等级调到最低

2)选择XSS存储

<script>alert("hello,zhangsan")</script>
<scr<script>ipt>alert("xss")</script>

 刷新网页之后,弹框还是出弹出。

原因:输入框没有严格的筛选就存到了数据库中,网页从数据库拿出数据展示也没有做过滤。

可以查看源码,看看这个网页是如何写的

<?php

if( isset( $_POST[ 'btnSign' ] ) ) {
    // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );

    // Sanitize message input
    $message = stripslashes( $message );
    $message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

    // Sanitize name input
    $name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

    // Update database
    $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

    //mysql_close();
}

?> 

        trim()                          ​​​​​​​               #  trim()函数主要作用是移除字符串两侧的空白字符或其他预定义字符。
        mysql_real_escape_string()  # 函数会对字符串中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义。
        stripslashes()               # 函数删除字符串中的反斜杠

        $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";   # INSERT INTO 是SQL的插入语句,这条代码主要是把$message(我们输入的留言内容)和$name(留言名称)分别插入到数据库的guestbook表的commentname字段中。对SQL基础语句不了解的可以看这篇:SQL的基本语句用法

        可以看到,对输入并没有做XSS方面的过滤与检查,且存储在数据库中,因此这里存在明显的存储型XSS漏洞

可以自行把安全等级调高然后查看源码,看看是如何做防御的(我这就不多讲了,有兴趣的可以看这篇:DVWA(XSS存储型) 我觉得他写的挺详细的)

不同的计算机语言防御方式是不一样的,不过原理都是相通的。

DOM型XSS

DVWA靶场做测试 

1)跟之前的一样先把安全等级调到最低 

开始测试,原来的下拉列表的DOM结构如下图:(F12可以打开开发者模式,查看网页的结构代码)

 检测网站是否存在XSS的DOM漏洞

<script>alert("test")</script>

盗取网站的cookie 

<script>alert(document.cookie)</script>

防御的话,可以自行调高安全等级然后查看源码

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

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

相关文章

索引(index)

索引&#xff08;index&#xff09; 1、什么是索引&#xff1a; 索引是在数据库表的字段上添加的&#xff0c;是为了提高查询效率存在的一种机制。一张表的一个字段可以添加一个索引&#xff0c;当然多个字段联合起来也可以添加索引&#xff0c;索引相当于一本书的目录&#xf…

Spring Boot 3 步完成日志脱敏,简单实用!

在我们写代码的时候&#xff0c;会书写许多日志代码&#xff0c;但是有些敏感数据是需要进行安全脱敏处理的。 对于日志脱敏的方式有很多&#xff0c;常见的有&#xff1a; 使用conversionRule标签&#xff0c;继承MessageConverter 书写一个脱敏工具类&#xff0c;在打印日志…

springboot+mybatisplus实现分页

在日常开发中&#xff0c;多记录的列表查询可能会遇到分页处理的场景&#xff0c;在springboot项目中传统是引入mybatis组件进行持久化&#xff0c;然后通过pagehelper组件进行分页实现。下面体验一下在springboot项目中引入mybatisplus组件&#xff0c;通过其自带分页插件实现…

cpu简述--指令集架构

很多初级开发者其实都对cpu了解不多&#xff0c;个人兴趣原因想要了解一下cpu的相关知识&#xff0c;所以开几篇文章记录一下吧。 2002年8月10日,中国科学院计算技术研究所的青年科学家胡伟武带领研制组,研制出我国首枚拥有自主知识产权的通用高性能微处理芯片——“龙芯一…

MindOpt安装配置教程(Windows系统)

1 前言 官网有很多的说明文档、教程&#xff0c;但是可能有些地方&#xff08;这里仅仅补充安装配置部分&#xff0c;其他操作建议自行去官网进行探索&#xff09;不是很详细&#xff0c;踩了一些坑&#xff0c;所以进行了一些总结。 2 下载安装 url&#xff1a;求解器SDK下载…

Nginx基础02:配置文件nginx.conf(Part1)

我们使用Nginx主要是通过其配置文件nginx.conf来实现的。按照一定的规则&#xff0c;编写特定的指令&#xff0c;可以帮助我们实现对Web服务的控制&#xff01;所以&#xff0c;学习Nginx的用法&#xff0c;几乎就是学习nginx.conf&#xff01;如何使用本篇文章本文作为一篇高度…

【博客590】iptables raw表的特殊作用

iptables raw表的特殊作用 1、iptables四表五链&#xff1a; 2、raw表的优先级 从上图中可以看到raw表作用于prerouting和output链&#xff0c;且在这两个链中的几个表中拥有最高优先级&#xff0c;并且是高于连接跟踪的&#xff0c;这个也是raw表用于优化性能的一个重要前提 …

Leetcode链表专题专练-万字总结

文章目录 系列&#xff1a;链表专练 语言&#xff1a;java & go 题目来源&#xff1a;Leetcode 常考点&#xff1a; 单链表 & 双链表 &双指针 思路和参考答案文章目录链表专题总结链表专练链表专题总结 链表是一种通过指针串联在一起的线性结构&#xff0c;每一个…

【计算机网络】传输层协议-------TCP详解

文章目录1. TCP 协议概述2. TCP原理2.1 保持可靠性的机制2.1.1 确认应答2.1.2 超时重传2.1.3 连接管理机制(安全机制)2.1.3.1 三次握手2.1.3.2 四次挥手2.1.4 滑动窗口2.1.5 流量控制2.1.6 拥塞控制2.1.7延时应答2.1.8 捎带应答2.1.9 粘包问题2.1.10 TCP异常2.1.11 TCP vs UDP1…

记录每日LeetCode 112.路径总和 Java实现

题目描述&#xff1a; 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶…

马蜂窝如何利用 APISIX 网关实现微服务架构升级

作者&#xff1a;董红帅&#xff0c;马蜂窝微服务体系建设以及基础服务能力建设专家。 马蜂窝作为旅行社交平台&#xff0c;是数据驱动的新型旅行电商。基于十余年的内容积累&#xff0c;马蜂窝通过 AI 技术与大数据算法&#xff0c;将个性化旅行信息与来自全球各地的旅游产品供…

Water Pamola通过恶意订单对电商发起攻击

自2019年以来&#xff0c;趋势科技的研究人员一直在追踪一个被称为“Water Pamola”的攻击活动。该活动最初通过带有恶意附件的垃圾邮件攻击了日本、澳大利亚和欧洲国家的电子商务在线商店。 但是&#xff0c;自2020年初以来&#xff0c;研究人员注意到Water Pamola的活动发生…

(二十三)Collecttion集合

目录 前言: ①Collecttion集合的体系结构 ②Collecttion集合的遍历方式 方式一:迭代器 方式二:foreach/增强for循环 方式三:Lambda表达式 ③常见数据结构 前言: Collection&#xff1a; 是所有集合的顶级接口,里面规定了集合操作元素的相关功能方法集合与数组一样,用于存储一组…

使用Sa-token实现单点登录

使用Sa-token实现单点登录单点登录需求为何选择Sa-Token简单使用sa-token接口如何保持登录态使用拦截器实现鉴权聊聊Sa-Token的理解聊聊遇到的一些问题单点登录需求 其实一直想写一个单点登录系统&#xff0c;现在的现状是公司内部有非常多项目的&#xff0c;然后每个项目一套登…

数据分析面试题--数理知识点1

目录标题1&#xff0c;python统计一段话每个单词出现的次数2&#xff0c;SQL中如何利用replace函数统计给定重复字段在字符串中的出现频率&#xff1f;3&#xff0c;常见的统计分析方法有哪些&#xff1f;拿到数据如何分析4&#xff0c;参数估计和假设检验的联系和区别5&#x…

网络实验之OSPF路由协议(一)

一、OSPF路由协议简介 开放式最短路径优先&#xff08;Open Shortest Path First&#xff0c;OSPF&#xff09;路由协议是用于网际协议&#xff08;IP&#xff09;网络的链路状态路由协议。该协议使用链路状态路由算法的内部网关协议&#xff08;IGP&#xff09;&#xff0c;在…

NIO笔记

一. NIO 基础 non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以将 buffer 的数据写入 channel&#xff0c;而之前的 st…

SAP ABAP 代码修改自动比较对象版本一致

第一步&#xff0c;找到SE38/SE37代码修改的出口 SMOD中查找 第二步&#xff0c;实施增强 CMOD中添加增强并激活&#xff0c;如下图 第三步&#xff0c;添加代码 如上图两个双击添加并修改代码 ZXSEUU08中与 ZXSEUU01代码一致&#xff0c;如下 *&----------------------…

【年度总结】我的2022年-职业生涯大转折

【年度总结】我的2022年-职业生涯大转折2022总结大厂的苦与乐找工作的焦虑再起启航2023展望持续刷题持续学习捡起博客在漩涡中疯狂挣扎的一年 2022总结 大厂的苦与乐 上半年主要在搞中台&#xff0c;需要对接的其他团队比较多&#xff0c;每天都在对接需求、优化需求。同时还…

Python NumPy 创建数组(ndarray)

前言NumPy&#xff08;Numerical Python的缩写&#xff09;是一个开源的Python科学计算库。使用NumPy&#xff0c;就可以很自然地使用数组和矩阵。NumPy包含很多实用的数学函数&#xff0c;涵盖线性代数运算、傅里叶变换和随机数生成等功能。本文主要介绍使用Python NumPy 创建…