xss-labs靶场的搭建和通关(1-18)

xss-labs是一个专门练习xss的靶场

搭建

下载链接:GitHub-xss-labs
(1)下载后直接解压到phpstudy的www目录下,名字改为xss-labs。
(2)打开浏览器,直接进入http://127.0.0.1/xss-labs/,即可访问靶场。
在这里插入图片描述

level-1

在这里插入图片描述
可以看到参数传入name,所以直接在name后参数写上js代码。完美通关。

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

在这里插入图片描述

level-2

在这里插入图片描述
多了一个搜索框,输入上一关的js代码试试看,发现没有什么卵用。应该是代码经过了过滤。
在这里插入图片描述
查看源代码发现内容在value里面,所以我们尝试用>闭合input,构造js代码为:

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

在这里插入图片描述
在这里插入图片描述
完美通关。

level-3

继续输入前两关的代码,都没有用哎。
在这里插入图片描述
查看源代码,发现<>全都被转义了。
在这里插入图片描述
至于为什么被转义,看了半天也看不出来,然后直接看这关的后端代码了。
在这里插入图片描述
网上查了一下htmlspecialchars()函数会将特殊字符进行转义,把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体。
在这里插入图片描述
所以这里就不能用 < >标签了,那怎么办呢,由于它不会对 ’ 进行转义,所以这里可以用事件闭合标签。这里可以用onclick事件,它可以在用户单击按钮时执行js代码。
在这里插入图片描述
所以构造onclick事件代码为:

'οnclick='alert("xss")

记得要用’进行闭合。将代码输入搜索框。还要点击一下搜索框触发onclick事件。完美通关。
在这里插入图片描述
除了onclick以外还可以使用onmouseover,'οnmοuseοver='alert(“xss”),只需要把鼠标放上去就可以了。

level-4

输入第三关的代码发现没用。查看源代码发现要用双引号闭合
在这里插入图片描述
直接把上一关的代码单引号改为双引号闭合,这里不知道为什么"onclick="alert(xss)无法通关,而"onclick="alert(1)就可以
在这里插入图片描述
完成的不错。

level-5

输入第四关的payload,一如既往的没用。看一下前端,发现onclick变成了o_nclick。
在这里插入图片描述

原因也很简单,看一下后端代码,直接把on转换成了o_n,所以什么onclick、onmouseover都没用,也尝试了大小写ON和<script>也还是没用用,肯定是经过了转换。前面几关的方法都不管用那怎么办呢。
在这里插入图片描述
这里可以使用使用a标签href构造超链接,利用javascript伪协议进行绕过。参考xss篇幅-JavaScript伪协议
构造一个超链接代码:

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

在这里插入图片描述
这里出现超链接标签,点击,完美通关。
在这里插入图片描述

level-6

把第五关的payload丢进来,失败,看一下前端。href直接变成了hr_ef。。。。
在这里插入图片描述
一看后端,发现script、on、src、data、href什么的都被转换了。
在这里插入图片描述
尝试了很多方法,发现没有管大小写,直接构造payload:

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

在这里插入图片描述
完成的不错。

level-7

老规矩将上一关payload放进去,发现直接变成了空值,看一下后端就明白了。
在这里插入图片描述
上一关的大小写一样没有用,正确的解法是双写绕过。直接构造payload:

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

在这里插入图片描述
完美通关。

level-8

这关看到了和前面完全不同的东西,看到这个友情链接,有点像href了
在这里插入图片描述
"><a href='javascript:alert(1)'>放进去,没什么用还是被过滤。
在这里插入图片描述
其实这关要用到编码绕过,利用unicode在线编码网站https://www.matools.com/code-convert-unicode
由于这里本身存在<a href=所以只需要编码javascript:alert(1),编码后为&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;
放进去试试看。完美通关
在这里插入图片描述

level-9

直接放第八关payload,没用。看一下后端,不仅有好多过滤,还多了一个strpos()函数,strpos()介绍,说是查找字符串在另一字符串中第一次出现的位置,在这关中就是用来判断有没有http://
在这里插入图片描述
所以构造一个payload为:

javascript:alert('xsshttp://)'

but页面还是没有反应,原因是忘了还有过滤,所以用第八关的思路将关键词javascript部分字符编码一下:

java&#115;&#99;&#114;&#105;&#112;&#116;:alert('xsshttp://')

在这里插入图片描述

level-10

没有输入框了,url上玩一波payload也没什么用

<script>alert(1)</script>

在这里插入图片描述
毫无头绪,看一下后端吧。看到了这些东西。
在这里插入图片描述
可以看到这关是要通关t_sort表单提交数据。而且有一个函数str_replace,不懂得可以看看str_replace()函数介绍,总之告诉我们payload中是不能含有<>的。所以构造一个"onclick="alert(1)放进url中,注意是要用t_sort提交数据:

?keyword=<script>alert(1)</script>&t_sort="οnclick="alert(1)

但好像没有地方点击来触发onclick啊,所以还得把hidden取消掉。
在这里插入图片描述
修改一下payload:

?keyword=<script>alert(1)</script>&t_sort=" type="text" οnclick="alert(1)

发现出来了一个文本框,点击一下,完美通关。
在这里插入图片描述

level-11

第十关后难度就很大了,我们直接查看源码吧。
在这里插入图片描述
这两个地方让人怀疑。先看$str11=$_SERVER['HTTP_REFERER'],HTTP_REFERER是获取http请求中的Referer字段的,也就是链接到当前页面的前一页面。从这里下手。用burp抓个包看看。
在这里插入图片描述
可以看到没有referer的消息,构造一个referer发送过去可以看到被t_ref获取了。
在这里插入图片描述
尝试构造代码:

" οnclick="alert(1)" type="text

在这里插入图片描述
直接在proxy模块数据包中加上referer:" onclick="alert(1)" type="text发送过去,页面出现一个文本框,点击一下,通关。
在这里插入图片描述
再看一下前端,出现了这样的信息
在这里插入图片描述

level-12

直接看源码,这次是$_SERVER['HTTP_USER_AGENT']
在这里插入图片描述
抓个包先。看到UA消息让t_ua获取了。
在这里插入图片描述
直接把UA内容改为" onclick="alert(1)" type="text发送,通关辣!
在这里插入图片描述

level-13

先看源码,有了前两关的经验,一眼就能发现问题,没错就是cookie。
在这里插入图片描述
老规矩先抓包。cookie消息被t_cook接收。这里还多了一个参数user,所以用hackbar和modify headers构造的同学要注意一下。
在这里插入图片描述
我们直接修改cookie为user=" onclick="alert(1)" type="text
在这里插入图片描述

level-14

6,啥都没有。
在这里插入图片描述
看源码吧。只有这点,好像要跳转,可这个网站怎么也打不开。
在这里插入图片描述
F12看了一下网络有一个404的东西,网站跳转不了这关也没法完成。
在这里插入图片描述
网上查了一查,是什么exif xss,有兴趣的同学可以看一下exif xss 复现

level-15

啥都没有。。
在这里插入图片描述
直接看源码
在这里插入图片描述
ng-include是AngularJS的指令,完全没有接触过,有兴趣的可以看看AngularJS ng-include 指令,总之就是类似于include函数,用于包含外部的 HTML文件。还要注意:

1.ng-include,如果单纯指定地址,必须要加引号

2.ng-include,加载外部html,script标签中的内容不执行

3.ng-include,加载外部html中含有style标签样式可以识别

源码中可以发现是通过src传参,还对 < > 进行了过滤,既然类似于包含,那我们就包含一个level1.php,构造payload:

'level1.php?name=<a href="javascript:alert(1)">'

在这里插入图片描述
点一下蓝色的标签,完美通关。
在这里插入图片描述

level-16

url里面写上最简单的xss先试一试。
在这里插入图片描述
发现<script>alert(1)</script>变成了< >alert(1)< >,看一下源码。发现是把script,空格,/,都转换成了&nbsp,&nbsp就是空格字符。
在这里插入图片描述
这里用onerror事件进行绕过

<img src=1 onerror=alert(1)>

这串代码意思就是如果在加载src给的图片时发生错误则执行 js。通过源码看到空格被过滤,那么最常用的就是用回车来代替空格。

<img
src=1
onerror=alert(1)>

回车的url编码为%0A,所以最终payload为:

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

在这里插入图片描述
通关通关。

level-17

看一下url应该是arg01和arg02进行传参。

在这里插入图片描述
试一下onclick事件。
在这里插入图片描述

点一下图片会跳转发现没什么用。换成onmouseover试试。
在这里插入图片描述
鼠标移到图片上,成功通关。

level-18

一片黑。。。而且通关url看到和上一关一样用arg01,arg02传参。
在这里插入图片描述继续用onmouseover事件?arg01= onmouseover&arg02=alert(1),直接就过了???
在这里插入图片描述

level-19/20

url里还是有arg01和arg02传参,继续用上一关的payload。什么都没有。看一下前端,奥原来在双引号里,需要闭合。试了一下也没什么用,原因就是这里依然有htmlspecialchars()函数进行处理,所以无法成功闭合。
在这里插入图片描述
网上查了一下,要用到flash反编译,这方面的知识还是空白,先学习一下,后边再发出来。20关也是一样。有兴趣的同学可以看一下别的大佬的writeup:XSS-labs Level 19 Flash XSS

结语

这次的xsslabs通关耗费了挺多时间,由于本人才学疏浅,难免会有一些错误,希望大家能指正批评,如有疑问,可在下方留言,会第一时间进行回复!
感谢同学愿意花时间阅读这篇文章,希望可以对你有所帮助!

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芝士土包鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值