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;检测、分级、限流以及负载断开检测。器 件支持自动工作和软件编程。器件还支持最新二事件分…

浅学Linux之旅 day2 Linux系统及系统安装介绍

答案在时间&#xff0c;耐心是生活的关键 ——24.1.15 一、Linux系统介绍 林纳斯.托瓦兹在1991年开发了Linux内核&#xff08;开源免费&#xff09; Linux系统组成 Linux内核 系统库 系统程序 Linux内核和Linux发行版 Linux内核 -> 开源免费&#xff0c;林纳斯开发 Linux发行…

宁夏银行关键系统基于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;在下图中…

fgets函数和fputs函数

目录 gets和putsfgets和fputs区别 橙色 gets和puts char *gets(char *str); // 从标准输入 stdin 读取一行&#xff0c;并把它存储在 str 所指向的字符串中。当读取到换行符时&#xff0c;或者到达文件末尾时&#xff0c;它会停止&#xff0c;具体视情况而定。 // 如果成功&a…

牛客网-css继承属性

3.当元素的一个继承属性没有指定值时&#xff0c;则取父元素的同属性的计算值&#xff0c;以下哪些不是 CSS 中的继承属性&#xff1f; A. color B.display C.border-style D.text-align 答案&#xff1a;BC 解析&#xff1a;不可继承&#xff1a;display&#xff0c;mar…

免费的域名要不要?

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

网站优化之favicon.ico

本文于2015年底完成。 背景 某一天在办公室分析产品首页加载速度时&#xff0c;无意中从Chrome浏览器的调试窗口看到浏览器在请求一个名为favicon.ico文件&#xff0c;由于Web系统的根路径下不存在这个文件&#xff0c;Chrome仅报了404访问失败&#xff0c;但当时没有太关注。…

卡码网 16 set集合

判断集合成员 前言 之前我们讲到&#xff0c;哈希表的主要作用是判断给定的整数是否存在于给定的数据中, 哈希表常使用的数据结构有数组、set集合、map映射, 上节课我们学习了数组作为哈希表&#xff0c;这节课我们来学习set集合, 具体包括下列内容 set、unordered_set, mul…

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

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

基于WebFlux的websocket的分组和群发实现

一,分组发送 在WebFlux中实现分组发送数据和群发数据给所有客户端发送&#xff0c;可以借助Sinks.Many来管理消息流&#xff0c;并使用Flux进行订阅和发送消息。以下是一个示例代码&#xff0c;演示如何实现这两个功能&#xff1a; import org.springframework.stereotype.Co…

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

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

Go+快速开始详细指南

Go快速开始 Go编程语言是为工程、STEM教育和数据科学设计的。 对于工程:用儿童能掌握的最简单的语言工作。对于STEM教育:学习一门可以在未来工作中使用的工程语言。对于数据科学:用同一种语言与工程师交流。 安装方法 现在&#xff0c;我们建议您从源代码安装Go。 注意:需…

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

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