XSS漏洞:xss-labs靶场通关

news2025/1/12 0:49:17

xss系列往期文章:

初识XSS漏洞-CSDN博客

利用XSS漏洞打cookie-CSDN博客

目录

第一关

第二关

第三关

第四关

第五关

第六关

第七关

第八关

第九关

第十关

第十一关

第十二关

第十三关

第十四关

第十五关

第十六关

第十七关

第十八关

第十九关

第二十关


相信学习过xss的小伙伴们对 xss-labs这个靶场应该已经很熟悉了,再看看下面这张图片是不是记忆又深刻了,也有很多人都对这个靶场写过通关博客,在本篇中,我也会使用练习+学习的方式来通关这个靶场,那么下面我们开始

还没有该靶场的小伙伴直接到github下载:xss 跨站漏洞平台 (github.com)

第一关

进入第一关我们可以看到这里给名为name的参数传入了一个值,那么我们就很容易想到,从这里入手直接尝试传入弹窗代码:

成功弹窗,果然就像那个图片上说的一样,it's easy 

第二关

来到第二关,还是一样可以看到给keyword传入了一个值,那么我们试试第一关的方式直接传入弹窗代码

可以看到这里输入的弹窗代码并没有生效,说明对我们的输入可以做了限制,那就直接开启上帝模式,我来看看后端代码:
 

 原来传入的参数被''和>包裹住了,那么我们闭合双引号和尖括号,然后插入弹窗代码试试看:


成功的弹窗 

第三关

可以看到第三关还是一样有一个我们可控的参数,那么来试试传入弹窗代码

传入了上一关的代码还是没有弹窗,那么来看看后端代码

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
<form action=level3.php method=GET>
<input name=keyword  value='".htmlspecialchars($str)."'>	
<input type=submit name=submit value=搜索 />
</form>
</center>";
?>

这里看到我们输入的值中的< >字符被过滤了,

但是需要注意的是这里虽然看似输入的值都被转义了,但是因为htmlspecialchars后面只有一个参数

并没有对‘做转义处理,所以我们还是可以使用level 2 的方式进行bypass

服务端安全的写法应该是htmlspecialchars($str,ENT_QUOTES)

那么我们来先闭合'然后插入没有那些 < >的on事件构成的弹窗代码试试:

a'> onclick='alert(1)

成功弹窗 

第四关

现在来到了第四关,这次我们就直接来看看后端代码吧,相信前面的方法应该也是无法生效了

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);  //这里将尖括号过滤了
$str3=str_replace("<","",$str2);  //这里将尖括号过滤了
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level4.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>

 这里看起来就只是过滤了<>并没有什么特殊的,那我们尝试闭合"后进行弹窗

哇,没想到这一关竟然如此简单,直接闭合",插入代码,闭合>就成功弹窗了 

第五关

来到了第五关,我们从前端代码中看到首先需要闭合"来逃出限制,这里稳妥起见也不使用< > 来试试进行弹窗

可以看到这里对我们输入的onclick关键字进行了破坏,那么我们再试试onfous

但是很遗憾,这个关键字也被破坏了,我还尝试了双写和大小写绕过,都没有成功

这里我们可以使用a链接+伪协议的方式来进行弹窗

a"><a%20href=javascript:alert(1)>123</a>

第六关

来到了第六关,我们还是从前端代码中看到首先需要闭合"来逃出限制,这里稳妥起见也不使用< > 来试试进行弹窗

这里想试试onclick的,但是很明显它被破坏了

那么再试试a标签

但是还是没有成功,这里的href关键字也被过滤了,无法弹窗,那就难搞咯

这时我在尝试大小写href后再进行弹窗后尽然就成功了

第七关

来到了第六关,我们还是从前端代码中看到首先需要闭合"来逃出限制,这里稳妥起见也不使用< > 来试试进行弹窗,那就先试用最原始的没有<>的代码来进行弹窗

这里就比较残忍了,我们输入的on直接没有了,这就表示所有的事件都无法使用了,不过没关系我们还有a标签,使用a标签试着弹窗

可以看到我输入的javascript只剩下了java了,直接将script过滤掉了,我试着使用大小写和双写绕过。发现这两个都是无法生效的

但是当我去试着双写onclick来饶过限制时居然成功弹窗了

第八关

来到了第八关,这一关看起来是有一点不同的,我直接尝试弹窗,从前端页面中可以看到,传入的代码被插入到了友情链接中,并且href和Javascript关键字都被破坏了

后面我尝试对被破坏的字符串进行了大小写和双写尝试绕过,都以失败告终了

这里我参考了别人的解决方案说是可以进行编码后绕过

现在尝试将javascript这个关键字整个进行编码再尝试绕过:

&#x006a;&#x0061;&#x0076;&#x0061;&#x0073;&#x0063;&#x0072;&#x0069;&#x0070;&#x0074;:alert(1)

这时前端页面显示的a链接中的href已经有了完整的:javascript:alert(1)

现在点击了友情提示按钮就可以成功绕过

第九关

来到了第九关,又是添加一个友情链接,那么直接来吧,使用上一关的代码看看有什么区别

这里并没有显示我插入大代码,这是怎么回事呢?

既然它提示我们输入的url不合法那么我们试着输入一个合法的url看看有什么区别:

呕吼,还真的添加进去了,并且也可以正常点击,那么我们可以利用这一点,把我们编码后的弹窗代码加到正常的http://后面看看是否可以弹窗

确实加入进了,但是点击后却没有弹窗,说明还是不对,也是并没有那样的一个URL,

我试着将http://放到后面给它注释了,看看是否可以添加进入

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;:alert(1) //http://

成功的添加了,并且也顺利的弹窗了 

第十关

我们就顺利的来到了第十关,这里看看前端代码发现有点奇怪

相信对前端比较熟悉的小伙伴已经看出来了这个type十分有九分的不对劲,让type="type"会隐藏输入框,因此我们来给这三个传值来看看他们会有什么反应

可以看到这里的t_sort成功的接到了值,那么我们就直接从这里入手,尝试弹窗

t_sort=a"> onclick="alert(1)" type="text

成功的弹窗 

第十一关

这一关和上一关一样,查看前端代码发现这里有四个可以输入的参数,我们使用同样的方法来看看那个变量可以出入值

然后查看发现还是只有t_sort的值显示出来了,那么不出意外还是要从这里入手了,那么我们首先可以

尝试使用上一关的payload:t_sort=123">%20οnclick="alert(1)"%20type="text"

但是很遗憾,通过检查我们发现传入的双引号都被转义了,那看来这条路走不通了,没有办法我们去查看了

源代码,发现这个h_ref这个像是一个referer,我们可以使用Firefox浏览器的一个扩展插件使用POST给其中尝试传入referer

aaa"type="text" onclick="alert(1)

成功弹窗

注:这里也可以使用burpsuite抓包然后修改referer的值来实现

第十二关

来到12关,这里查看前端页面的代码,发现了一个奇怪的值,看起来像是浏览器的User-Agent值

这次我使用BP来抓包

抓到包后,直接在User-Agent中将type修改为text,让输入框可以看见,后面跟着点击事件触发的弹窗代码

" type="text" onclick="alert(1)

 当然,也可以使用Firefox提供的这个插件进行弹窗

第十三关

来到了13关,先看看前端代码,又是四个变量可以传参,那就还是老办法,来给每个都传入一个值,看哪个会有不同

可以看到这里有两个都不同,不过这个cook有可能会是cookie我们可以使用BP抓包,然后将弹窗代码写在cookie字段后面,看看是否会弹窗

我这里还是使用Firefox的这个插件来试试

成功弹窗

第十四关

现在我们就来到了第14关,这一关看起来又是一个不一样的一关

这里我们先看看前端代码:

可以看到这里使用iframe引入了一个网址

我们尝试访问一下会看到这里面啥也没有

 这里因为找不道头绪,看了看别的博客发现这里需要结合乌云发现的一个漏洞配置使用

注:因为那个网站一直都进不去,因此这一关直接参考别的博主的复现过程

 上传一个含有xss代码的图片来触发xss

将刚才的图片上传上去然后再访问发现触发弹框了

第十五关

现在来到了第15关,这一关好像东西很少,没有什么可以输入的点

 那么来看看后端代码吧:

<?php 
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
?>

这里看起来我们给src传入一个值,然后会将传入的祖父穿作为span标签的class的值使用ng-incliude包含住

ng-include angular js 中的东西,其作用相当于 php include 函数。
那么我们现在来试着给src中传入一个弹窗代码看有什么反应
但是这里传入的值在注释符中,现在我们就先闭合注释符,再传入弹窗代码:
这里还是没有成功,那么我们再分析一下这个ng-include的用法
1 ng-include 指令用于包含外部的 HTML 文件。
2 、包含的内容将作为指定元素的子节点。
3 ng-include 属性的值可以是一个表达式,返回一个文件名。
4 、默认情况下,包含的文件需要包含在同一个域名下。
特别值得注意的几点如下:
1.ng-include, 如果单纯指定地址,必须要加引号
2.ng-include, 加载外部 html script 标签中的内容不执行
3.ng-include, 加载外部 html 中含有 style 标签样式可以识别
了解了该指令的大致用法之后,我们就不得不思考一下,既然这里可以包含 html 文件,那么也就可以包
含之前有过 xss 漏洞的源文件了。比如构造如下
src='level1.php?name=<img src=1 onerror=alert(1)>'

可以看到成功弹窗 

第十六关

现在来到了第十六关,来先看看前端页面的代码

这一关在前端可以得到的信息也很少,可以看到传入了一个值放到了center标签中

那我们试试传入弹窗代码是否可以弹窗

可以看到这里对script关键字和/都进行了编码

那么我们来看看后端代码:

<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","&nbsp;",$str);
$str3=str_replace(" ","&nbsp;",$str2);
$str4=str_replace("/","&nbsp;",$str3);
$str5=str_replace("	","&nbsp;",$str4);
echo "<center>".$str5."</center>";
?>
可以看到在后端代码中 将参数值中的 script 替换成&nbsp 。将参数值中的空格也替换成 &nbsp。将参数值中的/ 符号替换成&nbsp 。
因为这里把空格都编码了,也就意味着我们无法通过空格来将字符分隔进行语义的区分,不过我们还可 以用回车来将它们分开。而且这里将/ 符号也编码了,所以我们需要的是一个不需要闭合的标签,比如之 前所用过的img
这里构造语句如下:
<img
src=”111”
onerror=alert(1)
>
不过这里的回车怎么表示是一个问题,因为就像上面那样提交的话浏览器会将字符中间的多个间隔合并 为一个空格。这里可以用回车的url 编码格式 %0a 来表示。
具体如下:
keyword=<img%0asrc=”111”%0aonerror=alert(1)>

成功弹窗

第十七关

来到了17关可以看到,这里也是很直接的写着成功后,点击进入下一关

再看看前端页面可以发现,这个传入了两个值,分别作为src中的xsf01.swf的变量和值传入

那么想想就知道这里就是可以弹窗的地方了

可以看到我们构造的代码中关键字都被编码了,这里应该就是用 htmlspecialchars() 函数处理过的。
仔细 观察一下发现这个embed 标签就是引入一个 swf 文件到浏览器端,并且它的 src 属性值没有添
加引号所以 不用闭合。
基于这些情况,我在谷歌浏览器重新打开了该地址,页面显示如下
注:因为我这里的插件一直没有加载出来,因此,这里还是借鉴一下别人的
可以看到在中间出现了一个类似于图片的东西。所以这里可以考虑通过事件来触发。
比如此处可以用 onclick事件测试一下
从网页源码中可以看到构造的恶意代码似乎正常插入了,然后点击页面响应中显示该 swf 文件区域
的时候 成功弹窗了。

第十八关

现在来到了倒数第三关。看看前端页面代码吧

看起来就和17关是一模一样的,就是没有了点击下一关那几个字

注:因为我的这个插件还是显示不支持,因此这里还是借鉴别人的

既然没有头绪那么来看看后端代码:

可以看到传递的两个参数值也是出现在了embed标签的src属性值中。

尝试一下上一关的构造:

 成功弹窗

第十九关

现在来到了倒数第三关。看看前端页面代码吧

这里还是插件不支持

第二十关

再看看最后一关

还是插件不支持

 总:最后这两关都是插件不支持,没办法做了,感兴趣的小伙伴可以去看看别的文章

到此xss-labs也算是勉强通关了,后面的文章会对别的xss靶场进行bypass,敬请期待(^▽^)

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

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

相关文章

概率论与数理统计————古典概型、几何概型和条件概率

一、古典概型 特点 &#xff08;1&#xff09;有限性&#xff1a;试验S的样本空间的有限集合 &#xff08;2&#xff09; 等可能性&#xff1a;每个样本点发生的概率是相等的 公式&#xff1a;P&#xff08;A&#xff09; A为随机事件的样本点数&#xff1b;S是样本…

深度学习笔记(四)——使用TF2构建基础网络的常用函数+简单ML分类实现

文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解&#xff0c;如有遗漏或错误&#xff0c;欢迎评论或私信指正。 截图和程序部分引用自北京大学机器学习公开课 TF2基础常用函数 1、张量处理类 强制数据类型转换&#xff1a; a1 tf.constant([1,2,3], dtypetf.floa…

Docker部署Jira、Confluence、Bitbucket、Bamboo、Crowd,Atlassian全家桶

文章目录 省流&#xff1a;注意&#xff1a;1.docker-compose文件2.其他服务都正常启动&#xff0c;唯独Bitbucket不行。日志错误刚启动时候重启后查询分析原因再针对第一点排查看样子是安装的bitbucket和系统环境有冲突问题&#xff1f; 结论&#xff1a; 省流&#xff1a; b…

Flink-SQL——时态表(Temporal Table)

时态表(Temporal Table) 文章目录 时态表(Temporal Table)数据库时态表的实现逻辑时态表的实现原理时态表的查询实现时态表的意义 Flink中的时态表设计初衷产品价格的例子——时态表汇率的例子——普通表 声明版本表声明版本视图声明普通表 一个完整的例子测试数据代码实现测试…

MATLAB - 使用 TOPP-RA 求解器生成带约束条件的时间最优轨迹

系列文章目录 前言 本例演示如何生成满足速度和加速度限制的轨迹。该示例使用了 contopptraj 函数&#xff0c;该函数使用可达性分析 (RA) 求解受约束的时间最优路径参数化 (TOPP) 轨迹。 一、示例背景 本例解决的是 TOPP 问题&#xff0c;这是一个机器人问题&#xff0c;其目…

vue3+vite项目构建时报错npm ERR! code EPERMnpm ERR! syscall mkdir...

vscode终端中输入npm create vitelatest vueviteproject1 -- --vue命令后报错 具体报错如下&#xff1a; PS D:\project> npm create vitelatest vueviteproject1 -- --vue >> npm ERR! code EPERM npm ERR! syscall mkdir npm ERR! path D:\node\node_cache\_cac…

磁盘raid1降级后,mdxxx rota发生变化

背景 虚拟机系统盘vda后端使用宿主机ssd盘lvm组raid1,虚拟机内部查看vda磁盘类型(rota=1):机械硬盘,vda后端raid1降级导致磁盘类型降级:rota 0---->1,vda磁盘类型显示不正确,应该是ssd类型(rota=0); 分析 1.基础 1.1 linux磁盘类型 Rota表示磁盘类型:(1)0,表…

收银系统源码-智慧新零售系统框架

智慧新零售系统是一套线下线上打通的收银系统&#xff0c;主要给门店提供含线下收银、线上小程序商城、ERP进销存、精细化会员管理、丰富营销插件等为一体的智慧行业解决方案。智慧新零售系统有合伙人、代理商、商户、门店、收银员/导购员等角色&#xff0c;每个角色有相应的权…

从物联网到数字孪生:智慧社区的未来之路

一、物联网在智慧社区中的应用与挑战 随着科技的飞速发展&#xff0c;物联网技术已经深入到我们生活的方方面面&#xff0c;尤其在智慧社区的建设中发挥着举足轻重的作用。物联网通过连接各种设备和系统&#xff0c;为社区居民提供了更便捷、高效的生活方式&#xff0c;同时也…

TortoiseGit 2.15.0.0 安装与配置(图文详细教程)

TortoiseGit的安装与配置 TortoiseGit是Tortoise为Git提供的版本可视化工具&#xff0c;简化了记忆Git命令行的过程&#xff0c;将命令行可视化。 确保自己电脑中已经下载好了git 官网下载TortoiseGit Download – TortoiseGit – Windows Shell Interface to Git 选择64-bi…

net8 rdl rdlc ssrs报表设计器表头合并单元格(垂直合并)

报表设计器下载地址 https://www.microsoft.com/zh-cn/download/details.aspx?id53613 或者从vs扩展插件安装 打开报表设计器&#xff0c;插入矩阵表格&#xff08;只有这个才能支持表头单元格合并&#xff09; 在列单元右建&#xff0c;插入行&#xff0c;根据实际需要添加…

【安全策略】前端 JS 安全对抗浏览器调试方法

一、概念解析 1.1 什么是接口加密 如今这个时代&#xff0c;数据已经变得越来越重要&#xff0c;网页和APP是主流的数据载体。而如果获取数据的接口没有设置任何的保护措施&#xff0c;那么数据的安全性将面临极大的威胁。不仅可能造成数据的轻易窃取和篡改&#xff0c;还可能…

LiveGBS流媒体平台GB/T28181功能-基础配置接入控制白名单黑名单配置控制设备安全接入设备单独配置接入密码

LiveGBS基础配置接入控制白名单黑名单配置控制设备安全接入设备单独配置接入密码 1、白名单配置应用场景2、接入控制2.1、白名单2.2、黑名单 3、搭建GB28181视频直播平台 1、白名单配置应用场景 LiveGBS国标流媒体服务&#xff0c;支持白名单配置。 可在设备注册前&#xff0…

TDA4 Linux BSP ,SD卡制作

1 进入官网&#xff1a; Processor SDK Linux Software Developer’s Guide — Processor SDK Linux for J721e Documentation 这个版本需要 Ubuntu 22.04 支持 ~/ti-processor-sdk-linux-adas-j721e-evm-09_01_00_06/board-support/ti-linux-kernel-6.1.46gitAUTOINC5892b80…

Day04

今日任务 24.两两交换链表中的节点19.删除链表的倒数第N个节点 160. 链表相交142.环形链表II 24 两两交换链表中的节点 题目链接&#xff1a;https://leetcode.cn/problems/swap-nodes-in-pairs/description/ 方法一&#xff1a;遍历实现 思路&#xff1a; 代码&#xff…

canvas绘制图片的三种方法(图文示例)

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

C++学习笔记——类继承

目录 一、一个简单的基类 1.1封装性 1.2继承性 1.3虚函数 1.4多态性 二、基类 2.1一个简单的C基类的示例 2.2 Animal是一个基类。 三、继承 3.1概念 3.2is-a关系 3.3多态公有继承 3.4静态联编和动态联编 3.5访问控制 3.6ABC理念 一、一个简单的基类 C中的基类是一…

会声会影2024什么时间发布呢?会声会影2024会有那些新功能

近年来&#xff0c;随着科技的不断进步&#xff0c;各种软件的功能越来越强大&#xff0c;其中最为常用的莫过于视频编辑软件。而会声会影作为一款颇受欢迎的视频编辑软件&#xff0c;备受用户关注。那么&#xff0c;会声会影2024什么时间发布呢&#xff1f; 首先&#xff0c;我…

Mybatis基础---------增删查改

增删改 1、新建工具类用来获取会话对象 import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.apache.ibatis.io.Resources;import java.io.IOExcept…

算法复习——01背包

01背包 DP分析法要素有&#xff1a;集合&#xff0c;属性&#xff0c;状态计算 &#xff08;集合是指只考虑前i个&#xff0c;总体积小于等于j的所有选法&#xff0c;存取的属性是所有选法的最大值&#xff09; 状态方程计算&#xff08;所有选法可以分为2种不同的子集&#x…