XSS漏洞

XSS(跨站脚本攻击,Cross-Site Scripting)是一种安全漏洞,通常发生在Web应用程序中。XSS漏洞允许攻击者把恶意脚本注入到内容中, 这会在其他用户的浏览器中执行。这种攻击可能导致用户会话被劫持、网站内容被修改、用户敏感信息被窃取等多种安全问题。常见的XSS类型包括:

  1. 存储型XSS:恶意脚本被存储在目标服务器上,比如在数据库中。比如当用户在一个留言板上输入代码,代码被存储下来了,访问该页面的其他用户就会受到影响。
  2. 反射型XSS:恶意脚本通过URL等手段被“反射”到用户的浏览器中,常在带有查询参数的链接中实施。用户点击恶意链接时,会立即执行该脚本。
  3. DOM型XSS:基于文档对象模型(DOM)的变化,在客户端执行的XSS。DOM型XSS攻击不会涉及到服务器端内容改变。

防御XSS攻击的方法包括:

  • 对用户输入进行严格的验证和过滤。
  • 对输出进行编码,确保浏览器不能将其错误地解释为可执行代码。
  • 使用安全的HTTP头,如Content Security Policy(CSP)。

DOM型XSS

low

直接尝试

源码审计

没有任何过滤情况

<?php
//没有保护,什么都没有
# No protections, anything goes
?>

medium

查看源码发现过滤掉了“<script”,当函数匹配到 <script 字符串的时候就会将URL后面的参数修正为 ?default=English

绕过

源码审计

过滤了<script 字段,可以双写绕过,或者大小写绕过

<?php
// 检查是否有输入
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) {
$default = $_GET['default']; // 获取查询参数 'default' 的值并赋给变量 $default # 不允许含有 script 标签
if (stripos ($default, "<script") !== false) {
header ("location: ?default=English"); // 如果检测到 <script> 标签,则重定向到 ?default=English
exit; // 终止脚本执行
}
}
?>

high

这里设置了白名单,如果default的值不为”French”、”English”、”German”、”Spanish”的话就重置URL为:?default=English ,这里只是对 default 的变量进行了过滤

可以考虑后面加 #&

源码审计

首先确保有输入数据,设置了白名单允许的语言,可以利用白名单语言进行绕过

<?php
// 检查是否有输入
if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) { # 白名单允许的语言
switch ($_GET['default']) {
case "French": // 法语
case "English": // 英语
case "German": // 德语
case "Spanish": // 西班牙语
# 合法的语言
break;
default:
header ("location: ?default=English"); // 如果输入的语言不在白名单内,则重定向到 ?default=English
exit; // 终止脚本执行
}
}
?>

impossible

源码审计

将防护移到客户端,更加安全

<?php
# 不需要做任何事情,保护措施在客户端处理
?>

反射型XSS (Reflected)

反射型XSS,顾名思义在于“反射”这个一来一回的过程。反射型XSS的触发有后端的参与,而之所以触发XSS是因为后端解析用户在前端输入的带有XSS性质的脚本或者脚本的data URI编码,后端解析用户输入处理后返回给前端,由浏览器解析这段XSS脚本,触发XSS漏洞。因此如果要避免反射性XSS,则必须需要后端的协调,在后端解析前端的数据时首先做相关的字串检测和转义处理;同时前端同样也许针对用户的数据做excape转义,保证数据源的可靠性

  • 基本原理就是通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特定的代码参数会被HTML解析,执行,如此就可以获取用户的COOIKE,进而盗号登陆。

  • 特点:非持久化 必须用户点击带有特定参数的链接才能引起。

  • XSS反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。

low

并没有任何过滤

源码审计

<?php
header ("X-XSS-Protection: 0"); // 设置 HTTP 头部,关闭 XSS 攻击防护
// 检查是否有输入
// array_key_exists() 函数:判断 $_GET 的值中是否存在 “name” 键名,并且 $_GET[‘name’] 的值是否不为空,满足这些条件,直接输出下面的输出语句。
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// 给最终用户的反馈
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>'; // 输出问候信息,包含用户输入的名称
}
?>

medium

这里过滤了<script标签,这里使用了str_replace函数,它是区分大小写的,因此可以使用大小写绕过

也可以使用双写绕过

源码审计

过滤了

DVWA靶场XSS漏洞通关教程及源码审计的更多相关文章

  1. DVWA XSS (Reflected) 通关教程

    XSS 介绍XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需 ...

  2. DVWA XSS (Stored) 通关教程

    Stored Cross Site Scripting 存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户 ...

  3. PHP简单的长文章分页教程 附源码

    PHP简单的长文章分页教程 附源码.本文将content.txt里的内容分割成3页,这样浏览起来用户体验很好. 根据分页参数ipage,获取对应文章内容 include('page.class.php ...

  4. LIRE教程之源码分析 | LIRE Tutorial of Analysis of the Source Code

    LIRE教程之源码分析 |LIRE Tutorial of Analysis of the Source Code 最近在做地理图像识别和检索的研究,发现了一个很好用的框架LIRE,遂研究了一通.网上 ...

  5. GEF入门实例_总结_01_教程、源码、开发环境准备

    一.前言 最近在学Eclipse插件开发,发现了一个比较好的GEF入门教程,并且按照教程上的操作,一步步实现了一个入门Demo,在此感谢作者的贡献. 好记性不如烂笔头,故决定总结一下这段时间的学习心得 ...

  6. PHP Fuzzing行动——源码审计

    目录: Section 1: 20种PHP源码快速审计方式  Section 2: PHP源码审计自动化( PHP Fuzzer )  风险级别: ■ Low ■ Medium ■ High   在开 ...

  7. DVWA XSS (DOM) 通关教程

    DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容.结构以及样式. DOM型XSS其实是一种特殊类型的反射型XSS,它是 ...

  8. http://src.chromium.org/svn/ 定制chrome浏览器教程及源码

    chromium 官网登不进去,最近在学习chrome插件制作,网上教程很多大多没有源码 其实作为开源软件 官方提供了全部源码地址:http://src.chromium.org/svn/ PRESU ...

  9. 编译TWRP-recovery教程及源码地址

    TWRP这个是一个老外的开源项目,全称Team-Win-Recovery-Project Source:https://github.com/TeamWin/Team-Win-Recovery-Pro ...

  10. 【绝对给力】Android开发免豆资料(教程+工具+源码)地址汇总

    教程下载: [免费]android界面效果全汇总.pdf http://down.51cto.com/data/209179 Android终极开发教程[pdf高清版] http://down.51c ...

随机推荐

  1. 手搓党分享:用Air700E开发板+毫米波雷达,搓一个睡眠监测仪!

    ​ 只能说,看到这个大佬分享的睡眠监测仪,手上的手环瞬间不香了... 用Air700E开发板+毫米波雷达,手搓一个开箱即用的睡眠监测仪,不花冤枉钱! 一.项目原理及硬件制作 毫米波是指频率范围从30- ...

  2. rustlings v6.0 运行时出现 “ You are trying to run Rustlings using the old method before version 6”

    背景 在之前学习 rust 时,使用过一段时间 rustlings 感觉还不错,但是之前的学习只把 rustlings 的题目刷了一半,然后想再从头到尾刷一遍 rustlings 的题目. 在 rus ...

  3. npm : 无法加载文件 D:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本

    升级node和npm之后,npm run dev 启动一个Vue项目,报错如下: npm : 无法加载文件 D:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本. ...

  4. vue-element-admin 左侧的导航栏固定展开

    项目需要把左侧的导航栏固定打开,不关闭我们只需要打开store-modules-app.js文件中,把下面的代码给修改就可以了

  5. python通过实例方法名字的字符串调用方法

    目录 方式1 - 反射 hasattr 方法 判断当前实例中是否有着字符串能映射到的属性或者方法, 一般会在 getattr 之前作为判断防止报错 getattr 方法 获取到当前实例中传入字符串映射 ...

  6. (Redis基础教程之十) 如何在Redis中运行事务

    介绍 Redis是一个开源的内存中键值数据存储.Redis允许您计划一系列命令,然后一个接一个地运行它们,这一过程称为_transaction_.每个事务都被视为不间断且隔离的操作,以确保数据完整性. ...

  7. UML 基础:类图

    这是关于统一建模语言.即UML 里采用的基本图的一系列文章的一部分.在我 先前关于序列图的文章 里,我把重点从 UML 1.4 版,转移到 OMG的采用UML 2.0版草案规范(又称为UML 2).在 ...

  8. Xdebug+Phpstorm远程调试

    开发环境: 本地 Windows10 日常开发使用的环境 装有PHPStorm 远程主机 Linux 服务器 装php-fpm/nginx等所有开发依赖环境 本地可以访问远程主机 但远程主机无法访问本 ...

  9. Blazor 组件库 BootstrapBlazor 中Message组件介绍

    组件介绍 上一篇文章我们介绍了Alert组件,但是实际上Alert组件只能直接把内容加载到页面内,这个做不到当作提示使用. 所以我们还有一个新的组件Message.这个组件的样式几乎与Alert组件一 ...

  10. Python 学习记录 (4)

    Plotly常见可视化方案:以鸢尾花数据为例 简单介绍: Ploty库也有大量统计可视化方案,并且这些可视化方案具有交互化属性. 主要对鸢尾花数据进行处理与可视化. 所展示的结果为交互界面的截图情况, ...