CTF攻防世界web新手区2

CTF攻防世界web新手区2

简介

昨天做了前6道题,其实有点仓促,今天把剩下的做完。

WP

image-20210808221541997

  1. simple_php,考察的是PHP的弱类型比较,GET传入参数a=0e1、b=10000c,没有截图。

  2. get_post,分别用get、post方法传入a、b变量得到flag,用hacker bar插件或者burp抓包重放。
    image-20210808221905781

  3. xff_referer,这个其实不会,查阅得知,X-Forwarded-For:简称XFF头,它代表客户端,也就是request的IP;Referer:告诉服务器访问来源,如果referer内容不符合要求,服务器可以拦截或者重定向请求。
    image-20210808223204376

  4. webshell,这个我熟,有好多方法但是原理是一样的,就是可以随意POST一个shell然后执行它,这就是一个webshell一句话木马,这里提供两种:hacker、burp和蚁剑(我最推荐这个,因为简单方便)
    image-20210808224326851

    蚁剑
    image-20210808224512087

    image-20210808224544571

    image-20210808224606066

  5. command_execution,这个ping和waf都是未曾接触过的,命令执行漏洞,查阅资料如下:

    1
    2
    3
    4
    5
    windows或linux下:
    1. command1 && command2 先执行command1,如果为真,再执行command2
    2. command1 | command2 只执行command2
    3. command1 & command2 先执行command2后执行command1
    4. command1 || command2 先执行command1,如果为假,再执行command2

    先试了一下127.0.0.1执行的是ping -c 3 127.0.0.1。构造payload:| find \home flag。知道位置之后直接| cat /home/flag.txt,得到flag。

    image-20210808225821434

    image-20210808225956365

  6. simple_js,JavaScript一直没有去看过,语法都是一知半解,所以先学js,然后代码审计。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <script type="text/javascript">
    function dechiffre(pass_enc){
    var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
    var tab = pass_enc.split(',');
    var tab2 = pass.split(',');
    var i,j,k,l=0,m,n,o,p = "";
    i = 0;
    j = tab.length;
    k = j + (l) + (n=0);
    n = tab2.length;
    for(i = (o=0); i < (k = j = n); i++ )
    {
    o = tab[i-l];
    p += String.fromCharCode((o = tab2[i]));
    if(i == 5)break;
    }
    for(i = (o=0); i < (k = j = n); i++ )
    {
    o = tab[i-l];
    if(i > 5 && i < k-1)
    p += String.fromCharCode((o = tab2[i]));
    }
    p += String.fromCharCode(tab2[17]);
    pass = p;
    return pass;
    }
    String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));

    h = window.prompt('Enter password');
    alert( dechiffre(h) );
    </script>

    几个特色:

    1. js的连等赋值。A=B=C的赋值顺序是:B=C、A=B。
    2. String.fromCharCode((o = tab2[i]));其实是正确的用法,返回一个字符或字符串。显然后面的 String["fromCharCode"]用法是错的。
    3. a=(b=2)式子中a的值是2

    在自己的本地的html文件中,将代码简化,并将pass从FAUX PASSWORD HAHA换成flag的html代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <script type="text/javascript">
    function dechiffre(pass_enc){
    var pass = "\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30";
    var tab2 = pass.split(',');
    var i,j,k,l=0,m,n,o,p = "";
    for(i = 0; i < tab2.length; i++ )
    {
    p += String.fromCharCode( tab2[i]);
    }
    return p;
    }
    h = window.prompt('Enter password');
    alert( dechiffre(h) );
    </script>

    执行过程:

    1. image-20210809161650755
    2. 然后用,分隔开保存在tab2数组。
    3. 循环,将十进制数组转换成flag字符串
    4. 返回这个字符串p

    运行这个文件得到flag:
    image-20210809161925878

image-20210809162022962

总结

  1. X-Forwarded-For: 简称XFF头,它代表客户端,也就是request的IP;

  2. Referer: 告诉服务器访问来源,如果referer内容不符合要求,服务器可以拦截或者重定向请求。

  3. windows或linux下:
    1. command1 && command2 先执行command1,如果为真,再执行command2
    2. command1 | command2 只执行command2
    3. command1 & command2 先执行command2后执行command1
    4. command1 || command2 先执行command1,如果为假,再执行command2
    
  4. js代码审计

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2021 Sung
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信