XSS漏洞:xss-labs靶场通关

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.mzph.cn/news/626250.shtml

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

相关文章

Unity | AudioSource 无声音

Unity | AudioSource 无声音 你是否也会遇到相同的问题&#xff1f;AudioSource没声音&#xff1f; 解决&#xff1a; 注意查看一下几处声音设置&#xff1a;

XS2180四通道,兼容 IEEE 802.3at/af以太网供电 PSE 控制器 V1.0

XS2180 是一个四通道、供电设备&#xff08; PSE &#xff09;电源控制 器&#xff0c;设计用于 IEEE 802.3at/af 兼容 PSE 。器件提供用 电设备&#xff08; PD &#xff09;检测、分级、限流以及负载断开检测。器 件支持自动工作和软件编程。器件还支持最新二事件分…

宁夏银行关键系统基于OceanBase的创新实践

宁夏银行成立于 1998 年&#xff0c;是宁夏第一家“宁”字号地方商业银行&#xff0c;西部地区第一家以省级行政区命名的地方商业银行。2016 年&#xff0c;被中国人民银行评为宁夏地区系统性重要银行。目前&#xff0c;全行设分支机构 97 家&#xff0c;其中总行营业部 1 家&a…

centos7 arm服务器编译安装PaddlePaddle

前言 随着国产服务器发展&#xff0c;部署项目需要用在国产服务器上&#xff0c;官方教程里面很多没有讲解到&#xff0c;安装过程中出现了各种各样的问题&#xff0c;以下是对官方教程的补充&#xff0c;有什么问题&#xff0c;欢迎指正&#xff01; 一、环境准备 gcc: 8.2版…

BootStrap 实现轮播图

Bootstrap中文网 1、下载BootStrap 2、引入相关文件 在下载好的文件夹中找到下面的文件&#xff0c;复制到自己的项目中并引入 <link rel"stylesheet" href"bootstrap/css/bootstrap.min.css" /><script src"bootstrap/js/jquery.min.js…

【数据结构与算法】之数组系列-20240116

这里写目录标题 一、15. 三数之和二、16. 最接近的三数之和三、49. 字母异位词分组四、53. 最大子数组和五、189. 轮转数组六、179. 最大数 一、15. 三数之和 提示 中等 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k…

【教3妹学编程-算法题】3006. 找出数组中的美丽下标 I

3妹&#xff1a;呜呜&#xff0c;烦死了&#xff0c; 脸上长了一个痘 2哥 : 不要在意这些细节嘛&#xff0c;不用管它&#xff0c;过两天自然不就好了。 3妹&#xff1a;切&#xff0c;你不懂&#xff0c;影响这两天的心情哇。 2哥 : 我看你是不急着找工作了啊&#xff0c; 工作…

如何使用服务器?

文章目录 如何使用服务器&#xff1f;一、工具二、第一种方法三、第二种方法四、实例 个人经验 如何使用服务器&#xff1f; 本文详细介绍了如何利用服务器跑模型&#xff0c;具体流程如下&#xff1a; 一、工具 ToDeskPyCharm Professional移动硬盘JetBrains GatewayGit 二…

dp--62. 不同路径/medium 理解度A

62. 不同路径 1、题目2、题目分析3、复杂度最优解代码示例4、抽象与扩展 1、题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中…

免费的域名要不要?

前言 eu.org的免费域名相比于其他免费域名注册服务&#xff0c;eu.org的域名后缀更加独特。同时&#xff0c;eu.org的域名注册也比较简单&#xff0c;只需要填写一些基本信息&#xff0c;就可以获得自己的免费域名。 博客地址 免费的域名要不要&#xff1f;-雪饼前言 eu.org…

Sqoop安全性:确保安全的数据传输

确保数据传输的安全性在大数据处理中至关重要。Sqoop作为一个用于数据传输的工具&#xff0c;也提供了多种安全性措施&#xff0c;以确保数据在传输过程中的机密性和完整性。本文将深入探讨Sqoop的安全性特性&#xff0c;提供详细的示例代码和全面的内容&#xff0c;以帮助大家…

读元宇宙改变一切笔记09_硬件与互操作性(下)

1. 移动互联网的继承者 1.1. 要想让元宇宙成为现实&#xff0c;需要开发新的标准&#xff0c;创建新的基础设施&#xff0c;可能还需要对长期存在的TCP/IP协议进行彻底改革 1.1.1. 采用新的设备和硬件&#xff0c;甚至可能打破技术巨头、独立开发者和终端用户之间的权利平衡 …

CDMP认证与CDGA/CDGP的区别有哪些?

&#x1f451;CDMP是DAMA国际组织的全英文考试 &#x1f308;CDGA和CDGP是DAMA中国主导&#xff0c;考试为中文考试。需要在规定的时间内报名后&#xff0c;参加线下笔试考试。 &#x1f44d;CDGA、CDGP证书和英文版的CDMP证书都是国际通用的&#xff0c;是数据管理领域专业的职…

js等于操作符和全等操作符(== 和 ===)的区别,在什么情况下使用

在JavaScript中&#xff0c;&#xff08;等于操作符&#xff09;和&#xff08;全等操作符&#xff09;都是用来比较两个值是否相等的工具&#xff0c;但它们有一些重要的区别。 会尝试进行类型转换&#xff0c;然后再比较。这意味着它可能会将不同类型的值转换为相同类型&…

【教3妹学编程-算法题】3008. 找出数组中的美丽下标 II

3妹&#xff1a;呜呜&#xff0c;烦死了&#xff0c; 脸上长了一个痘 2哥 : 不要在意这些细节嘛&#xff0c;不用管它&#xff0c;过两天自然不就好了。 3妹&#xff1a;切&#xff0c;你不懂&#xff0c;影响这两天的心情哇。 2哥 : 我看你是不急着找工作了啊&#xff0c; 工作…

爬虫-8-数据存储-mysql

#mysql占空间最小吧&#xff0c;数据存储没问题吧 (//∇//)

【.net core】yisha框架,bootstrap-table组件增加固定列功能

需要引入 bootstrap-table-fixed-columns.css和bootstrap-table-fixed-columns.js文件 文件代码&#xff1a; bootstrap-table-fixed-columns.css样式文件代码 .fixed-table-header-columns, .fixed-table-body-columns {position: absolute;background-color: #fff;displa…

C++系统笔记教程----vscode远程连接ssh

C系统笔记教程 文章目录 C系统笔记教程前言开发环境配置总结 前言 开发环境配置 Ubuntu20.24VScode 如果没有linux系统&#xff0c;但是想用其编译&#xff0c;可以使用ssh远程连接。 首先进入vscode,打开远程连接窗口&#xff08;蓝色的小箭头这&#xff09; 选择连接到主机…

FFmpeg之AVFormat

文章目录 一、概述二、解封装流程三、重要结构体3.1、AVFormatContext3.2、AVInputFormat3.3、AVOutputFormat3.4、AVStream 四、重要函数分析4.1、avformat_alloc_context4.2、avformat_open_input4.2.1、init_input4.2.2、av_probe_input_format2 4.3、avformat_find_stream_…

Linux环境搭建FastDFS文件服务器(附带Nginx安装)

本文主要介绍在linux服务器如何搭建FastDFS文件服务器。大概分为9个步骤&#xff0c;由于内容较为繁琐。下面带你入坑&#xff01; 首先简单介绍一下FastDFS是淘宝资深架构师余庆老师主导开源的一个分布式文件系统&#xff0c;用C语言编写。适应与中小企业&#xff0c;对文件不…