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}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

l8947943

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值