Web渗透:XSS-反射型存储型

news2025/7/11 12:53:13

跨站脚本攻击(Cross-Site Scripting,XSS)是一种常见的网络安全漏洞,它允许攻击者将恶意脚本注入到网页中,其他用户在浏览这些页面时,可能会执行这些恶意脚本,从而导致各种安全问题,如窃取用户信息、会话劫持等。

产生原因:

XSS漏洞其实就是一个前端漏洞,产生的根本原因是未对用户输入进行充分验证和过滤,导致恶意用户能够将恶意脚本注入到网页中,使其在其他用户浏览页面时执行。

接下来我们来看一个简单的代码案例(pikachu反射型XSS代码):

$html='';
if(isset($_GET['submit'])){
    if(empty($_GET['message'])){
        $html.="<p class='notice'>输入'kobe'试试-_-</p>";
    }else{
        if($_GET['message']=='kobe'){
            $html.="<p class='notice'>愿你和{$_GET['message']}一样,永远年轻,永远热血沸腾!</p><img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/kobe.png' />";
        }else{
            $html.="<p class='notice'>who is {$_GET['message']},i don't care!</p>";
        }
    }
}
--------------------------------------------------------------------------
​
<div id="xssr_main">
 <p class="xssr_title">Which NBA player do you like?</p>
 <form method="get">
 <input class="xssr_in" type="text" maxlength="20" name="message" />
 <input class="xssr_submit" type="submit" name="submit" value="submit" />
</form>
    <?php echo $html;?>
</div>

$html 是一个用来存储输出内容的变量。在表单提交后,根据用户的输入生成不同的反馈消息,并存储在$html 变量中。

此处我将代码分为两个部分,前半部分是根据获取的用户输入进行$html 的赋值,当$_GET['message']获取的数据不为空时,$html变量中的都会带有$_GET['message']获取到的用户的数据。紧接着在后半部分也就是HTML结构部分存在PHP代码块 <?php echo $html; ?> 用来输出根据用户输入生成的消息,这些消息被存储在$html 变量中,能够在当前的网页中直接显示来自客户端输入的数据,因为这段代码没有对用户输入进行任何过滤或转义处理;这就给了恶意用户可乘之机,攻击者可以通过输入恶意的HTML或JavaScript代码来利用这个漏洞,执行未经授权的操作或窃取用户信息。

常见的payload:

1.弹出警告框

<script>alert('XSS');</script>

2.打印到控制台

<script>console.log('XSS');</script>

3.改变页面内容

<script>document.body.innerHTML = 'Hacked!';</script>

4.通过表单字段触发脚本

<input type="text" value="XSS" onfocus="alert('XSS');">

payload有很多,笔者此处只举出四个比较简单常用的。

XSS分类:
①反射型XSS(Reflected XSS)
反射型XSS(Reflected XSS)是跨站脚本攻击的一种类型,通常发生在Web应用程序立即处理并反射回用户输入的情况下,这种攻击的特点是恶意脚本没有存储在服务器上,而是通过一些途径(如URL参数)传递并在用户浏览器中执行,所以不会产生持久性的影响。

此时以pikachu靶场中的xss漏洞页面为例子做个演示:

1.发现一个搜索框,随意输入数据后发现输入的数据会在当前页面中显示。

2.这个时候我模拟恶意用户,可以尝试在搜索框中输入相关的HTML或JavaScript恶意代码进行攻击,随便在上述的payload中选一个。

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

此时页面产生弹窗,攻击成功

②存储型XSS(Stored XSS):
攻击者将恶意脚本存储在服务器端,例如在论坛帖子、评论、用户资料等地方,当其他用户访问时,恶意脚本会从服务器端加载并执行,对用户造成攻击。

以pikachu靶场中的存储下XSS界面为例子进行演示:

1.发现当前页面有一个留言板,这个时候我们随意输入一个数据并进行提交,发现当前留言列表中会显示刚才输入的数据'1'。

2.此时我模拟恶意用户,将恶意代码输入留言板中并提交

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

这个时候留言列表中多了一条留言,但是却没有显示留言内容,原因就是因为我们输入的留言为一段简单的javascript代码,那么此时浏览器引擎就会将该代码进行执行,从而进行弹窗。

这个时候我们可以通过分析源码查看存储型XSS的相关特征:

$html='';
if(array_key_exists("message",$_POST) && $_POST['message']!=null){
    $message=escape($link, $_POST['message']);
    $query="insert into message(content,time) values('$message',now())";   //存入数据库
    $result=execute($link, $query);
    if(mysqli_affected_rows($link)!=1){
        $html.="<p>数据库出现异常,提交失败!</p>";
    }
}

可以看到该存储型XSS是将用户输入的内容与当前事件一起存入数据库中;

 <div id="xsss_main">
  <p class="xsss_title">我是一个留言板:</p>
  <form method="post">
  <textarea class="xsss_in" name="message"></textarea><br />
  <input class="xsss_submit" type="submit" name="submit" value="submit" />
  </form>
  <div id="show_message">
   <br />
   <br />
  <p class="line">留言列表:</p>
   //数据库中读取留言数据在页面中显示
  <?php echo $html;
   $query="select * from message";
   $result=execute($link, $query);
   while($data=mysqli_fetch_assoc($result)){
      echo "<p class='con'>{$data['content']}</p><a href='xss_stored.php?id={$data['id']}'>删除</a>";
   }
    echo $html;
   ?>
​
</div>

接着用户在访问时从数据库中读取相关的留言数据,然后在页面中显示,所以当我们插入恶意代码后,这串代码就会被存放到数据库中,接着每个来访问这个页面的用户都会受到我的攻击语句影响,所以存储型的XSS为持久攻击,危害也更大。

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

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

相关文章

关于STM32上用HID HOST调鼠标数据的解析

一、前言 关于这章主要是基于我前面的那篇文章 链接: 关于怎么用Cubemx生成的USBHID设备实现读取一体的鼠标键盘设备&#xff08;改进版&#xff09; https://blog.csdn.net/qq_29187987/article/details/139535648?spm1001.2014.3001.5501 引用的文章的简介 引用的这篇文…

【文末附gpt升级秘笈】AI音乐大模型崛起:版权归属与创意产业的新挑战

AI音乐大模型崛起&#xff1a;版权归属与创意产业的新挑战 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经深入到社会生活的各个领域&#xff0c;音乐领域也不例外。最近一个月&#xff0c;轮番上线的音乐大模型不仅为普通人打开了音乐创作的大门&…

am62x芯片安全类型确认(HS-SE, HS-FS or GP)

文章目录 芯片安全类型设置启动方式获取串口信息下载脚本运行脚本示例sk-am62x板卡参考芯片安全类型 AM62x 芯片有三个安全级别。 • GP:通用版本 • HS-FS:高安全性 - 现场安全型 • HS-SE:高安全性 - 强制安全型 在SD卡启动文件中,可以查看到, 但板上的芯片,到底是那…

手把手教你挖赏金系列(2)如何挖掘短信验证码漏洞

免责声明 由于传播、利用本公众号所发布的而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人承担。LK安全公众号及原文章作者不为此承担任何责任&#xff0c;一旦造成后果请自行承担&#xff01;如有侵权烦请告知&#xff0c;我们会立即删除并致歉。谢谢&#…

计算机网络 —— 应用层(DHCP)

计算机网络 —— 应用层&#xff08;DHCP&#xff09; 什么是DHCPDHCP工作过程DHCP DISCOVERDHCP OFFERDHCP RQUESTDHCP ACK DHCP租约机制中继代理工作原理功能与优势 我们今天来计网的DHCP&#xff1a; 什么是DHCP DHCP&#xff08;Dynamic Host Configuration Protocol&…

人工智能这么厉害,比如GPT-4,为什么没有看到程序员大量失业?

从ChatGPT第一版发布到现在&#xff0c;还不到一年的时间中&#xff0c;可是它使用的GPT架构已经从3.5版本进化到现在的4.0版本&#xff0c;随之而来的是其能力的极大提升。下面是GPT-4在其官网的介绍中的一句话&#xff1a; GPT-4是OpenAI最先进的系统&#xff0c;可以产生更安…

FlowUs:打造沉浸式协作体验感受

直观的用户体验 从我个人的角度来看&#xff0c;FlowUs的界面设计非常符合现代审美&#xff0c;简洁而不失功能性。每次打开FlowUs&#xff0c;我都能迅速找到我需要的功能&#xff0c;这大大提升了我的工作效率。 实时协作的流畅性 在FlowUs中&#xff0c;我最喜欢的功能之一就…

记录:[android] SSLHandshakeException: Handshake failed 问题;已解决!

1、问题描述&#xff1a;在使用Retrofit2 时在安卓老设备上&#xff08;安卓6.0&#xff09;网络无法请求、安卓 10 、 11 未出现此问题&#xff1f;what? 原因&#xff1a;服务端 TLS 版本过高 2、废话不多说、解决方案A 、添加依赖&#xff1a;implementation org.conscrypt…

[面试题]Kafka

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis[面试题]消息队列[面试题]…

如何才能入手到好的开放式耳机,总结六招耳机亲测好方法

作为一款当代年轻人基本离不开的数码产品&#xff0c;很有理由进入这次618的必买清单&#xff1b;但是如果不是耳机领域或者是数码领域的&#xff0c;对于耳机的参数、数据和使用等都不了解&#xff0c;就很容易造成踩雷&#xff0c;不仅浪费钱&#xff0c;还浪费时间&#xff…

国际版游戏陪练源码电竞系统源码支持Android+IOS+H5

&#x1f3ae;电竞之路的得力助手 一、引言&#xff1a;电竞新纪元&#xff0c;陪练小程序助力成长 在电竞热潮席卷全球的今天&#xff0c;每一个电竞爱好者都渴望在竞技场上脱颖而出。然而&#xff0c;独自一人的游戏之路往往充满了挑战和困难。幸运的是&#xff0c;国际版游…

14:补充-变量作用域-页面加载

试问&#xff1a;在控制台打印person1、person2结果是什么&#xff1f; var person2{name:"张三",age:21}//页面加载完成执行的事件window.onloadfunction(){var person1{name:"李四",age:18}} 打印结果&#xff1a;在控制台中发现person1这个变量不存在 原…

iptables(3)规则管理

简介 上一篇文章中,我们已经介绍了怎样使用iptables命令查看规则,那么这篇文章我们就来介绍一下,怎样管理规则,即对iptables进行”增、删、改”操作。 注意:在进行iptables实验时,请务必在个人的测试机上进行,不要再有任何业务的机器上进行测试。 在进行测试前,为保障…

MAVEN-SNAPSHOT和RELEASE + 打包到远程仓库

一、快照版本SNAPSHOT和发布版本RELEASE区别 快照版本SNAPSHOT和发布版本RELEASE区别-CSDN博客 在使⽤maven过程中&#xff0c;我们在开发阶段经常性的会有很多公共库处于不稳定状态&#xff0c;随时需要修改并发布&#xff0c;可能⼀天就要发布⼀次&#xff0c;遇到bug时&am…

Vue 前后端分离开发:懒人必备的API SDK

在前后端分离的项目中,前后端通过API进行通信和数据交换。随着项目规模的扩大,API的数量可能从几十个增加到几百个。为了简化API的编写和维护,我们可以利用JavaScript的特性,通过动态生成接口方法来实现懒人开发。本文将详细介绍如何统一接口调用方式、抽象和封装接口,并利…

模版与策略模式

一&#xff0c;怎么选择 如果需要固定的执行流程&#xff0c;选模版 如果不需要固定的执行流程&#xff0c;只需要对一个方法做具体抽象&#xff0c;选策略 参考文章&#xff1a; 常用设计模式汇总&#xff0c;告诉你如何学习设计模式 二&#xff0c;常用写法 子类 exten…

天池人脸识别项目复现

1 项目背景 #c 概述 项目的目的 图像分类是整个计算机视觉领域中最基础的任务&#xff0c;也是最重要的任务之⼀&#xff0c;最适合拿来进⾏学习实践。为了让新⼿们能够⼀次性体验⼀个⼯业级别的图像分类任务的完整流程&#xff0c;本次我们选择带领⼤家完成⼀个对图片中⼈脸进…

《计算机组成原理》(学习笔记)(王道)

目录 一、计算机系统概述 *1.1 计算机发展历程 *1.1.1 计算机硬件的发展 *1.1.2 计算机软件的发展 1.2 计算机系统层次结构 1.2.1 计算机系统的组成 1.2.2 计算机硬件的基本组成 冯诺依曼体系结构特点&#xff08;6&#xff09;&#xff1a; 1.2.3 计算机软件的分类 …

RAG 与微调在大模型应用中如何抉择

随着大型语言模型热度的不断升温&#xff0c;越来越多的开发者和企业投身于基于这些大模型的应用程序开发中。然而&#xff0c;面对预训练基座模型未能达到预期的表现时&#xff0c;如何提升应用程序的性能就成为了一个迫在眉睫的问题。我们终将会问自己&#xff1a;为了优化结…

常用的Java日志框架:Log4j、SLF4J和Logback

日志是软件开发中不可或缺的一部分&#xff0c;它有助于记录应用程序的运行状态、调试问题和监控系统。Java中有多个流行的日志框架&#xff0c;如Log4j、SLF4J和Logback。 一、Log4j 1.1 什么是Log4j&#xff1f; Log4j是Apache基金会开发的一个开源日志框架&#xff0c;它…