XSS-labs通关记


title: XSS-labs通关记

level1

level1
当前页面输入点为url中name参数,页面中会将参数值的内容和字符长度暂时出来。接下来就先在name参数值上做动作:
源码内容如图,我们可以尝试在“欢迎用户test”处插入<script>alert(1)</script>进行测试:
源码内容
测试通过:
代码被完整植入
在这里插入图片描述

level2

level2
level2中可尝试利用输入点为keyword参数,有两处输出显示位置:
在这里插入图片描述
使用<script>alert(1)</script>进行测试,发现<h2>标签内的<>被实体化编码了,但是<input>标签内的并没有被实体化编码:
在这里插入图片描述
故接下来对input标签下手,构造闭合payload:

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

形成完美的payload闭合:
在这里插入图片描述

在这里插入图片描述

level3

在这里插入图片描述
level3中可尝试利用的输入点同样为keyword参数,有两处输出显示位置。使用和level相同的方法(level2闭合使用的双引号、在level3中为单引号)进行测试,发现<input>标签内的输出也对<>进行了编码:
在这里插入图片描述
所以这里就不适合使用带有<>的payload,构造如下payload:

' onmouseover=javascript:alert(1) '

与原语句形成闭合:
在这里插入图片描述
由于输入输入框输入之后,保留了输入的内容,onmouseover属性也会被保留在input标签中,onmouseover的触发条件是当鼠标移动到input标签上,测试如下:
在这里插入图片描述
#level4
在这里插入图片描述
level4和level3雷同,只是input标签内用于闭合的的引号为"而非level3中的',只需要将level3中payload里面的'换成"即可:" onmouseover=javascript:alert(1) "
在这里插入图片描述
在这里插入图片描述

level5

在这里插入图片描述
看似和level4雷同:
在这里插入图片描述
使用payload" onmouseover=javascript:alert(1) "进行测试,发现<input>标签内onmouseover属性被下划线(_)分割:

在这里插入图片描述
经测试:<script>onclick等均会被分隔,使用大小写混合也没有办法绕过:
在这里插入图片描述
故这里需避免使用

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

在这里插入图片描述
通过构造独立出来一个<a>标签,通过点击可实现测试成功:
在这里插入图片描述

level6

在这里插入图片描述
源码如下:
在这里插入图片描述
level6看似相同于level,首先使用level5的payload对level6进行测试,但是href被分隔开了:
在这里插入图片描述
变换href大小写:"><a hRef="javascript:alert('test')">link</a><",绕过成功:
在这里插入图片描述
在这里插入图片描述

level7

在这里插入图片描述
使用level6的payload测试,发现hrefscript字样被替换为空了:
在这里插入图片描述
尝试双写绕过:

"><a hRhrefef="javascriscriptpt:alert('test')">link</a><"

测试成功:
在这里插入图片描述

level8

在这里插入图片描述
查看源码,有input标签和a标签两个位置可以显示输入的语句:
在这里插入图片描述
首先对第一处尝试测试,使用level5的payload尝试:

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

在这里插入图片描述
payload内的符号均被实体化编码了,并且script字样被下划线分隔开来,接下来对第二处构造payload:

javascript:alert(1)

并且对payload进行unicode编码,构成:

<center><BR><a href="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;">友情链接</a></center>

测试成功:
在这里插入图片描述
在这里插入图片描述

level9

在这里插入图片描述
输入“11111111”内容,源码内显示链接不合法:
在这里插入图片描述
经多次测试发现,带有http://字样的payload才被识别为正常输入:
在这里插入图片描述
推测后端对输入做了检查,只有带http://才合法,因此我们的payload内需要包含http://字样,构造如下payload:

javascript:alert('http://')

但是script关键字还是被分割:
在这里插入图片描述
使用Unicode编码对script编码或其中一个字母编码(这里对c进行编码)后测试:

javas&#99;ript:alert('http://')

测试成功:
在这里插入图片描述

level10

在这里插入图片描述
观察可知keyword参数值会被实体化编码,咋一看除keyword参数外没有其他可利用的输入位置,但是查看源码发现有三个隐藏的输入框:
在这里插入图片描述
分别使用get方式向提交三个输入框的参数:
在这里插入图片描述
发现只有t_sort参数有反应,那么就在这个参数上做工作,构造payload:

" onmouseover=javascript:alert(1) " type="text

测试成功:
在这里插入图片描述
在这里插入图片描述

level11

在这里插入图片描述
查看源码,发现有一个t_ref参数值为跳转的前一跳URL,推测参数值来源于请求包中Referer值,故通过操作Referer值来测试:
在这里插入图片描述
更改原Referer值为payload:

" onmouseover=javascript:alert(1) " type="text

在这里插入图片描述
测试成功通过:

level12

在这里插入图片描述
level12雷同于level11,因为经过分析发现,请求包中User-Agent值可操作:
在这里插入图片描述
构造同level11的payload:

" onmouseover=javascript:alert(1) " type="text

在这里插入图片描述
在这里插入图片描述

level13

在这里插入图片描述
在这里插入图片描述

level14

这一关貌似环境出问题了,调用的链接失效了:
在这里插入图片描述
在这里插入图片描述
放后面再进行研究。

level15

在这里插入图片描述在这里插入图片描述

这里引用了angular.min.js javascript框架。
然后在网上找到了这个框架的包含模块资料,也就是ng-include,类似于文件包含这么一个功能,并且有以下一些特点:
ng-include可以包含一个html文件(但不限于html文件), 但只是加载一个静态页面显示在前端,不会加载里面的js。
使用时要在文件名要用单引号包起来。
ng-include不仅能引进其他文件显示在当前界面,对其的参数提交操作也能显示。
ng-include限制了不能加载自带的js,需要载入后二次触发才可以触发。
构造如下payload:

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

测试成功:
在这里插入图片描述

level16

在这里插入图片描述
提交test<script>alert(1)</script>值作为payload给keyword,发现后台替换了script为空格,并且给实体化编码了,但是尖括号依旧可以使用:
在这里插入图片描述
更换img标签并且使用换行(%0a)来替换空格,构造新的payload:

<img%0asrc=x%0aonerror=alert(1)>

测试成功:
在这里插入图片描述

level17

可以看到 <embed> 标签, 标签定义嵌入的内容,比如插件。这里嵌入了 swf 格式也就是 flash 专用格式。这里直接插入事件payload即可:

%0aonmouseover%3dalert(1)

测试成功:
在这里插入图片描述
在这里插入图片描述

level18


看源码与level17雷同:
在这里插入图片描述
level17payload可用:

 onmouseover=alert(1)

在这里插入图片描述
在这里插入图片描述

level19/level20

两道flash XSS,暂且在能力范围外,改天回头研究。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值