basectf

misc

哇!珍德食泥鸭(word xml 隐写)

image-20241014193638249

题目是一个动图

image-20241014193826286

binwalk 可以解压出很多东西

image-20241014193723248

image-20241014193934614

通过打开文件发现里面的 doucment.xml 知道这个压缩包是 docx 文件,改名后进去发现image-20241014195615825

这个图片其实没什么,我们可以发现这个文档特别长,但是往下拉啥都没有,这时候可以全选然后点击清除格式,拉到最后发现 flag

image-20241014195743241

Base

image-20241014200233462

cyberchef 一把梭

image-20241014195832284

Base revenge(base64 隐写 Atbash 编码)

image-20241014203416726

发现是 base64,但是 base64 后没发现任何有价值的信息,只是一段长文本。

image-20241014203305831

扔进翻译软件看了一下没有什么有价值的信息,这时候可以联想到还要个 base 隐写

用脚本跑了一下。

image-20241014203200940

同时下面有个 hint

image-20241014203524013

根据这个 hint 发现这个 hint 是个 Atbash 编码

image-20241014203617312

于是我们可以先对 base 隐写的出来的先 Atbash 解码,再 base64 解码得到 flag

image-20241014203830583

Base?!

随波逐流直接得到

image-20241014203927280

Pickle Init(还没做)(Pickle 反序列化)

Pickle 反序列化 - 枫の Blog (goodapple.top)

和后面 Pickle xxx 都是一类题目,但是文章太长了,抽时间再学一下(

根本进不去啊!

image-20241014211158956

先了解一下 DNS 解析的过程,再了解 dig 命令

DNS 自述:我是如何为域名找到家的 - 陈树义 - 博客园 (cnblogs.com)

dig 命令:帮你记录 DNS 寻址全过程 - 陈树义 - 博客园 (cnblogs.com)

output

倒计时?海报!

靠,眼瞎了都没看出来

海上遇到了鲨鱼(追踪 http 流)

image-20241016234840905

正着看还是反着看呢?(反转二进制数据,文件隐藏)

image-20241017132505572

用 010 打开,像是 JPG 文件逆过来了,于是用 CyberChef 逆过来

image-20241017131935491

注意是按照字节来逆

image-20241017132115109

保存下来图片

image-20241017132154001

再放到 010 里看,利用模板功能发现有个未知的 padding,根据 PK 可以看出是个压缩包

image-20241017132231264

然后我们再用 binwalk 或 foremost 分离出来,解压这个压缩包,得到 flag

image-20241017132413666

人生苦短,我用 python(直接看 python)

直接拿官方的 wp 了(欸嘿)

题目:

import base64
import hashlib

def abort(id):
    print('You failed test %d. Try again!' % id)
    exit(1)

print('Hello, Python!')
flag = input('Enter your flag: ')

if len(flag) != 38:
    abort(1)

if not flag.startswith('BaseCTF{'):
    abort(2)

if flag.find('Mp') != 10: #Mp第一次出现的位置在10位
    abort(3)

if flag[-3:] * 8 != '3x}3x}3x}3x}3x}3x}3x}3x}': #flag的后三位是3x}
    abort(4)

if ord(flag[-1]) != 125: #flag最后一个字符的ASCII码是125,也就是}
    abort(5)

if flag.count('_') // 2 != 2: #flag中_的数量整除2以后结果为2,也就是4个
    abort(6)

if list(map(len, flag.split('_'))) != [14, 2, 6, 4, 8]:#flag按照_分隔后长度依次为14,2,6,4,8
    abort(7)

if flag[12:32:4] != 'lsT_n':
    abort(8)

if '😺'.join([c.upper() for c in flag[:9]]) != 'B😺A😺S😺E😺C😺T😺F😺{😺S':
    abort(9)

if not flag[-11].isnumeric() or int(flag[-11]) ** 5 != 1024:
    abort(10)

if base64.b64encode(flag[-7:-3].encode()) != b'MG1QbA==':
    abort(11)

if flag[::-7].encode().hex() != '7d4372733173':
    abort(12)

if set(flag[12::11]) != {'l', 'r'}:
    abort(13)

if flag[21:27].encode() != bytes([116, 51, 114, 95, 84, 104]):
    abort(14)

if sum(ord(c) * 2024_08_15 ** idx for idx, c in enumerate(flag[17:20])) != 41378751114180610:
    abort(15)

if not all([flag[0].isalpha(), flag[8].islower(), flag[13].isdigit()]):
    abort(16)

if '{whats} {up}'.format(whats=flag[13], up=flag[15]).replace('3', 'bro') != 'bro 1':
    abort(17)

if hashlib.sha1(flag.encode()).hexdigest() != 'e40075055f34f88993f47efb3429bd0e44a7f479':
    abort(18)

print('🎉 You are right!')
import this

这个程序是一个简单的 CTF(Capture The Flag)挑战,要求用户输入一个特定格式的字符串(称为 flag)。程序通过一系列检查来验证输入的 flag 是否符合预期的格式和内容。如果任何一个检查失败,程序会调用abort函数,输出错误信息并退出程序。以下是程序的详细解释:

  1. 导入模块

  2. 定义**abort**函数

  3. 打印欢迎信息并获取用户输入

  4. 一系列检查

    1. 检查 flag 长度是否为 38

    2. 检查 flag 是否以BaseCTF{开头

    3. 检查 flag 的下标为 10 和 11 的字符是否为Mp(下标是从 0 开始的)

    4. 检查 flag 的最后三个字符是否为3x}并重复 8 次

    5. 至此可得BaseCTF{**Mp***********************3x}

    6. 检查 flag 的最后一个字符的 ASCII 值是否为 125(即}

    7. 检查 flag 中_字符的数量是否为 4

    8. 检查 flag 按_分割后的每部分长度是否为[14, 2, 6, 4, 8]

    9. 检查 flag 的第 13 到 32 个字符,每隔 4 个字符是否为lsT_n(Python 用左闭右开区间)

    10. 至此可得BaseCTF{**Mpl*_*s_**T***_***n_*****3x}

    11. 检查 flag 前 9 个字符的大写形式用😺连接是否为B😺A😺S😺E😺C😺T😺F😺{😺S

    12. 检查 flag 倒数第 11 个字符是否为数字且其五次方是否为 1024(如果不是数字,整个表达式一定为假,就不会转为整数计算了,这叫“逻辑短路”;Python 中**\****是乘方,**^**是异或)

    13. 检查 flag 倒数第 7 到第 3 个字符的 Base64 编码是否为MG1QbA==

    14. 至此可得BaseCTF{**Mpl*_*s_**T***_**4n_*0mPl3x}

    15. 检查 flag 每隔 7 个字符倒序后的十六进制编码是否为7d4372733173(开个新文件试一下flag = 'abcdefghijklmnopq'; print(flag[::-7])就知道是最后一个字符,倒数第 8 个字符,……)

    16. 至此可得BaseCTF{*1Mpl*_*s_**T**r_**4n_C0mPl3x}

    17. 检查 flag 从第 13 个字符开始每隔 11 个字符是否为lr

    18. 检查 flag 的第 22 到 27 个字符的 ASCII 编码是否为[116, 51, 114, 95, 84, 104](Python3 中字符串 str(可以用 Unicode 表示的)和字节串 bytes(一列取值是 0~255 的整数)是不一样的,但可以转化)

    19. 至此可得BaseCTF{*1Mpl*_*s_**Tt3r_Th4n_C0mPl3x}

    20. 检查 flag 的第 18 个字符的 ASCII 值乘以 20240815 的 0 次方,第 19 个字符的 ASCII 值乘以 20240815 的 1 次方,第 20 个字符的 ASCII 值乘以 20240815 的 2 次方,加起来是否为 41378751114180610(Python 很适合大数运算)(虽然你可以爆破,但是这里可以写逆运算的,用除以 20240815 的商和余数)

    21. 至此可得BaseCTF{*1Mpl*_*s_BeTt3r_Th4n_C0mPl3x}

    22. 检查 flag 的第 1 个字符是否为字母,第 9 个字符是否为小写字母,第 14 个字符是否为数字(结合上面😺那步)

    23. 检查{whats} {up}格式化后的字符串是否为bro 1

    24. 至此可得BaseCTF{s1Mpl3_1s_BeTt3r_Th4n_C0mPl3x}

    25. 检查 flag 的 SHA1 哈希值是否为e40075055f34f88993f47efb3429bd0e44a7f479

  5. 如果所有检查通过,打印成功信息

  6. 导入**this**模块,输出 Python 之禅

这个程序通过一系列复杂的检查来验证用户输入的 flag 是否符合预期的格式和内容。如果所有检查都通过,用户将看到成功信息并输出 Python 之禅。

你也喜欢圣物吗(伪加密)

老婆!!!

image-20241017134658016

题目给了这俩,那个压缩包

image-20241017134746473

查看压缩包的 ftFlags,不是伪加密

另一张我和我老婆的图片有个 RGB 的 LSB 隐写

image-20241017142126042

用这个 key 打开压缩包,发现一个 fack.zip,根据提示猜测这是伪加密,把 FrFlags 改成偶数看看能不能解

image-20241017143040236

image-20241017143135839

如果使用 Bandizip 等软件可以直接解压了,使用 7zip 等软件则会报错并得到乱码。一般格式正确的压缩包不会出现这种问题,出现这种问题说明格式还有不正确的地方。观察 7zip 给出的信息可以发现问题:

img

明显这个文件已被压缩,但是出题人把“压缩方式”字段改成了 STORED (0) 表示仅存储,我们改回 DEFLATE (8) 表示已压缩,然后就可以用压缩软件正常解压了。

image-20241017143314164

最后这里如果是第一个进行解码发现是错的,真正的答案 txt 文件的最下面

image-20241017143353995

image-20241017143413662

二维码 1-街头小广告(二维码重定向)

image-20241018000144760

一张图片,拖进 ps 里修补一下

image-20241017235730745

image-20241017235824119

用微信直接扫发现是空白的,这里是这个二维码的网址重定向导致进入了一个无用的网站,用 QR Research 可以只查看二维码的信息而不用进入网址

image-20241018000059970

得到 flag

反方向的雪(分离文件,反转二进制数据,SNOW 隐写)

image-20241018235334487

得到一张图片

image-20241018235355492

用 010 打开可以发现最后有一个 unknow padding,看到 KP 可以发现是一个逆序的压缩包

image-20241018235422476

新建一个文件,把这个填充进去,然后逆序一下得到压缩包

image-20241018235653030

然后用 010 打开这个压缩包,发现 The_key_is_n0secr3t 字样,用这个打不开压缩包.

image-20241018235720189

image-20241018235806748

题目提示密码是 6 位,于是就爆破得到密码

image-20241018235931178

发现 flag 文件,打开

image-20241019000019220

image-20241019000028646

但是如果全选会发现端倪,结合题目,猜测是 SNOW 隐写,再加上前面得到的 key,可以得到 flag

image-20241019000056658

image-20241019000134858

黑丝上的 flag(修改 Aplha(透明度)通道后两位)

题目是一个图片(黑丝肉腿,prprprprprprpr)

image-20241019001840821

用 StegSolve 查看可以看到 Alpha plane 0 和 Alpha plane 1 分别有 flag 痕迹

image-20241019002057152

image-20241019002111370

最后,请以后多出这种题,孩子爱做(prprprprpr)

img

海上又遇了鲨鱼(追踪 TCP,压缩包)

image-20241019103615849

image-20241019103605048

追踪一下 TCP 流,发现基本上都是攻击者尝试登录 FTP 服务器的流量包

image-20241019104206009

在第 16 个流里面发现异常,攻击者成功登录进去,并且列出来 FTP 服务器的文件,下载了 flag.zip 文件

image-20241019104311537

FTP 命令 LIST 的响应,向客户端展示当前目录下有哪些文件

image-20241019104725611

客户端通过 RETR 命令下载 flag.zip 文件时,FTP 服务器传输的文件名部分提示客户端即将开始接收文件内容

image-20241019104807625

实际 flag.zip 文件的内容

image-20241019104922922

选择显示为原始数据,并且另存为 zip 文件,结合压缩包 ASCII 码的题目,这个压缩包需要 password,结合前面登录的情景,猜测密码是 FTP 服务器的密码

image-20241019105235318

输入密码,打开压缩包,得到 flag

image-20241019105305261

前辈什么的最喜欢了(图片 base64encode,修复宽高)

image-20241019110427245

得到一个 txt 文件,由 data:image/png;base64 猜测,这是个被 base64 的图片

image-20241019110030955

image-20241019110317972

然后再扔进随波逐流一下, 修复宽高直接出

image-20241019110353497

broken.mp4(修复 mp4 文件)

image-20241019194701110

给了一个破损的 mp4 一个完整的 mp4,这两个是同源的,可以用工具借助完整的 mp4 修复破损的 mp4 文件

image-20241019194742803

image-20241019194832810

image-20241019194839329

看视频就可以得到 flag

image-20241019194854217

这是一个压缩包(python脚本解压)

image-20241021232808974

注释里发现线索

image-20241021232828068

base64一下

image-20241021232845258

可以看到是对称的,所以我们猜测压缩包密码就是这个

import zipfile
zfile=zipfile.ZipFile("这是一个压缩包.zip",'r')

for i in range(33,128):
    for j in range(33,128):
        for k in range(33,128):
            mask="BaseCTF"+chr(i)+chr(j)+chr(k)+chr(k)+chr(j)+chr(i)+"FTCesaB"
            try:
                zfile.extractall(pwd=mask.encode('utf-8'))
                print(mask)
                exit()
            except:
                pass

得到密码为BaseCTF_h11h_FTCesaB

纯鹿人

image-20241021233448576

得到一个docx

image-20241021233535993

把图片拿出来全选一下会看到端倪

image-20241021233637345

得到base64

image-20241021233655192

image-20241021233705725

然后把docx变成zip,解压拿到里面的图片

image-20241021233846597

010里可以看到端倪

image-20241021233859846

binwalk出来得到压缩包,输入密码得到flag

image-20241021233925077

posted @ 2024-10-15 09:22  r_0xy  阅读(161)  评论(0)    收藏  举报