第七届浙江省大学生网络与信息安全竞赛决赛 Misc方向全解,网络安全零基础入门到精通实战教程!

FinalSign

给了一个txt,全选可以很明显看到存在空白字符

考虑SNOW隐写(snow特征,有大量的2009

SNOW.EXE -C FinalSign.txt

得到xorkey:helloworld,那么很明显2c243f2f3b3114345d0a0909333f06100143023b2c55020912就是密文

法一:

利用pwntools的xor函数

from pwn import xor
from Crypto.Util.number import \*
key \= b'helloworld'
c\=0x2c243f2f3b3114345d0a0909333f06100143023b2c55020912
print(xor(long\_to\_bytes(c),key))

法二:

用CyberChef也可以

法三:

a\=bytes.fromhex('2c243f2f3b3114345d0a0909333f06100143023b2c55020912')
key\=b'helloworld'
e\=\[\]
for i in range(0,len(a)):
    e.append(a\[i\]^key\[i%len(key)\])
print(bytes(e))

#b'DASCTF{F1nal\_Sign1n\_D0ne}'

我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~

非黑即白

很明显是逆序的GIF

with open('非黑即白','rb') as f:
   with open('heibai.gif','wb') as g:
      g.write(f.read()\[::\-1\])

GIF常见考点

  1. 拆分图片
  2. GIF时间间隔隐写

这题刚好都考察了

identify -format "%s %T \n" heibai.gif | head -n 20

可以看到前15张图的时间间隔与后面的完全不同,转字符

a\=\[118,106,69,74,48,98,83,117,77,79,86,65,90,103,101\]
print(bytes(a))

#b'vjEJ0bSuMOVAZge'

即为压缩包密码

法一:

拆分工具有很多,都可以用

将黑色的图转为0,其他的转为1,得到一个加密的zip

from PIL import Image

flag \= ''

for i in range(0, 1536):
    img \= Image.open(str(i)+'.png')
    pixel \= img.getpixel((0, 0))
    \# 计算亮度
    brightness \= 0.299 \* pixel\[0\] + 0.587 \* pixel\[1\] + 0.114 \* pixel\[2\]
    \# 根据亮度与阈值比较,使用公式 0.299 \* R + 0.587 \* G + 0.114 \* B 计算亮度,这个公式是基于人眼对不同颜色的敏感度
    if brightness \>= 128:
        flag += '1'
    else:
        flag += '0'
print(flag)

2进制转16进制,504b0304是压缩包的特征

存为文件

利用刚才的密码解压得到flag

DASCTF{H3r3_1s_C0L0rful_W0rld}

法二:

逐帧处理,不用拆分gif

from PIL import Image
a\=Image.open("1.gif")
n\=0
data\=""
e\=\[\]
while True:
    try:
        a.seek(n)   #逐帧处理
        d\=a.copy().convert('1').getdata()   #转换为黑白图像(模式 '1'),然后获取其像素数据。
        if (d\[0\]\==0):
            data+='0'
        else:
            data+='1'
    except:
        break;
    if (len(data)\==8):
        e.append(int(data,2))
        data\=''
    n+=1

f\=open("data.zip",'wb')
f.write(bytes(e))
f.close()

注:黑白图片并不是纯的rgb(0,0,0)和rgb(255,255,255),存在(1,1,1)等情况,所以要设置阈值,不然会丢失精度影响输出结果

天命人

按照黑猴的章节名排序

火照黑云
风起黄昏
夜生白露
曲度紫鸳
日落红尘
未竟

没玩过没关系,观察字节即可

发现按照顺序取一个字节是50 4b 03 04 00 0a

f1 \= open('火照黑云', 'rb').read()
f2 \= open('风起黄昏', 'rb').read()
f3 \= open('夜生白露', 'rb').read()
f4 \= open('曲度紫鸳', 'rb').read()
f5 \= open('日落红尘', 'rb').read()
f6 \= open('未竟', 'rb').read()

with open('output.zip', 'wb') as fout:
    min\_length \= min(len(f1), len(f2), len(f3), len(f4), len(f5), len(f6))

    \# 按字节逐个写入每个文件的数据
    for i in range(min\_length):
        \# 逐字节读取每个文件并转换为16进制
        hex\_bytes \= bytes(\[f1\[i\], f2\[i\], f3\[i\], f4\[i\], f5\[i\], f6\[i\]\])
        \# 将这些字节写入输出文件
        fout.write(hex\_bytes)

我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~

拼接得到zip

4bytes的crc32碰撞,用曾哥的工具就行

python CRC32-Tools.py -4 根器.zip

+-------------对输出的CRC值进行碰撞-----------------+
[Success] 0x76899d01: C0M3
[Success] 0x8e036aa6: _4ND
[Success] 0x881d716a: _Get
[Success] 0x7f3d8e75: _S1X
[Success] 0x248d3c69: _R00
[Success] 0xcb27d2bd: TS!!
+-----------------CRC碰撞结束!!!-----------------+
读取成功,导出CRC列表为:[0x76899d01, 0x8e036aa6, 0x881d716a, 0x7f3d8e75, 0x248d3c69, 0xcb27d2bd]
CRC碰撞成功,结果为: C0M3_4ND_Get_S1X_R00TS!!

利用密码解开未竟.zip

提取金箍棒.png上的像素点,这里直接用B神的脚本(不能出现中文路径或文件名,在windows下运行)

python3 Get_Pixels.py -f 1.png -p 5x5+1915x1075 -n 10x10

在ps中按F8即可查看坐标

import os
import re
import cv2
import argparse
import itertools
import numpy as np

parser \= argparse.ArgumentParser()
parser.add\_argument('-f', type\=str, default\=None, required\=True,
                    help\='输入文件名称')
parser.add\_argument('-p', type\=str, default\=None, required\=True,
                    help\='输入左上顶点和右下顶点坐标 (如:-p 220x344+3520x2150)')
parser.add\_argument('-n', type\=str, default\=None, required\=True,
                    help\='输入宽度间隔和高度间隔 (如:-n 44x86)')
parser.add\_argument('-size', type\=str, default\='1x1', required\=False,
                    help\='输入截取图像的大小 (如:-size 7x7)')
parser.add\_argument('-resize', type\=int, default\=1, required\=False,
                    help\='输入截取图像放大倍数 (如:-resize 1)')
args  \= parser.parse\_args()

if \_\_name\_\_ \== '\_\_main\_\_':
    if re.search(r"^\\d{1,}x\\d{1,}\\+\\d{1,}x\\d{1,}$", args.p) and re.search(r"^\\d{1,}x\\d{1,}$", args.n) and re.search(r"^\\d{1,}x\\d{1,}$", args.size):
        x1, y1 \= map(lambda x: int(x), args.p.split("+")\[0\].split("x"))
        x2, y2 \= map(lambda x: int(x), args.p.split("+")\[1\].split("x"))
        width, height \= map(lambda x: int(x), args.n.split("x"))
        width\_size, height\_size \= map(lambda x: int(x), args.size.split("x"))

        img\_path \= os.path.abspath(args.f)
        file\_name \= img\_path.split("\\\\")\[\-1\]

        img \= cv2.imread(img\_path, cv2.IMREAD\_COLOR)
        row, col \= img.shape\[:2\]

        r, c \= len(range(y1, y2 + 1, height)), len(range(x1, x2 + 1, width))
        new\_img \= np.zeros(shape\=(r \* height\_size \* args.resize, c \* width\_size \* args.resize, 3))
        for y, x in itertools.product(range(r), range(c)):
            for y\_size in range(height\_size):
                for x\_size in range(width\_size):
                    \# new\_img\[y \* height\_size + y\_size, x \* width\_size + x\_size\] = img\[y1 + y \* height + y\_size, x1 + x \* width + x\_size\]
                    pt1 \= ((x \* width\_size + x\_size) \* args.resize, (y \* height\_size + y\_size) \* args.resize)
                    pt2 \= ((x \* width\_size + x\_size) \* args.resize + args.resize, (y \* height\_size + y\_size) \* args.resize + args.resize)
                    color \= img\[y1 + y \* height + y\_size, x1 + x \* width + x\_size\].tolist()
                    cv2.rectangle(new\_img, pt1\=pt1, pt2\=pt2, color\=color, thickness\=-1)

        cv2.imwrite(f"\_{file\_name}", new\_img)
        print("已保存到运行目录中...")
    else:
        print("参数-p或参数-n或参数-size, 输入错误!")

或者

from PIL import Image

a \= Image.open("金箍棒.png")
x, y \= 5, 5
x\_, y\_ \= 0, 0
w, h \= a.size
b \= Image.new(a.mode, (w // 10, h // 10))

for x in range(5, w, 10):
    for y in range(5, h, 10):
        print(x, y, x\_, y\_)
        b.putpixel((x\_, y\_), a.getpixel((x, y)))
        y\_ += 1
    x\_ += 1
    y\_ \= 0
b.save('1.png')

都能得到密码:jinggubang

也有非预期解法,其实缩放一下能看到有字母,翻翻通道多对比一下是能看出来的

还有一个紧箍咒,一眼加密磁盘

金箍棒.png是密钥文件,正常挂载后得到flag

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取

👉1.成长路线图&学习规划👈

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

在这里插入图片描述
在这里插入图片描述

👉2.网安入门到进阶视频教程👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程扫描领取哈)
在这里插入图片描述
在这里插入图片描述

👉3.SRC&黑客文档👈

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:
在这里插入图片描述
黑客资料由于是敏感资源,这里不能直接展示哦! (全套教程扫描领取哈)

👉4.护网行动资料👈

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
在这里插入图片描述

👉5.黑客必读书单👈

在这里插入图片描述

👉6.网络安全岗面试题合集👈

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
在这里插入图片描述

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值