安全学习之XSS——XSS挑战之旅

今天算是假期学习的第一天吧,回顾了一下暑假的学习内容,觉得有必要在xss和sql注入这里重点加强一下,相应的也包括JS,php,sql语言的跟进学习。

学习过程大致是,看书,看视频,练习,总结。

寒假还有好多事要做,每天的学习尽量提高点效率。少睡觉,少打游戏,想想自己的未来。

XSS这块其实内容很多,花样也很多,可浅可深,目前我打算通过靶场练习一下基本功,就当做玩了。

靶场链接:http://xss.fbisb.com/yx/index.php

在这里插入图片描述

level1

url:http://xss.fbisb.com/yx/level1.php?name=test

分析:参数name的内容是一个注入点,没有任何过滤。

payload:
xss.fbisb.com/yx/level1.php?name=alert(0)

level2

在这里插入图片描述分析:
有一个输入框,查看页面源码后,需要在input元素中,用">将value以及input闭合。
在这里插入图片描述
payload:
在这里插入图片描述

level3

分析:输入level2中的payload,在下图的value中可以看到 " < >都做了转义,因此无法闭合input标签。
在这里插入图片描述我们尝试使用html dom事件,用单引号闭合valu属性值。构造成功后,当元素被点击时会被触发。

payload:’ οnclick='alert(0)
在这里插入图片描述

level4

分析:只有< >做了过滤,使用双引号"闭合引号。
在这里插入图片描述payload:" οnclick="alert(0)
在这里插入图片描述

level5

分析:对某些单词做了处理,可以看到script与onclick加了_使其失效。但是我们发现尖括号没有被过滤,因此可以使用其他方法:先将标签闭合,使用超链接标签a,在href中设置链接为弹窗。
在这里插入图片描述在这里插入图片描述
payload:
在这里插入图片描述

level6

分析:依然对script和on做了处理,且对href也做了处理,我们尝试使用大写绕过。
在这里插入图片描述
payload:
在这里插入图片描述

level7

分析:直接将href,script,on整个单词过滤掉。因此我们可以这样构造:将单词拆分开,分别写在前后位置,如果过滤了中间,那么前后又可以拼接起来。
在这里插入图片描述
payload:
在这里插入图片描述

level8

在这里插入图片描述
分析:用以前的套路尝试一下,发现转义了 " < >,因此不能使用超链接标签a来做。但是我们发现本关多出了一个可以点击的“友情链接”,尝试一下查看页面代码后,发现输入的内容会进入到已有的a标签中。因此我们不需要像以前一样闭合input标签,再添加a标签,我们直接输入javascript:alert(0)。
在这里插入图片描述
查看页面源码后发现script被处理了,修改成大写也不能解决。尝试使用实体编号替换script。转换网址

payload:
ps:不需要全部字母都替换成实体编码。
在这里插入图片描述

level9

分析:这一关不知道咋想出来的,他对链接做了格式要求,检查是否存在http://。
在这里插入图片描述payload:
在这里插入图片描述或是用注释绕过:java&# x73;cript:alert(1)//http://

level10

在这里插入图片描述分析:没有输入框可以作为注入点了,只能从url入手。和第一关不同,参数keyword对输入的"><做了过滤,显然不能利用了。看过页面源码后发现有三个input标签是hidden的,我们尝试利用这三个标签完成注入。与在输入框中输入代码类似,只是在url中需要指定标签name,且需要修改type属性为text使输入框显示出来。

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

level11

分析:尝试上一关的payload,发现" < >被过滤了,只能通过新出现的t_ref来做文章。
在这里插入图片描述尝试之后,发现在url中修改t_ref的内容,不会注入到页面源码中。查了一些资料才知道需要抓包修改文件头。。。他这个网页代码中应该是将t_ref的内容与referer联系了起来,所以在url中直接修改没有效果。

这里需要借助其他工具,我们使用burpsuite抓包,添加一项referer,输入以下payload。这一步骤就相当于之前在url或是在输入框中输入代码一样。
在这里插入图片描述payload:
在这里插入图片描述

level12

分析:查看页面源码后,发现t_ua的内容是客户端用户使用的os以及浏览器信息,可以判断他是http头中的user-agent。与level11一样,抓包后,将其修改成注入代码。
在这里插入图片描述payload:
在这里插入图片描述在这里插入图片描述

level13

分析:查看页面源码后看到有一项为cookie内容,与前两关类似,抓包后修改cookie的内容即可。
在这里插入图片描述
payload:
在这里插入图片描述在这里插入图片描述

level14

说是跟exif xss有关。
http://blog.sina.com.cn/s/blog_722cb9a90102wl2c.html

level15

参考其他博客,angular js中的ng-include问题,类似于php中的Include,用了一些payload,但发现都不行,它对"<>&都做了转义。。

payload:

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

level16

分析:在url中构造,发现script被过滤掉,之前的一些绕过手段都不行,这里可以尝试< img scr=0 οnerrοr=alert(0) >。但是发现空格被转义了,可以用换行\n的ASCII码%0a或者归位键\r的ASCII码%0d代替空格。
在这里插入图片描述payload:

<img%0Asrc=0%0Aοnerrοr=alert(0)>

level17

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

level17.php?arg01= onclick&arg02=alert(0)
或者使用onmouseover。

在这里插入图片描述

level18

与level17思路一样。
在这里插入图片描述

level19

分析:按照前面思路构建不成功,仅从页面源码已经看不出其他注入思路了。
在这里插入图片描述看别人博客说是flash xss,需要反编译swf文件,找到可以传值的位置,最终他们找到了a标签。。
https://blog.csdn.net/u014029795/article/details/103213877

payload:

level19.php?arg01=version&arg02=< a href=“javascript:alert(1)”>123

level20

看到payload的答案,我直接awsl。

总结

我本来也是个小白,刷了几关后也是学到了很多姿势,总结一下这个靶场的一些注入和绕过思路。

ps:在Markdown文本中,好像打不出html中的标签啊。。所以前面的payload都是截的图片。。

pps:由于没有去搞这个靶场的源码,没有在搭在自己的服务器上,所以无法研究后台源码,去深究每一关的构建思想,比如一些过滤。

大体思路就是:寻找注入点,测试查看注入到了页面的哪些位置,根据注入点的结构构造payload。

1.一些基础的payload:

  • < script >alert(0)< /script >
  • < a href=“javascript:alert(1)” >123< /a >
  • οnclick=alert(0)或是οnmοuseοver=alert(0)

2.闭合标签

  • ">或是只使用单双引号。

3.绕过思路

  • 大小写,好像只能在标签或是其元素中尝试,双引号内无影响。
  • 重复写,例如scrscriptipt,前提是它的过滤规则比较简单,只会删除一次。
  • 实体编码
  • 换行键归位键替换空格,用ASCII码来表示

情况1——input标签
如果有输入框,那一般会先在输入框中尝试。最简单的没有任何过滤,只需要闭合input标签即可.
payload:">< script >alert(0)< /script >。

如果对script,onclick之类的标签或是元素做了处理,比如在单词间加一道_,可以尝试大写绕过。如果不行,可以使用标签a,通过href=javascript:alert(0)构造弹窗。
payload:">< a href=“javascript:alert(1)” >123< /a >

如果将整个单词都过滤掉了,可以尝试拆分单词分别加到前后位置。
payload:">< scrscriptipt >alert(0)< /scrscriptipt >

如果对><做了过滤,可以尝试 ” οnclick=”alert(0) 。

如果对双引号做了过滤,可以试一下单引号。

如果对" > < 都做了过滤,目前来说是没招了。

情况2——有输入框以及一个可点击跳转的链接
一般是对输入内容的"><做了过滤,但是输入的内容被注入到了链接中,即a标签中的href内容中。

因此可以直接输入javascript:alert(0)。

如果对某些单词比如script做了处理:scr_ipt,可以尝试使用实体编号替换原字符。

情况3——页面上没有注入点,只能从url入手
查看页面源码,看看可以注入进哪些dom点。

与情况1类似,尝试在url中指定某些参数构造。

如果"><被过滤了,看看可以注入的参数是不是跟http头有关联,如果有的话,可以抓包修改文件头来完成注入。

如果空格被过滤,可以用%0a或是%0d代替空格。

情况4——其他标签
因为html有很多标签,也有很多插件,很多不熟悉的地方都有可能产生xss,这需要我们多去查资料去了解,并且做到举一反三。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章