title: 某XSS小游戏
date: 2018-09-30 10:57:35
tags: [XXS]
昨天不知道干嘛,就玩了一下xss,然后就早晨醒来就整理了部分
1.第一关没有过滤,直接弹就好

2.第二关直接alert(jumo)发现不能弹,我们看一下源码

我们需要把”双引号闭合掉 payload如下
<input name=keyword value=""><script>alert(1)</script><"">

3.第三关我们需要闭合单引号,而且<>被过滤掉了

当<>被过滤时我们可以利用时间来进行弹框<u>' onclick=alert(1) ‘</u>

4.第四关和第三关差不多,<>被过滤掉了,只不过需要闭合的单引号’变成了双引号”

5.我们用第四关的payload试一下发现on事件被过滤掉了,script标签也被过滤掉了


我们可以尝试构造链接来触发弹框payload如下
"><a href="javascript:alert('1')">111</a><"

6.第六关我们可以看到href属性被过滤掉了

我们尝试一下大小写绕过发现可以,payload如下
"><sCript>alert("1")</sCript><"

用href属性的payload如下
"><a hRef="javascript:alert('1')">111</a><"

7.输入alert("1")发现script过滤掉了,用href和on事件发现也过滤掉了,然后测试用大小写绕过未果


用双写发现可以绕过

8.我们测试构造这样的payload
<a href="javascript:alert('1')">111</a>

我们发现javascript被替换为javascr_ipt,且大小写绕过不行(大写被转换为小写了),我们用编码来绕过,javascript:alert(1)经过Unicode编码得到payload
javascript:alert(1)

看了别人的做法发现在被过滤的关键词中间插个tab符,payload
javas%09cript:alert('1')
9.第九关用payload会报错"您的链接不合法?有没有!"链接不合法,然后看了一下源码,源码中有个strpos()函数,查找字符串”http://“在str7(传入的keyword经过处理替换后得到str7)中第一次出现的位置,也就是只要url中出现http://那么就可以绕过,如果url中没有匹配到http://则链接不合法

我们在alert中写http://来进行绕过,payload为
javas%09cript:alert('http://')

10.呃,跳到第十题之后发现keyword不能用没有xss输出点,看一下源码,发现三个hidden的input,经过测试发现第三个参数可以xss,即t_sort可以进行xss

我们在t_sort处进行xss,发现<>被过滤了,然后我用了on事件去构造payload,然后修改hidden属性,去点击input框成功xss

一些trick:
- ip可以用10制或16进制表示
- 过滤" . ",用with语句:with(a){ …… } =>类似 if 语句,
- 过滤" , ",用换行
- HTML实体编码中," ; "可以去掉
- 利用拼接一个eval函数执行代码,例如"a"+eval("alert(1)")
- ip可以用10制或16进制表示
只写到了第十关,还没有写完,和朋友约好的饭,现在要出门了,后面的有时间在写
网友评论