网络安全 DVWA通关指南 DVWA Reflected Cross Site Scripting (反射型 XSS)

news2024/9/25 13:20:10

DVWA Reflected Cross Site Scripting (反射型 XSS)


文章目录

  • DVWA Reflected Cross Site Scripting (反射型 XSS)
    • XSS跨站原理
      • 反射型
    • Low
    • Medium
    • High
    • Impossible


参考文献

  • WEB 安全靶场通关指南

XSS跨站原理

当应用程序发送给浏览器的页面中包含用户提交的数据,但没有经过适当验证或转义时,就会导致跨站脚本漏洞。这个“跨”实际上属于浏览器的特性,而不是缺陷;

浏览器同源策略:只有发布Cookie的网站才能读取Cookie。

会造成Cookie窃取、劫持用户Web行为、结合CSRF进行针对性攻击等危害

反射型

出现在搜索栏,用户登录等地方,常用来窃取客户端的Cookie进行钓鱼欺骗。(需要用户去点击)

想要窃取cookie要满足两个条件:

1.用户点击攻击者构造的URL

2.访问被攻击的应用服务(即存在xss的网站)

Low

1、分析网页源代码

<?php

header ("X-XSS-Protection: 0");
//这行代码实际上禁用了浏览器内置的XSS防护机制。现代浏览器通常会有一个XSS过滤器,默认开启,用于检测并阻止某些类型的反射型XSS攻击。将此值设为0意味着告诉浏览器不要进行任何自动的XSS防护。

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

?>
//对用户输入的数据没有进行任何过滤或转义处理

2、输入<script>alert(/XSS/)</script>,弹出一个警告框显示“XSS”,这证明了XSS攻击的成功。

1、<script>alert(/XSS/)</script>

<script> 和 </script> 是HTML中的标签,用于定义JavaScript代码块的开始和结束。
alert() 是JavaScript的一个内置函数,用于显示带有一条消息的对话框。用户必须点击确定按钮才能关闭这个对话框并继续操作页面。

image-20240424173639685

image-20240424173657851

3、解决方案:

  • 对用户输入的数据进行适当的过滤或转义,可以使用PHP的htmlspecialchars()函数来转义特殊字符,确保它们被安全地显示为数据而不是被执行为代码:

    1$safeName = htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
    2$html .= '<pre>Hello ' . $safeName . '</pre>';
    
  • 同时,考虑是否真的需要禁用XSS防护头,除非有充分的理由,否则应保持浏览器的默认防护机制启用。

Medium

1、分析网页源代码

<?php

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

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
	// Get input
	$name = str_replace( '<script>', '', $_GET[ 'name' ] );

	// Feedback for end user
	$html .= "<pre>Hello ${name}</pre>";
}

?>
//str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写)。本例中的作用为将'<script>'替换为''。

2、因为str_replace() 函数区分大小写,可以将<script>中的字符改成大写

<scr<script>ipt>alert(/XSS/)</script>
//双写绕过
<ScrIpt>alert(/XSS/)</scRiPt>
//区分大小写
<script x>alert(/XSS/)</script y>
//绕过<script>

image-20240424181634960

image-20240424181648248

High

1、分析网页源代码

<?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' ] );
// preg_replace 是 PHP 中的一个函数,用于执行正则表达式的搜索和替换操作。
// 正则表达式:/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i
// /<...>/:定义了一个正则表达式的匹配模式,前后尖括号表示匹配任意字符直到遇到后面的字符。
// (.*):点号.表示匹配任意单个字符(除了换行符),后面跟着的*表示前面的模式可以重复零次或多次。因此,(.*?)组合在一起表示匹配任意数量的任意字符,但这里的懒惰量词*?并没有使用,实际是贪婪匹配.*。
// s, c, r, i, p, t:分别匹配这些字母,中间的.和*允许任意字符出现在这些字母之间。
// /i:这是一个修饰符,表示执行不区分大小写的匹配。
    
	// Feedback for end user
	$html .= "<pre>Hello ${name}</pre>";
}

?>
// <script>标签被完全过滤

2、使用其它标签注入 JS 攻击脚本

1、<img src=x onerror=alert(/XSS/)>

<img src=x onerror=alert(1)> 这段代码是一种典型的跨站脚本攻击(XSS)示例,利用了HTML图像标签(<img>)的onerror事件来触发JavaScript代码执行。其工作原理如下:

图像标签(<img>):此标签用于在网页中嵌入图片。正常情况下,src属性会指向一个图像文件的URL。

src=x:这里的src属性被赋值为x,这是一个无效的图像URL。当浏览器尝试根据这个无效的URL加载图片时,自然找不到对应的资源,从而触发错误。

onerror事件:这是HTML元素的一个事件属性,当指定的错误情况发生时(如图像加载失败),会执行紧跟在其后的JavaScript代码。在这个例子中,就是alert(1)。

alert(1):这是一个简单的JavaScript语句,用于弹出一个包含数字1的警告框。在实际的XSS攻击中,这可能被替换为更复杂的恶意代码,用于盗取用户Cookie、重定向用户到恶意站点、执行恶意脚本等。


2、<svg onload=alert(/XSS/)>

<svg onload=alert(/xss/)> 这段代码展示了另一种跨站脚本攻击(XSS)的载体,这次是利用SVG(可缩放矢量图形)元素的onload事件来触发JavaScript代码执行。其工作原理如下:

SVG元素:SVG是一种用于定义矢量图形的XML标记语言,可以直接嵌入到HTML文档中。与普通的HTML元素一样,SVG元素也支持事件处理器,如onload。

onload事件:在SVG中,onload事件会在SVG文档或者图像加载完成后触发。与HTML的<body onload="">类似,它提供了一个时机来执行指定的JavaScript代码。

alert(/xss/):这里使用的JavaScript代码与之前的例子相似,目的是弹出一个警告框显示/xss/。但这里的/xss/实际上是正则表达式字面量,虽然作为alert函数的参数,它会被当作普通字符串显示,这不影响弹出警告框的效果,但表明攻击者可以嵌入更复杂的JavaScript逻辑,不仅仅是简单的字符串。

攻击原理:当这段SVG代码被嵌入到一个网页中,一旦SVG图形加载完成,onload事件就会触发,并执行alert(/xss/), 弹出一个包含/xss/的警告框。实质上,这揭示了网页对用户输入数据处理不当,允许执行恶意脚本的风险。攻击者可以利用这一点,不仅限于弹窗,还可以执行任何JavaScript代码,实现更深层次的攻击,如窃取用户数据、操控页面内容、发起进一步的攻击等。

image-20240425123935752

Impossible

<?php

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Get input
    $name = htmlspecialchars( $_GET[ 'name' ] );

    // Feedback for end user
    $html .= "<pre>Hello ${name}</pre>";
}

// Generate Anti-CSRF token
generateSessionToken();

?>

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

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

相关文章

Linux进阶命令-echodatealias

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 经过上一章Linux日志的讲解&#xff0c;我们对Linux系统自带的日志服务已经有了一些了解。我们接下来将讲解一些进阶命令&am…

自然语言处理系列六十九》搜索引擎项目实战》搜索框架技术选型

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列六十九搜索引擎项目实战》搜索框架技术选型搜索…

大模型结合知识库问答应用第一次实践

大模型结合知识库问答应用第一次实践 这份完整版的大模型 AI 学习资料已经上传CSDN&#xff0c;朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 记录一次用大模型LLM和向量数据库&#xff0c;搭建垂直领域的知识库问答实践。上文已经介绍了文本如…

第151天:红队APT-钓鱼篇邮件钓鱼SPF绕过自建邮件系统SwaksGophish

案例一&#xff1a;邮件钓鱼-前置知识 现在很多大型网站的邮件服务器已经做的很安全了&#xff0c;文中的很多方法感觉已经不适用&#xff0c;学习思路遇到公司自己搭建的邮件服务器可以尝试把 SPF 发件人策略框架&#xff08; Sender Policy Framework &#xff09;电子邮件认…

移植案例与原理 - utils子系统之file文件操作部件

往期知识点记录&#xff1a; 往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 startup子系统之syspara_lite系统属性部件 &#xff08;1&#xff09; startup子系统之syspara_lite系统属性部件 &#xff…

基于ssm+vue+uniapp的电影交流平台小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

海康IPC摄像头通过国标28181方式接入带域名的视频监控接入平台,视频通道无法上传到视频监控平台,导致无法获取视频资源的问题解决

目录 一、问题背景 二、域名介绍 1、域名详解 2、域名与IP的区别 三、解决过程 1、检查设备能力 2、升级摄像头的版本 3、通过域名进行连接 4、在视频监控平台观察接入情况 四、解决结果 一、问题背景 视频监控接入平台部署在内网环境&#xff0c;摄像头在公网或在另一个局…

【Linux C | 终端设备】Linux下 tty、ttyS*、ttyAMA*、console 的区别,以及系统输出重定向(附带代码)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 2024-09-11 …

QT实现TCP/UDP通信

服务器端&#xff1a; 客户端&#xff1a; 服务器&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> #include <QList> #include <QMessageBox> #include <QDebug&…

哈喽GPT-4o,现代程序员提高编码能力的正确打开方式

目录 round 1&#xff1a;图片识别能力ChatGPT4oClaude3.5 Sonnet图片识别能力小结&#xff1a;图片识别能力&#xff0c;ChatGPT4o完胜。 round 2&#xff1a;代码能力ChatGPT4oClaude3.5 Sonnet代码能力小结&#xff1a;代码能力&#xff0c;Claude3.5 Sonnet小胜。 round 3&…

一个人,如何管理上百个污水处理站?

管理上百个污水处理站&#xff0c;无疑是一项复杂而艰巨的任务&#xff0c;它不仅要求管理者具备深厚的专业知识、卓越的组织协调能力&#xff0c;还依赖于先进的技术支持与科学的管理模式。以下几点策略&#xff0c;可为高效管理众多污水处理站提供参考框架&#xff1a; 1. 部…

Unity+LeapMotion2的使用

开始吧 导入步骤1.到官网下载软件并安装2.安装插件3.场景中添加检测管理器4.场景中添加手部模型 更多细节 导入步骤 1.到官网下载软件并安装 地址 重启电脑后连接设备 可以看到连接成功 2.安装插件 &#xff08;也可以看官方教程&#xff09; Project—>PackageManag…

9.9日记录

1.常见排序算法的复杂度 1.快速排序 1.1快速排序为什么快 从名称上就能看出&#xff0c;快速排序在效率方面应该具有一定的优势。尽管快速排序的平均时间复杂度与“归并排序”和“堆排序”相同&#xff0c;但通常快速排序的效率更高&#xff0c;主要有以下原因。 出现最差情况…

DC 板 boot 测 nor 兼容性记录(qspi )

DC 板 boot 测 nor 兼容性记录&#xff08;qspi &#xff09; 软件问题&#xff1a; 1、DC板在跑 qspi时&#xff0c;在跑ddr 初始化部分需要修改以下参数&#xff0c;否则会在fsbl stage1 或者 stage 3 出错。 Board配置选 ad101_v10&#xff1b; 2、由于socket与DC板接触可能…

22. Revit API: 几何对象(三)- Solid操作

一、前言 几何对象中&#xff0c;Face就先跳过了&#xff0c;这里讲讲如何使用 Revit API 中 Solid 操作相关类。 使用SolidUtils&#xff0c;主要是复制和移动。使用GeometryCreationUtilities&#xff0c;生成Solid。使用SolidSolidCutUtils和BooleanOperationsUtils&#…

Python 从入门到实战14(字符串相关操作)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们通过举例学习了字符串进行简单说明。今天继续讨论字符…

斗地主之顺子

题目描述 在斗地主扑克牌游戏中&#xff0c;扑克牌由小到大的顺序为:3,4,5.6,7.8,9,10,J,Q,K,A,2&#xff0c;玩家可以出的扑克牌阵型有:单张、对子、顺子、飞机、炸弹等。 其中顺子的出牌规则为:由至少5张由小到大连续递增的扑克牌组成&#xff0c;且不能包含2。 例如:(3.4.…

【Windows系统工具】dll综合解决工具,解锁专业版功能!

电脑上经常会出现dll文件丢失的情况&#xff0c;那么面对这种情况&#xff0c;小白用户应该如何应对并且解决呢&#xff1f; 这时&#xff0c;不得不提出dll综合解决工具的重要性了。虽然电脑上有很多自带的工具可以使用&#xff0c;但是方法步骤都比较复杂&#xff0c;很多小白…

day4 QT

作业 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), speech(new QTextToSpeech) {ui->setupUi(this);id startTimer(1000); }Widget::~Widget() {delete ui; }void Widget::tim…

从C语言过渡到C++

&#x1f4d4;个人主页&#x1f4da;&#xff1a;秋邱-CSDN博客☀️专属专栏✨&#xff1a;C &#x1f3c5;往期回顾&#x1f3c6;&#xff1a;单链表实现&#xff1a;从理论到代码-CSDN博客&#x1f31f;其他专栏&#x1f31f;&#xff1a;C语言_秋邱的博客-CSDN博客 目录 ​…