某XSS小游戏


title: 某XSS小游戏
date: 2018-09-30 10:57:35
tags: [XXS]


昨天不知道干嘛,就玩了一下xss,然后就早晨醒来就整理了部分


1.第一关没有过滤,直接弹就好

mark

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

mark

我们需要把”双引号闭合掉 payload如下

<"">
mark

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

mark

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

mark

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

mark

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

mark
mark

我们可以尝试构造链接来触发弹框payload如下

">111<"
mark

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

mark

我们尝试一下大小写绕过发现可以,payload如下

"><"
mark

用href属性的payload如下

">111<"
mark

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

mark
mark

用双写发现可以绕过

mark

8.我们测试构造这样的payload

111
mark

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

javascript:alert(1)
mark

看了别人的做法发现在被过滤的关键词中间插个tab符,payload

javas%09cript:alert('1')

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

mark

我们在alert中写http://来进行绕过,payload为

javas%09cript:alert('http://')
mark

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

mark

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

mark

一些trick:

  1. ip可以用10制或16进制表示
  2. 过滤" . ",用with语句:with(a){ …… } =>类似 if 语句,
  3. 过滤" , ",用换行
  4. HTML实体编码中," ; "可以去掉
  5. 利用拼接一个eval函数执行代码,例如"a"+eval("alert(1)")
  6. ip可以用10制或16进制表示

只写到了第十关,还没有写完,和朋友约好的饭,现在要出门了,后面的有时间在写

你可能感兴趣的:(某XSS小游戏)