2024.03 Week4

2024.03 Week4

1. [ISCC] 检查一下

考察点:binwalk使用、二维码原理、Python脚本编写

给出一张图片:

221B

010分析无明显特征,拖入kali使用binwalk命令发现有Zlib文件,分离:

微信截图_20240325163502

可以看到一个包含01信息的文本文档,不知道什么意思,百度得知:长度为841,即29×29,很容易联想到是一个二维码,使用0和1代表像素点的颜色。

可用Python的PIL库进行生成图片,脚本如下:

from PIL import Image
MAX = 29    #宽高 841个01字符串,所以宽和高是29
pic = Image.new("RGB",(MAX, MAX))
#若是(255,255,255)、(0,0,0)需要先转换01
str = "1111111000100100110000111111110000010011011110010101000001101110100111010011010010111011011101000000111011110101110110111010010111101110001011101100000101110111000010010000011111111010101010101010111111100000000011100100110100000000100101101110000101010101000001101000011101011011011100101000001110010010001111011110010001100000101101100111111001010110101101110000100011110100110001001100010010101110000111111111110010100110101001111110010110001100110111110111000110011110010001111001110000100011010000110100100000001011001010101101110100011011010011100011101001111011111000101001101101101100101010001111101000000000011101101101010001011011111110000011110000101011010100000101011110010101000101101011101001010011001011111001010111010110101111000001101001101110100101010000010100111011000001000011101000011001001011111110100100100000111100110"
i=0
#遍历图像的每一个像素点,根据0或者1填充黑或白
for y in range (0,MAX):
    for x in range (0,MAX):
        if(str[i] == '1'):
            pic.putpixel([x,y],(0, 0, 0))
        else:
            pic.putpixel([x,y],(255,255,255))
        i = i+1
pic.show()
pic.save("./flag.png")

结果得到一张二维码,扫描可得flag。

ISCC{Png_Chunk_streams_ISCC}

2.[ISCC] Retrieve the passcode

考察点:摩斯密码、scatter散点图、Python脚本绘制散点图

给出一个加密压缩包和一个文档,密码暂时不知道,文档里有一些数据:

1:3:1;1.25:3:1;1.5:3:1;1.75:3:1;2:3:1;2:2.75:1;2:2.5:1;2:2.25:1;2:2:1;2:1.75:1;2:1.5:1;1:2.25:1;1.25:2.25:1;1.5:2.25:1;1.75:2.25:1;1:1.5:1;1.25:1.5:1;1.5:1.5:1;1.75:1.5:1;3:3:1;3.25:3:1;3.5:3:1;3.75:3:1;4:3:1;3.25:2.25:1;3.5:2.25:1;3.75:2.25:1;4:2.25:1;4:2:1;4:1.75:1;4:1.5:1;3:1.5:1;3.25:1.5:1;3.5:1.5:1;3.75:1.5:1;3:1.75:1;3:2:1;3:2.25:1;3:2.5:1;3:2.75:1;5:3:1;5.25:3:1;5.5:3:1;5.75:3:1;6:3:1;6:2.25:1;6:2:1;6:1.75:1;6:1.5:1;5.75:1.5:1;5.5:1.5:1;5.25:1.5:1;5:1.5:1;5:2.25:1;5.25:2.25:1;5.5:2.25:1;5.75:2.25:1;5:2.5:1;5:2.75:1;7:3:1;7.25:3:1;7.5:3:1;7.75:3:1;8:3:1;8:2.75:1;8:2.5:1;8:2.25:1;8:2:1;8:1.75:1;8:1.5:1;9:3:1;9.25:3:1;9.5:3:1;9.75:3:1;10:3:1;10:2.75:1;10:2.5:1;10:2.25:1;9.75:2.25:1;9.5:2.25:1;9.25:2.25:1;9:2.25:1;9:2:1;9:1.75:1;9:1.5:1;9.25:1.5:1;9.5:1.5:1;9.75:1.5:1;10:1.5:1;11:3:1;11.25:3:1;11.5:3:1;11.75:3:1;12:3:1;12:2.75:1;12:2.5:1;12:2.25:1;12:2:1;12:1.75:1;12:1.5:1;11.75:1.5:1;11.5:1.5:1;11.25:1.5:1;11:1.5:1;11:1.75:1;11:2:1;11:2.25:1;11:2.5:1;11:2.75:1;11.25:2.25:1;11.5:2.25:1;11.75:2.25:1

题目提示一个单词:“scatter”,散射,散点图,则上述数据可能为三维散点图的数据,可导入excel表格生成散点图或使用Python脚本实现,此处使用脚本,代码如下:

import matplotlib.pyplot as plt

# z轴数据都为1,暂时忽略绘制出二维散点图
data = "1:3:1;1.25:3:1;1.5:3:1;1.75:3:1;2:3:1;2:2.75:1;2:2.5:1;2:2.25:1;2:2:1;2:1.75:1;2:1.5:1;1:2.25:1;1.25:2.25:1;1.5:2.25:1;1.75:2.25:1;1:1.5:1;1.25:1.5:1;1.5:1.5:1;1.75:1.5:1;3:3:1;3.25:3:1;3.5:3:1;3.75:3:1;4:3:1;3.25:2.25:1;3.5:2.25:1;3.75:2.25:1;4:2.25:1;4:2:1;4:1.75:1;4:1.5:1;3:1.5:1;3.25:1.5:1;3.5:1.5:1;3.75:1.5:1;3:1.75:1;3:2:1;3:2.25:1;3:2.5:1;3:2.75:1;5:3:1;5.25:3:1;5.5:3:1;5.75:3:1;6:3:1;6:2.25:1;6:2:1;6:1.75:1;6:1.5:1;5.75:1.5:1;5.5:1.5:1;5.25:1.5:1;5:1.5:1;5:2.25:1;5.25:2.25:1;5.5:2.25:1;5.75:2.25:1;5:2.5:1;5:2.75:1;7:3:1;7.25:3:1;7.5:3:1;7.75:3:1;8:3:1;8:2.75:1;8:2.5:1;8:2.25:1;8:2:1;8:1.75:1;8:1.5:1;9:3:1;9.25:3:1;9.5:3:1;9.75:3:1;10:3:1;10:2.75:1;10:2.5:1;10:2.25:1;9.75:2.25:1;9.5:2.25:1;9.25:2.25:1;9:2.25:1;9:2:1;9:1.75:1;9:1.5:1;9.25:1.5:1;9.5:1.5:1;9.75:1.5:1;10:1.5:1;11:3:1;11.25:3:1;11.5:3:1;11.75:3:1;12:3:1;12:2.75:1;12:2.5:1;12:2.25:1;12:2:1;12:1.75:1;12:1.5:1;11.75:1.5:1;11.5:1.5:1;11.25:1.5:1;11:1.5:1;11:1.75:1;11:2:1;11:2.25:1;11:2.5:1;11:2.75:1;11.25:2.25:1;11.5:2.25:1;11.75:2.25:1"

# 将字符串中的数据解析为二维列表
points = [list(map(float, point.split(":"))) for point in data.split(";")]

# 提取 x 坐标和 y 坐标的数据
x = [point[0] for point in points]
y = [point[1] for point in points]

# 提取散点大小数据
sizes = [point[2]*100 for point in points]  # 这里将第三列数据乘以 100 以便更直观地展示

plt.scatter(x, y, s=sizes, alpha=0.5)  # 画散点图
plt.show()

图片展示:

微信截图_20240325170243

可以看出是“365728”,猜测为压缩包的密码,尝试:

微信截图_20240325170538

得到两段摩斯电码,分别解码并转小写尝试,试出第二段为flag。

1.CONGRATULATIONTHEFLAGIS
2.CHALLENGEISCCTWOZEROTWOONE

ISCC{challengeiscctwozerotwoone}

3.[ISCC] base小偷

考察点:base32编码原理、凯撒密码解密、Python脚本编写

题目提示:被凯撒小猫偷走的等号1/3

给出一段密文:

trefy2k2ov2lig2gqd2eqakoxjqcw4lztnfli

题目提示凯撒,凯撒枚举:

trefy2k2ov2lig2gqd2eqakoxjqcw4lztnfli
sqdex2j2nu2khf2fpc2dpzjnwipbv4kysmekh
rpcdw2i2mt2jge2eob2coyimvhoau4jxrldjg
qobcv2h2ls2ifd2dna2bnxhlugnzt4iwqkcif
pnabu2g2kr2hec2cmz2amwgktfmys4hvpjbhe
omzat2f2jq2gdb2bly2zlvfjselxr4guoiagd
nlyzs2e2ip2fca2akx2ykueirdkwq4ftnhzfc
mkxyr2d2ho2ebz2zjw2xjtdhqcjvp4esmgyeb
ljwxq2c2gn2day2yiv2wiscgpbiuo4drlfxda
kivwp2b2fm2czx2xhu2vhrbfoahtn4cqkewcz
jhuvo2a2el2byw2wgt2ugqaenzgsm4bpjdvby
igtun2z2dk2axv2vfs2tfpzdmyfrl4aoicuax
hfstm2y2cj2zwu2uer2seoyclxeqk4znhbtzw
gersl2x2bi2yvt2tdq2rdnxbkwdpj4ymgasyv
fdqrk2w2ah2xus2scp2qcmwajvcoi4xlfzrxu
ecpqj2v2zg2wtr2rbo2pblvziubnh4wkeyqwt
dbopi2u2yf2vsq2qan2oakuyhtamg4vjdxpvs
canoh2t2xe2urp2pzm2nzjtxgszlf4uicwour
bzmng2s2wd2tqo2oyl2myiswfryke4thbvntq
aylmf2r2vc2spn2nxk2lxhrveqxjd4sgaumsp
zxkle2q2ub2rom2mwj2kwgqudpwic4rfztlro
ywjkd2p2ta2qnl2lvi2jvfptcovhb4qeyskqn
xvijc2o2sz2pmk2kuh2iueosbnuga4pdxrjpm
wuhib2n2ry2olj2jtg2htdnramtfz4ocwqiol
vtgha2m2qx2nki2isf2gscmqzlsey4nbvphnk
usfgz2l2pw2mjh2hre2frblpykrdx4mauogmj

解出来很像base系列编码,又base64编码必为24的倍数,base32编码必为40的倍数。每个结果都为37位,取最接近的base32编码,题目提示等号被偷走了,根据base32编码按5bit切分的二进制数据必须是40bit的倍数,不足补=,所以我们在每段编码后补三个“=”,Python脚本实现:

import base64
file1=open("output.txt",'w',encoding="utf-8")
# 将上述枚举结果存入input.txt  读取
with open("input.txt","r") as f:
    # 读取每一行
    lines = f.readlines()
    # 每一行的结尾回车替换为空格,加上===,并全转大写,写入output.txt
    for line in lines:
        line_n = line.replace("\n","")
        line_n += "==="+"\n"
        line_n = line_n.upper()
        file1.write(line_n)
file1.close()
# 对output.txt每段进行base32解码
with open("output.txt","r") as f1:
    lst = f1.read().splitlines()
    i=0
    while i<len(lst):
        print(base64.b32decode(lst[i]))
        i+=1

得到的结果中有一段类似base64编码:

微信截图_20240325173436

解码得到flag。

flag{tqq.tqq@jjb}

4.[ISCC] 海市蜃楼-2

考察点:biwnalk+foremost分离文件、010分析、脑洞

题目给到一张图片,提示海市蜃楼,由于这道题为海市蜃楼其二,因此要与其一联系起来。

010分析发现图片中藏有压缩包,kali binwalk分离出来,为加密压缩包,密码暂时未知。

微信截图_20240325174819

到这里没有了头绪,看了其他人的wp才知道信息需要回到海市蜃楼-1中找。

在海市蜃楼-1中word转压缩包的内容中,在docProps文件夹中发现三个xml文件,前两个可以正常在网页中显示内容,第三个不行,且第三个文件的大小异于其他两个文件,猜测其不是xml格式的文件,010分析发现为jpg文件,更改后缀查看。

true

结合上题的wp:ISCC{zheshishui},推测人名为压缩包密码,输入zhongnanshan,打开压缩包获得二维码,扫描得到一段base编码。

ZWFzeQ==  base64解码  easy

很明显这不是flag,猜测二维码有问题,binwalk分析出藏有加密压缩包,foremost分离,easy或许为密码,打开文件有flag。

微信截图_20240325175644

ISCC{ZhenIXiangSDACbaIC}

5.[ISCC] 李华的红包

考察点:010分析、敲击码解码

给出一张图片:

hongbao2

010分析发现文件结尾有编码:

微信截图_20240325180658

敲击码解密:

微信截图_20240325180724

可知flag:

flag{ISCCBFS}
  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值