SCTF2021 个人Write Up

就第一天做了几个题,第二天没人做我也直接开摆!

WEB

Loginme

图片[1]-SCTF2021 个人Write Up-魔法少女雪殇

代码审计,伪造X-Real-IP就行了,太简单的代码了没啥必要

MISC

fumo_xor_cli

nc进去按住回车有链接,访问进去是微信的专访,底部照片可以发现有一些点,但不是缩略图,ps观察坐标发现是间隔9个位置

写脚本提取就行了

题目叫做xor cli,nc进去后会有彩色段,那就是把彩色的空间内容跟图片提出来的彩色色块进行xor就好了,这里的话懒得贴图了,你们也看得懂(主要是图片删了

彩色代码这里直接这样提取 nc ip port > 123

然后把非彩色内容手工删掉就ok了

撰写脚本

from PIL import Image
pic = Image.open('TpMSkq.png')
f = open('aaaaa','r').readlines()
for i in range(len(f)):
    f[i] = f[i].split('[')
    for j in range(1, len(f[i])):
        f[i][j] = f[i][j].split(';')
w,h = pic.size
img = Image.new('RGB',(100,134),(255,255,255))
k = 1
b = 1
time=0
img2 = Image.new('RGB',(100,134),(0,0,0))
for i in range(100):
    for j in range(1,134):
        tmp = pic.getpixel((b,k))
        #print((tmp[0]^int(f[i][j][2]),tmp[1]^int(f[i][j][3]),tmp[3]^int(f[i][j][4][:-3])))
    
        
        #img.putpixel((i,j-1),tmp)
        #img2.putpixel((i,j-1),((int(f[i][j][2]),int(f[i][j][3]),int(f[i][j][4][:-3]))))
        #print((int(f[i][j][2]),int(f[i][j][3]),int(f[i][j][4][:-3])))
        img.putpixel((i,j-1),(tmp[0]^int(f[i][j][2]),tmp[1]^int(f[i][j][3]),tmp[2]^int(f[i][j][4][:-3])))
        #pic.putpixel((i,j-1),(int(f[i][j][2]),int(f[i][j][3]),int(f[i][j][4][:-3])))
        if(k<=1200):
            k+=9
        else:
            break
    if(b<=w):
        b+=9
        k=1
    else:
        break    
    time+=1
    if time == 10:
        exit
img.show()
#img2.show()
#img.save('1.png')
print(w,h)

最后就能看见了

This_is_A_tree

遍历data

Q2hpbmVzZSB0cmFkaXRpb25hbCBjdWx0dXJlIGlzIGJyb2FkIGFuZCBwcm9mb3VuZCEgU28gSSBXYW50IEdpdmUgWW91IE15IEZsYWcgQnV0IFlvdSBOZWVkIERlY29kZSBJdC5FbmpveSBUaGUgRmxhZyEhOuW4iCDlhZEg5aSNIOaNnyDlt70g6ZyHIOaZiyDlp6Qg5aSn6L+HIOiuvCDlmazll5Eg6ZyHIOaBkiDoioIg6LGrIA==

解码获得

Chinese traditional culture is broad and profound! So I Want Give You My Flag But You Need Decode It.Enjoy The Flag!!:师 兑 复 损 巽 震 晋 姤 大过 讼 噬嗑 震 恒 节 豫

六十四卦,wiki有对应照片,转bin转字符就行了,当然bjdctf出过这种题目,甚至还有脚本

https://github.com/BjdsecCA/BJDCTF2020_January%E5%8F%82%E8%80%83%E9%87%8C%E9%9D%A2%E7%9A%84%E4%BC%8F%E7%BE%B2%E5%85%AD%E5%8D%81%E5%9B%9B%E5%8D%A6

转换就行了

in_the_vaporwaves

错失三血的题目属于是,直接拖入au,然后调整一下

图片[2]-SCTF2021 个人Write Up-魔法少女雪殇

拉大,然后看波形就能看出来了

图片[3]-SCTF2021 个人Write Up-魔法少女雪殇

morse

easydsp

第一天确实没做出来,赛后问了zbr,然后尝试了一下发现想复杂了,罢了

dsp方向的题目也出过一些,所以这里我还是使用万能的matlab来进行解题,获得四个数据我第一时间就想到肯定是音频数据矩阵内容,那么写个脚本把这些音乐还原

clear all;
clc;


data=[];
for i=1:4
fileName = ['data' num2str(i) '.txt'];
a = load(fileName);
data=[data,a];
end

fs = 44100;

audiowrite("four.wav",data,fs)

这样,四个通道都写入了一个wav文件,可以拖入au观察波形

图片[4]-SCTF2021 个人Write Up-魔法少女雪殇

主要是data3波形太过有趣,整个时间全部都再弄data3的数据(尝试了fft,频域隐写解密,信号分离,都白给了)

以至于忽略了data1和data2听起来基本没什么区别的情况

其次结合音频数据采样的范围,我这边找了正常的音频进行观察音频数据采样范围,基本都在-1~1之间,说明可能存在混叠,那么将data1-data2,尝试观察波形

图片[5]-SCTF2021 个人Write Up-魔法少女雪殇

观察波形的走向,可以明显看出他的波形规律是2PSK的编码方式,可以看这个图

图片[6]-SCTF2021 个人Write Up-魔法少女雪殇

经典通信知识了。

结合波形图与数据计算,可以获得单位周期存在1000个采样点,同时,可以计算出最高可以完整编码126个bit的采样,应该是7bit编码字符串的方式

图片[7]-SCTF2021 个人Write Up-魔法少女雪殇

最后对数据进行撰写脚本,输出bin值

clear all;
clc;
load data1.txt;
load data2.txt;

data = data1-data2;
bits=[000];
for m = 1:1000:126000
    bits = [bits,bit(data(m:m + 1000))];
end

disp(['bits=' num2str(bits(2:end))])

function [y]=bit(x)
    if sum(x(200:300)) / 100 > 0
       y =1;
    else
       y =0;
    end
end
 
图片[8]-SCTF2021 个人Write Up-魔法少女雪殇

最后转换即可

© 版权声明
THE END
喜欢就支持一下吧
点赞1 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情