【2023羊城杯CTF初赛】程序猿Quby wp

  小菜鸡第一次当出题人,很新奇的经历,出题过程很折磨,但在出题过程中也学到很多。这道题第一天直到晚上24:00还是1解,一直盯着大屏真的很慌很慌啊啊啊啊,所幸最后还有14解,出题的思路以及解题过程如下,还有很多不足需要慢慢改进,向各位师傅看齐!

程序猿Quby的解题思路

题目信息

题目名类型难度
程序猿QubyMISC中等

知识点

  1. 夏多密码

  2. 加密lsb隐写

  3. 二值矩阵转图片(黑白像素点处理)

  4. deepsound音频隐写

  5. base全家桶解码(base64变表)

解题步骤

  1. 首先拿到题目Qubyquby.png

    img

    对图片进行分析,首先,发现有rar压缩包,于是采用binwalk进行分离

    img

    img

    压缩包被加密,于是开始寻找密码。

    结合题目提示:《死亡之链》;“手表”;“分针秒针坏了”;”齿轮转动“可以联想出是夏多加密

    img

    将时间按序号归类,发现每个序号下时间数目为1、2、3、4不均,类似夏多密码表的规律

    由于题目提示秒针和分针都坏了,所以只关注时针即可,画出时针之后并分别合成一个时钟可以得到:

    img

    按照顺序依次排开:

    对照夏多密码表

    密码学_夏多密码_陋室孤灯。的博客-CSDN博客

    img

    解得密码:

    img

     HAVEANICEDAY

    但是测试后发现并不是压缩包的密码,所以这个密码另有用处

    根据已知有密码的隐写,猜测可能是加密lsb

    所以用cloacked-pixel分析图片,并提取出文件out

    img

     we1c0met0ycbCTF!!!

    打开压缩包

    得到两个excel表格和一个音频文件

    根据提示

    img

    excel文件中应该是音频加密的密码。

    首先第一个文件

    调整字体颜色可以发现有一个二值矩阵,同理,第二个也有:

    img

    两个矩阵大小相同,再根据“OK”的提示猜测要将矩阵合并

    因为只有两个数字在不断重复出现,所以尝试布尔数,将5.53改为1 4.46改为0(另一个矩阵同理)

    并提取出这个01二值矩阵得到1.txt,同理第二个文件得到2.txt

    写个脚本合并两矩阵

     def merge_matrices(submatrix1_file, submatrix2_file, merged_file):
         # 读取子矩阵文件1
         with open(submatrix1_file, 'r') as f1:
             submatrix1_lines = f1.readlines()
     ​
         # 读取子矩阵文件2
         with open(submatrix2_file, 'r') as f2:
             submatrix2_lines = f2.readlines()
     ​
         # 获取子矩阵行数和列数
         rows = len(submatrix1_lines)
         cols = len(submatrix1_lines[0].strip()) + len(submatrix2_lines[0].strip())
     ​
         # 检查子矩阵尺寸是否符合要求
         if cols != 126:
             print("错误:子矩阵尺寸不正确。")
             return
     ​
         # 合并子矩阵
         merged_matrix = []
         for i in range(rows):
             combined_row = submatrix1_lines[i].strip() + submatrix2_lines[i].strip()
             merged_matrix.append(combined_row)
     ​
         # 将合并后的矩阵写入新文件
         with open(merged_file, 'w') as f:
             for row in merged_matrix:
                 f.write(row + '\n')
     ​
         print("合并完成。")
     ​
     # 调用函数并传入文件名
     merge_matrices('test1.txt', 'test2.txt', 'merged_matrix.txt')

    尝试写脚本转为黑白像素点构成图片可以得到:

     import numpy as np
     from PIL import Image
     ​
     def restore_image_from_file(file_path):
         with open(file_path, "r") as file:
             lines = file.readlines()
     ​
         binary_matrix = []
         for line in lines:
             row = [int(value) for value in line.strip()]
             binary_matrix.append(row)
     ​
         height = len(binary_matrix)
         width = len(binary_matrix[0])
     ​
         image = Image.new("L", (width, height))
         pixels = image.load()
     ​
         for y in range(height):
             for x in range(width):
                 if binary_matrix[y][x] == 0:  # 白色像素
                     pixels[x, y] = 255
                 else:  # 黑色像素
                     pixels[x, y] = 0
     ​
         return image
     ​
     # 使用示例
     file_path = "3.txt"  # 二值化矩阵文件路径
     restored_image = restore_image_from_file(file_path)
     restored_image.show()

    运行脚本

    得到密码:

    img

     w0wyoudo4goodj0b

    尝试deepsound隐写提取出压缩包得到Family_bucket.zip:

    两个文件,fl4g.txt有两层编码,base85——>base32全家桶,解密得到

     sQ+3ja02RchXLUFmNSZoYPlr8e/HVqxwfWtd7pnTADK15Evi9kGOMgbuIzyB64CJ

    img

    最后一层是base64,只不过换了表

    将刚刚解出的字符串作为新表替换,将flag.txt中内容作为密文得到

    img

    flag:

     DASCTF{Qu6y_d0_not_lik3_w0rking_4t_all}
  2. wireshark提取文件,学长出了一道交响曲的题目,做了做正好还回顾了一下怎么从wireshark提取文件,之前都是手提好麻烦好麻烦啊啊啊步骤:文件——>导出对象——>选择流

直接提取就可以了

upload.php里面还有一张png,那个可能就要放到010editor里面然后保留png文件头和文件尾中间部分手动提取啦

bv号是bilibili的视频号:直接在b站搜索框搜就可以啦

HINT:BV1wW4y1R7Jv&&FLAG1:@i_n1a_l0v3S_

qubyquby~拜拜咯


 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2022网刃CTF是一场面向信息安全爱好者的竞技赛,旨在测试参与者在网络安全领域的技术水平和解决问题的能力。CTF是Capture The Flag的缩写,意指夺旗赛。比赛中,参与者需要根据给定的情景和任务,通过寻找和利用漏洞获得各种加密标记,即旗帜,以证明攻击并取得成功。 2022网刃CTF为参与者提供了一个良好的平台,帮助他们提升对网络安全的认知和技能,更好地理解网络攻防的原理和方法。参赛者将面对各种类型的题目,例如逆向工程、密码学、Web安全、二进制攻防等,需要通过解决这些题目来获取旗帜。 除了对技术水平的要求,参赛者还需要具备良好的团队协作能力,因为很多题目需要进行合作解决。此外,比赛还会设置一些线下考核,通过面对面交流和互动,增加了比赛的趣味性和挑战性。 参与2022网刃CTF对于从事信息安全相关工作的人来说是一次很好的学习和锻炼机会。通过参与这样的比赛,他们能够不断学习和掌握最新的网络攻防技术,提高自己的技术水平和解决问题的能力。同时,比赛还能够帮助建立更广泛的人脉,与其他安全领域的专家和爱好者交流和讨论,拓宽自己的眼界。 总而言之,2022网刃CTF是一次非常有意义和有益的比赛活动,它能够帮助参与者提升自己在网络安全领域的技术水平和解决问题的能力,并且通过比赛的方式增强团队合作和交流能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值