资讯详情

xctf攻防世界 MISC薪手进阶区

0x01. this_is_flag

如图: 在这里插入图片描述 提示flag最终答案是:flag{th1s_!s_a_d4m0_4la9}

0x02. pdf

进入环境,下载附件,给一个pdf如图所示,我们直接打开文件: 根据经验,图片要么有内容,要么覆盖什么,我们使用Acrobat DC打开,编辑pdf如图所示: 最终的flag为:flag{security_through_obscurity}

0x03. 如来十三掌

进入环境,下载附件,打开后发现是一段乱七八糟的佛语: 其实就是一堆加密的话,使用在线佛曰加密地址:https://www.keyfc.net/bbs/tools/tudoucode.aspx,如图: 得到解密信息,还是很乱,想到如来十三掌,想到ROT13,使用在线ROT13小工具解密:https://www.qqxiuzi.cn/bianma/kaisamima.php,如图:

还是乱,试试base64解码:如图: 最终答案如下:flag{bdscjhbkzmnfrdhbvckijndskvbkjdsab}

0x04. give_you_flag

进入环境,下载附件,发现是一个gif图片,猜测需要提取帧,果断地将图片放入Photoshop,如图:

发现第50帧有一个二维码,但缺乏定位符: 我们把他p上去,如图: 使用手机扫码二维码后,最终结果如下:flag{e7d478cf6b915f50ab1277f78502a2c5}

0x05. stegano

如图: 猜想可能pdf用什么?AcrobatDC编辑,删除页面内容,找到一串字符,如图所示: 发现都是AB两个字符被推测为摩斯电码,使用.代替A,使用-代替B,上代码:

s = 'BABA BBB BA BBA ABA AB B AAB ABAA AB B AA BBB BA AAA BBAABB AABA ABAA AB BBA BBBAAA ABBBB BA AAAB ABBBB AAAAA ABBBB BAAA ABAA AAABB BB AAABB AAAAA AAAAA AAAAB BBA AAABB' res = s.replace('A', '.').replace('B', '-') print(res) 

莫斯编码如下:

-.-. --- -. --. .-. .- - ..- .-.. .- - .. --- -. ... --..-- ..-. .-.. .- --. ---... .---- -. ...- .---- ..... .---- -... .-.. ...-- -- ...-- ..... ..... ....- --. ...-- 

使用在线莫斯电码翻译器http://www.all-tool.cn/Tools/morse/?&rand=b6f9a70b7d48e5f823c9b52c7cbb6af5,如图: 根据题目要求解码并转换大小写,最后flag为:flag{1NV151BL3M3554G3}

0x06. 坚持60s

进入环境,下载附件,如图所示,给出一个jar文件需要电脑提前配置java环境,打开jar文件完成后,上下左右移动图标: 根据做题的经验,其实是需要的jar包中找到flag我们使用文件vscode,并安装java反编译软件decompiler,右键项目jar,选择decompile,如图: 搜索flag,如图所示: 有等号,估计是base64编码,我们试着解码,如图所示: 解码内容如下:DajiDali_JinwanChiji 最终答案如下:flag{DajiDali_JinwanChiji}

0x07. gif

进入环境,下载附件,发现问题是给出的zip压缩包。打开压缩包观察后,发现只有黑白方块,猜测可能是01编码。因此,解决问题的想法是将白色块视为0,黑色块视为1。直接编码:

import os import PIL.Image as Image  # 判断每张图片,如果是白色,记录为0,如果是黑色,记录为1 data = '' filenames = os.listdir(r'C:\Users\Mr.fa\Desktop\gif') filenames.sort(key=lambda x: int(x.split('.')[0]))  # 防止文件名乱序

for filename in filenames:
    path = os.path.join("C:\\Users\\Mr.fa\\Desktop\\gif\\", filename)
    hands_mask = Image.open(path)
    r, g, b = hands_mask.getextrema()
    # 判断图片的色块
    if r[1] == 255 and g[1] == 255 and b[1] == 255:
        data += '0'
    else:
        data += '1'
print(data)


# 将0101代码按照八位一组,对应ASCII码表转成对应的字符
for i in range(0, len(data), 8):
    byte = data[i: i + 8]
    print(chr(int(byte, 2)), end='')

最终答案为:flag{FuN_giF}

0x08. 掀桌子

进入环境,题目没有给附件,给了一串字符串,想必字符串中蕴含着秘密。而且字符串中的信息范围在0-F之间,也就是16进制的信息,猜测转数据对应ASCII码,但是ASCII码范围在0-128之间,因此尝试减去128,再转成字符得到最终的结果。直接上代码:

strings = "c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2"
flag = ''
# 尝试将字符两个一组,再缩小范围
for i in range(0, len(strings), 2):
    hexdata = '0x' + strings[i] + strings[i + 1]
    flag += chr(int(hexdata, 16) - 128)
print(flag)

因此最终答案为:hjzcydjzbjdcjkzkcugisdchjyjsbdfr

0x09. ext3

进入环境,下载附件,题目给出的是一个无后缀文件,题目提示linux的光盘文件,我们在kali系统下进行挂载:

mount f1fc23f5c743425d9e0073887c846d23 /mnt/

如果提示权限不够,请使用sudo。进入到/mnt/文件夹下,打开终端,使用命令查找关键词flag:

find | grep 'flag'

如果提示权限不够,请使用sudo。命令后如图: 找到文件后,打开flag,如图: 对其进行base64解码,如图: 最终答案为:flag{sajbcibzskjjcnbhsbvcjbjszcszbkzj}

0x10. SimpleRAR

进入环境,下载附件,发现题目只给了一个RAR压缩包文件,打开后报错,且只显示了一个txt文件,双击打开后显示没有flag,如图: 提示的错误信息中有某个png图片格式损坏,猜测可能是压缩包文件头校验问题,遂用winhex打开文件,如图: 将如图中的A8 3C 7A 改为A8 3C 74 修改完后,双击压缩文件,打开后一切正常,如图: 尝试进行解压,使用ps打开文件,提示not a png file,猜测可能是文件尾缀是png,但是头有问题,使用winhex查看如图: 发现头是个GIF文件,将文件后缀修改成gif,猜测需要帧分离,因此使用Photoshop进行打开,发现有两个图层: 分别对两个图层进行提取,并使用stegsolve进行分析,发现两个图层都是半张二维码,使用Photoshop进行合成,如图: 使用手机扫一下,得到最终的答案:flag{yanji4n_bu_we1shi}

0x11. base64stego

进入环境,下载附件,题目给出的是一个压缩包,解压发现需要密码,如图: 猜测可能是伪加密,使用winhex打开文件,如图: 我们直接拖到最后,修改伪加密部分,如图: 将09 00 修改为00 00,并保存修改,重新进行解压,发现一切ok啦!!!或者使用小工具ZipCenOp.jar,使用如下命令修复zip文件。(需要安装java环境)

java -jar ZipCenOp.jar r xxx.zip

修复完成后,接着打开txt文档,如图: 其实就是base64的解码工作而已。接着需要了解一下什么是base64编码,附带自己一篇博客Base64编码和解码(手写和调包)

在知道了base64的原理后,解题思路如下:

  1. 依次读取每行,从中提取出隐写位。
    1. 如果最后没有‘=’,说明没有隐写位,跳过。
    2. 如果最后是一个‘=’,说明有两位隐写位,将倒数第二个字符转化为对应的二进制索引,然后取后两位。
    3. 如果最后是两个‘=’,说明有四位隐写位,将倒数第三个字符转化为对应的二进制索引,然后取后四位。
  2. 将每行提取出的隐写位依次连接起来,每8位为一组转换为ASCII字符,最后不足8位的丢弃。 直接上代码:
# base64通过字符定位其编码索引
def base64decode(s):
    table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    for i in range(len(table)):
        if table[i] == s:
            return i


with open(r'C:\Users\Mr.fa\Desktop\stego.txt', 'r') as file:
    lines = file.readlines()
    flag_bin = ''
    for line in lines:
        line = line.replace('\n', '')
        if line[-1] == '=':
        	# 如果是两个等号,说明是倒数第三位是隐写,取倒数第三位编码二进制的后四位
            if line[-2] == '=':
                flag_bin += bin(base64decode(line[-3]))[2:].zfill(4)[-4:]
            # 如果是一个等号,说明是倒数第二位是隐写,取倒数第二位编码二进制的后二位
            else:
                flag_bin += bin(base64decode(line[-2]))[2:].zfill(2)[-2:]

    flag = ''
    # 对隐写的编码进行转码,8位转一个ASCII字符,得到最终答案
    for i in range(0, len(flag_bin), 8):
        flag += chr(int(flag_bin[i: i + 8], 2))
    print(flag)

最终答案为:flag{Base_sixty_four_point_five}

0x12. 功夫再高也怕菜刀

进入环境,下载附件,题目给出了一个pcapng文件,直接扔进kali中进行打开,我们搜索字符flag,如图: 1150编号的流量包包含txt文件和jpg文件,说明有隐藏文件,我们使用binwalk查看一下,如图: 有一个zip压缩包,包含flag.txt文件,我们尝试用foremost分离一下,如图: 嗯,果然是有东西的,但是zip解压是需要解压码的,猜测刚才的jpg有内容。。。追踪1150编号的包,右键追踪流->tcp流,如图: 我们需要知道一个知识点,jpg格式是以:FFD8FF开头,以FFD9结尾的。所以复制所有内容,用winhex新建一个文件,改名后缀jpg便可得到解压缩密钥的jpg图,如图: 使用该密码Th1s_1s_p4sswd_!!!解压压缩包,得到最终的flag如图: 最终答案为:flag{3OpWdJ-JP6FzK-koCMAK-VkfWBq-75Un2z}

标签: ba附带连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台