XSS-labs(1~16)通关攻略

目录

level1

level2

level3

常用事件

level4

level5

level6

level7

level8

level9

level10

level11

level12

level13

level14

level15​

level16


安装xss-labs靶场,安装压缩包。

level1

xss通关,第一关,我们先来看源码。

可以发现是把url里携带的name参数内容回显到屏幕上。那么第一想法,把name参数改成<script>alert(1)</script> 再来看看会发生什么。

成功写入,那么让我们回页面再试一试。

level2

刚来到第二关。我们就看见了这个条框。

直接输入<script>alert(1)</script> 看看会发生什么。

将内容正常回显,这是为什么,让我们去看页面源码。

从第一处我们可以发现,页面上显示的是被转义的字符,可是我们有能看见。第二处的代码并没有被转义,但是被当成了字符串被输出。那么,我们只需要做到闭合标签,就能顺利通过。

闭合标签,可以看到,成功被独立出来了。第二关页面重试一下,成功,结果如下:

level3

常用事件
1. 点击事件:
    1. onclick:单击事件
    2. ondblclick:双击事件
2. 焦点事件
    1. onblur:失去焦点。
    * 一般用于表单验证
    2. onfocus:元素获得焦点。
​
3. 加载事件:
    1. onload:一张页面或一幅图像完成加载。
​
4. 鼠标事件:
    1. onmousedown  鼠标按钮被按下。
        * 定义方法时,定义一个形参,接受event对象。
        * event对象的button属性可以获取鼠标按钮键被点击了。
    2. onmouseup    鼠标按键被松开。
    3. onmousemove  鼠标被移动。
    4. onmouseover  鼠标移到某元素之上。
    5. onmouseout   鼠标从某元素移开。
5. 键盘事件:
    1. onkeydown    某个键盘按键被按下。
    2. onkeyup      某个键盘按键被松开。
    3. onkeypress   某个键盘按键被按下并松开。
​
6. 选择和改变
    1. onchange 域的内容被改变。
    2. onselect 文本被选中。
​
7. 表单事件:
    1. onsubmit 确认按钮被点击。
        * 可以阻止表单的提交
        * 方法返回false则表单被阻止提交。
    2. onreset  重置按钮被点击。

第三关,老方法,继续注入<script>alert(1)</script>可以看见。

发现,无论是上面的回显,还是文本框上的显示,都被转义了,那么就放弃把分离<script>alert(1)</script>这个方法放弃掉。然后考虑,闭合掉value,然后再给input标签一个事件。这里我选择的 onmousemove 鼠标移动事件。也就是,把参数变成 ' onmousemove='javascript:alert(1) 成功,结果如下:

level4

第四关,输入<script>alert(1)</script>发现回显为scriptalert(1)/script,也就是说尖括号被过滤掉了。

那我们还有第二种方法,输入' onmousemove='javascript:alert(1),去源码看一眼。

是双引号闭合,那我们将代码改为" onmousemove="javascript:alert(1)成功,结果如下。

level5

第一步,先输入<script>alert(1)</script>发现回显为<scr_ipt>alert(1)</script>,所以是把<script>变成了<scr_ipt>

那我们还有第二种方法,输入" onmousemove="javascript:alert(1),去源码看一眼。

onmousemove被替换为o_nmousemove 经过实验,我列出的所有事件都被替换了,那么 我们就闭合标签 创建一个新的标签。"><a href=javascript:alert(1)>test</a>,创建一个新的链接标签 于文本框之后。结果如下:

level6

现在 我们有三种方法 <script>alert(1)</script> " onmousemove="javascript:alert(1) "><a href=javascript:alert(1)>test</a> 取出关键字 <script> onmousemove="javascript:alert(1) href

可以发现,三个现有能用的关键字全被替换了。那么我们可以尝试大小写 看看能不能绕过。输入" ONmouseMove="javascript:alert(1) 发现能成功上传,结果如下:

level7

第七关,先使用<script>alert(1)</script> 进行尝试。

输入之后 发现script被屏蔽掉了,那么我们先停止继续往下尝试,换个思路,既然script会被屏蔽,那么我们可以通过双写方法,绕过验证。输入

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

发现成功,结果如下:

level8

第八关,我们先把所有可能会被处理的内容输入进去,看看那些会被处理,输入

"'><script><sCript><a href=javascript:alert() Onmousemove>

发现所有能用的都被处理掉了,利用href的隐藏属性自动Unicode解码,我们可以插入一段js伪协议 javascript:alert() 利用在线工具进行Unicode编码后得到,在线Unicode编码解码

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;

发现成功,结果如下:

level9

第九关,老方法,继续输入常用数据,看看那些会被处理,输入

发现所有的都被处理过,而且双引号也被处理掉了,无法将value闭合,那么我们只能的思路就只剩下了,想上一关,添加js伪协议

javascript:alert()

,但是我们又发现,在href内,说您的链接不合法?有没有!那就是说明代码会对我们输入的url进行检测,那么我们输入正常url 例如http://www.baidu.com 发现这样能成功输入,说明对http://进行了检测

那么我们就对第八关的

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;

添加一段http://并用注释符注释掉,形成

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;/* http:// */

然后在进行注入,成功。结果如下:

level10

第10关上强度了啊,不用说,尝试输入

"'><script><sCript><a href=javascript:alert() Onmousemove>

所有手段都被禁用了,因为他直接是以字符串形式存在的,但是并没有对我们的大部分关键字进行处理。那我们来审视代码。

<!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>

$str11 = $_GET["t_sort"];

$str22=str_replace(">","",$str11);

$str33=str_replace("<","",$str22);

这三句,说明他从url中去获取了t_sort参数,但是没有获取到,并且对t_sort参数进行了处理,去除了<> 那么我们需要在url中新增一个t_sort参数。先来试试效果。因为<>被过滤了,我们采用增加事件的方式来审视源码。 在url中写入 。

看似成功写入,但是我们需要触发我们的事件,需要调出input第三个框。将type="hidden"改成type="text" input的输入框就会被调出。在进行事件触发。发现成功,结果如下:

level11

第11关跟上一关一样,将input输入框隐藏掉了,

发现这次还是可以接收四个参数,第四个有默认值,发现是referer。而且t_ref的ref也是一个提示。我们先把前三个当作参数输入,看看能否成功注入。

?t_link="'><script><sCript><a href=javascript:alert() Onmousemove>&t_history="'><script><sCript><a href=javascript:alert() Onmousemove>&t_sort="'><script><sCript><a href=javascript:alert() Onmousemove>

将他注入到url中。

发现t_sort好像注入成功了,那就拿它下手!先查看源代码,看看有什么被改变了。

发现 所有能用的思路都被替换了 双引号闭合也闭合不了。然后前两个input也没响应。那么我们可以试试,使用post方式传参。

用post传参也没有反应,那么放弃前三个输入框吧,从第四个入手。我们知道了 value 的内容对应的是referer。那么我们使用burpsuite抓包改变referer的值:

发现屏蔽了 <> 那么我们使用

" onmousemove=javascript:alert() type="text

发现成功 结果如下:

level12

第12关,打开f12,寻找到input标签,发现了第四个input和第11关差不多,只不过这次是UA头。不用犹豫,直接打开burpSuite抓包调试。

User-Agent 改为

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

然后查看源代码:

发现又屏蔽了 <> 那么我们使用

" onmousemove=javascript:alert() type="text

发现成功 结果如下:

level13

第13关,打开f12,直接找到input标签。发现第四关input标签需要的是cookie的值

burpSuite抓包,更改cookie的值,尝试上面的两种方法

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

" onmousemove=javascript:alert() type="text

先进入源代码,查看cookie所需要的值。

call me maybe?分析应该是cookie的元素,使用burpSuite抓包。

找到了call me maybe? 那么我们只需要针对他进行修改。

方法1不中,采用方法2 。输入" onmousemove=javascript:alert() type="text 发现成功,结果如下:

level14

第14关,对不起,不会,望大佬指导

level15

ng-include include要素察觉,像文件包含漏洞。将1.gif包含一同执行,得以让1.gif显现出来,那么我们去包含别的已知文件,如:level1.php

输入 'level1.php' 页面形如

然后按照老规矩,再level1.php的基础上注入。

但发现对 <script> 进行了处理。参考大佬的文章 XSS常见的触发标签 使用

level16

第16关是,我先按照常理,注入

"'><script><sCript><a href=javascript:alert() Onmousemove>

去寻找被处理的地方。

发现所有能用的都被处理了 那么 我们刚学到的新知识,现在就用一下吧,但是发现这一关有一个特别的地方 他好像把空格也实体化了,问题不大 我们可以尝试用回车替代空格。burpSuite抓包,将参数替换为

<img%0Asrc="x"%0Aonerror=alert(1)>

发现成功,结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值