「配枪朱丽叶。」

RootのCTF学习笔记。

SWPU2019-Misc:Network

题目下载

打开文件发现里面有一堆数字,仔细观察发现只有:63,127,191,255
https://s2.ax1x.com/2019/12/17/QIN9yj.png

和今年的西湖论剑预选赛的题有点像,考了TTL,参考:
标签: CTF - CodingBox技术博客

不难发现TTL值只有 63,127,191,255 四种,都是2的某次幂−1的值。于是将这四个数都转换成二进制,得到 111111、1111111、10111111、11111111四个二进制数。从后面两个数字可以观察到二进制数的开头两位似乎有关系。又因为TTL值为一个8位整数,进行合理猜想,不妨将不足8位的二进制数开头补0,变为8位后再取开头两位。即:00111111、01111111、10111111、11111111提取开头两位为:00、01、10、11,恰好为全排列,可以用于数据的存储。

通过这个规律。自己写了脚本qwq。。耗时很长,感觉自己也tcl。

file = open("attachment.txt",'r')
flag = open("flag.txt",'w')
linee = file.readlines()
num = []
string = ""
for i in linee:
    num.append("".join(i.split('\n')))
for n in num:
    if(n == '63'):
        n = '00'
    if(n == '127'):
        n = '01'
    if(n == '191'):
        n = '10'        
    if(n == '255'):
        n = '11'
    string += n
step = 8
b = [string[i:i+step] for i in range(0,len(string),step)]
hey = []
for i in b:
	hey.append(i)
for i in hey:
    flag.write(chr(int(i,2)))    

运行之后得到以504B0304开头的十六进制数字,无疑是ZIP的文件头,保存为ZIP:
https://s2.ax1x.com/2019/12/17/QIcrEF.png
打开时提示输入密码,其实是伪加密,修改加密位:
https://s2.ax1x.com/2019/12/17/QIcqgI.png
打开文件发现是一堆base64,写脚本就vans了,不虚:
https://s2.ax1x.com/2019/12/17/QIg0xI.png

import base64
file = open("flag.txt",'r')
base = file.read()
for i in range(29):
    base = base64.b64decode(base)
print(base)

那个range里的数是自己猜着试出来的,运行后就可以得到flag。
总的来说这道题还挺好玩,不难,又捡起来快遗忘的东西了OTZ