没有Gerling老师的世界好灰暗 战队WriteUp

一、 战队信息

战队名称:没有Gerling老师的世界好灰暗 战队

战队成员:ranfey、Annms_、236233、liangxi

战队排名:66

二、 解题情况

题目名称 解出情况
PHP的后门 解出
CTFer Revenge 解出
解个方程 解出
简单的数学题 解出
ez_model 解出
ez_log 解出
四重加密 解出
多情 解出
小光的答案之书 解出
追光者 解出
调查问卷 解出

三、 解题过程

PHP的后门 解题步骤:

第一步,打开网页,按照网页提示,找到 php 版本为

image-20240301153750711

通过百度可以发现这个漏洞复现的方式

image-20240301154205394

既然这样,执行个 php 代码看看文件目录

$a = scandir('/');
print_r($a);

看这个 flag!

image-20240301154551878

读取出来

$content = file_get_contents('/flag');
echo $content;
image-20240301154705457

CTFer Revenge 解题步骤:

打开文件

image-20240301154856150

不难看出来是顺序完全颠倒了,最后一个字符其实是第一个字符

image-20240301154928609

借助 gpt 编写个脚本

#include <stdio.h>
#include <stdlib.h>

#define CNTL_Z '\\032'
#define SLEN 50

int main(void) {
    char input_file[SLEN];
    char output_file[SLEN];
    char ch;
    FILE *input_fp, *output_fp;
    long int count, last;

    printf("请输入要处理的文件名:");
    scanf("%s", input_file);
    printf("请输入要输出的文件名:");
    scanf("%s", output_file);

    if ((input_fp = fopen(input_file, "rb")) == NULL) {
        printf("无法打开文件...\n");
        exit(1);
    }

    if ((output_fp = fopen(output_file, "w")) == NULL) {
        printf("无法创建输出文件...\n");
        exit(1);
    }

    fseek(input_fp, 0L, SEEK_END);
    last = ftell(input_fp);

    for (count = 1L; count <= last; count++) {
        fseek(input_fp, -count, SEEK_END);
        ch = getc(input_fp);
        if (ch != CNTL_Z && ch != '\\r') {
            putc(ch, output_fp);
        }
    }

    fclose(input_fp);
    fclose(output_fp);

    printf("已将文件内容逆序输出到 %s 中。\n", output_file);
    return 0;
}

很好,颠倒过来了

image-20240301155227373

然后就是提取中间的十六进制,然后编码文件了

image-20240301155442024

保存文件是个压缩包,看来要破密码了
image-20240301155602683

出来了

image-20240301155719845

于是肉眼法观察 flag:qsnctf{b414e3e3a6449ddba0997db259203eb7}

image-20240301155758391

解个方程 解题步骤:

打开文件,可以看到这个

image-20240301155930401

先用工具

image-20240301160830670

得出d然后提交网页

image-20240301160923909

ez_model 解题步骤:

看来是个 pth 文件,py 打开发现报错,显示有不属于文件的key, flag 和 hint ,分别读取出来

image-20240301161301922
import torch

try:
    state_dict = torch.load('C:\\Users\\13128\\Desktop\\CTF题目\\新建文件夹 (2)\\easy.pth')
    flag_content = state_dict.get('hint', None)
    #修改为 flag 再跑一遍
except Exception as e:
    print(f"An error occurred: {e}")
    flag_content = None

print(flag_content)

出来了

image-20240301161846809

似乎是 ASCII 码,转一下得到

"LidUJ3fQM2FVJoxpDwLvDyF3DwpPdwxOEgbQJoxnEgdnJgnojoZ5mF"
"ZzYyXxAaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWw0123456789+/"

似乎是 base64,软件跑一下

image-20240301162017589

出来了!

ez_log 解题步骤:

分析代码可以发现,代码主要是计算 c = g^m mod p 的式子(下图重开容器截图,数据变了)

image-20240301162619392

那么反过来,计算下面就出来 m 了

image-20240301162728853
from sympy.ntheory import discrete_log
from Crypto.Util.number import *
# 你的数值
p = 3006156660704242356836102321001016782090189571028526298055526061772989406357037170723984497344618257575827271367883545096587962708266010793826346841303043716776726799898939374985320242033037
g = 3
c = 1392602158869026314666679989927718604969994655787472626891661327580773425826468932322386070980911978754789339111419162187352698809860445725988800818939096705603695222969251848464355648589702

m = discrete_log(p, c, g)
print(m)
m = long_to_bytes(m)
print(m)

得出来

image-20240301163307862 image-20240301163345599

四重加密 解题步骤:

image-20240301223241221

看到下面的 **OFZW4Y3UMY======** 像是 base32

image-20240301223843110

压缩包密码出来了

打开

image-20240301223925304

先转个编码

image-20240301224135657

看着像维吉尼亚,解码

image-20240301224337281

看着还是一层加密,先盲猜个凯撒密码

image-20240301224654649

出来了!

多情 解题步骤:

一、拿到压缩包

img

发现里面有两个文件,一是png图片,二是一个压缩包,压缩包打开后后发现内有多个txt文件,根据名称猜测是要对这些文本内容进行排序组合,得到flag

img

其实这里走了不少弯路,一开始没发现图片有什么作用,在一通乱序排列组合后也没得出结果····

所以不得不重新回到图片上来,重新看文件头和尾巴有没有问题

img

惊奇的发现有两对文件头尾

遂拆出第二张png

img

到这里又华丽丽的卡住了,尝试了一通宽高爆破CRC验证之类的操作后也没得出结果,故猜测会不会跟这两句诗句的平仄有关,若设平声为0,仄声为1,则得到序列:

img

正好对的上文件中0和1的数量!

遂使用控制台合并txt文件,并用产生unicode转中文解密

img

得到如下字符串:

bv2bnQSNh Lrp5mJcdEbf6H

但是不对·····

只好回到诗句上本身上来看,如果平仄不对的话只好考虑它本身的含义,

只在马蹄下

下?

下?

img

使用pzsolver再次进行宽高爆破,得到完整图片:

img

将996转换为二进制:

img

发现其二进制为1111100100

1和0的数量与文件数也对的上

遂相同操作得到flag:qsnctf{Lrp5mJcdEbbv2bnf6HQSNh}

小光的答案之书 解题步骤:

拿到题目,是一段奇妙小故事外加一张图片,可以提取到的关键词是:“答案之书”“一个英文字母!”“真正的答案,永远都在我们自己心中”以及四个菱形三角形字符

先尝试最有可能的信息,一个英文字母,但在将二十六个字母都爆破一遍之后也没有得到答案。。。

可以排除答案是某一个英文字母的可能了,遂尝试在图形字符和答案之书上下功夫

img

但是也不对,卡了一天后不得不放弃直接在网页上寻找答案,但可以肯定的是密码一定和这些符号有关

尝试检索常用的图形密码,发现了如下博客:

BUUCTF-Crypto-猪圈密码及其变种+银河密码+跳舞的小人_猪圈密码对照表-CSDN博客

img

可以对应解出“life“

img

访问公众号即拿到flag

img

调查问卷 解题步骤:

答题即得到

image-20240301230351097

我超,盒!

image-20240301231348578

追光者 解题步骤:

第一步,下载附件,得到追光者压缩包

第二步,利用7z直接解压,破解伪加密

image-20240302005852618

得到

image-20240302005952233

第三步,观察追光者文件大小不正常,用010打开

发现前面是jpg的文件头

到此处就是文件尾且后接了PK(压缩包头)

image-20240302010027947

将图片尾前面的图片文件删除,得到压缩包

image-20240302010046874

第四步,卡了很久,但是AB和AD应该是关键

hint提示善用查找和数形结合

「数形结合」?想到以前靶场写的一道题隐写在文件里

查找AB和AD看看

认真找出现的奇怪的地方,发现了一大片……

发现图案!

记录下来为iam5thplay

给解压包解密

欸!还是错的(陷入沉思)

image-20240302010126663

image-20240302010213792

第五步,

image-20240302010256807

出题人表示缺少了er

加上er后为iam5thplayer

在修改了密码后解压成功

image-20240302010317201

在光.txt中发现了flag前半部分 为qsnctf{NE73R

image-20240302010441967

第六步,还有一个 看不清的光.zip 加密压缩包

image-20240302010347672

压缩包内有flag.txt的倒写txt.galf

可知道剩下的半截flag在里面

第七步,看到zip内也有 闪.jpg 考虑用明文攻击

   将压缩包外的  闪.jpg也压缩为 闪.zip

image-20240302010602987

image-20240302010614344

得到口令为 G3r1ing!

解压成功

image-20240302010627556

第八步,将文件名反转为flag.txt

得到

image-20240302010638206

第九步,根据刚开始的文件名提示,这个应该也是反转了的

一个个反转回来得到

_G1V3_U1o}

将两段flag拼起来得到

qsnctf{NE73R_G1V3_U1o}

解出!

简单的数学题 解题步骤:

第一步,启动题目环境……

第二步,得到nc challenge.qsnctf.com 30878

可以得知是用nc连接容器

第三步,连接上容器后得到计算题

利用在线计算网站https://zh.numberempire.com/equationsolver.php

逐个解出答案分别为8,9,19

得到flag为qsnctf{a86f2de626ed48d59e5cfdae215d5ed2}

image-20240302001231990

网站的管理员,似乎是个萌新🤔,CTBUer