buuctf-Misc31-60题wp

三十一、被劫持的神秘礼物

是一个流量包

导出http发现第一个是login,应该是账号密码存在的地方

账号应该是admina

密码是adminb

按照提示连接起来,md5试试

成功

三十二、梅花香之苦寒来

一张600kb的图片,怀疑藏了东西

直接用winhex打开

在jpg的图片尾看到了还要很多的十六进制字符

先提取出来

很长很长,考虑十六进制转字符串,还是用python吧

1
2
3
4
5
6
7
with open('hex.txt','r') as h:
h=h.read()
tem=''
for i in range(0,len(h),2):
tem='0x'+h[i]+h[i+1]
tem=int(tem,base=16)
print(chr(tem),end='')

这串代码跑

很多的坐标

我们要把这些保存下来,因为太多了,只能用脚本保存,把之前的脚本修改一下

1
2
3
4
5
6
7
8
9
10
11
12
13
a = ''
with open('1.txt','r') as h:
h=h.read()
tem=''
for i in range(0,len(h),2):
tem='0x'+h[i]+h[i+1]
tem=int(tem,base=16)
a = a+chr(tem)
# print(chr(tem),end='')

with open('2.txt', 'w', encoding='utf-8') as fp:
fp.write(a)

这样就把这些全部保存到2.txt里面了

用gnuplot绘图,但要先改为gnuplot能识别的方式,写脚本

1
2
3
4
5
6
7
8
9
10
11
12
with open('2.txt','r')as a:
a=a.read()
a=a.split()
tem=''
for i in range(0,len(a)):
tem=a[i]
tem=tem.lstrip('(')
tem=tem.rstrip(')')
for j in range(0,len(tem)):
if tem[j]==',':
tem=tem[:j]+' '+tem[j+1:]
print(tem)

同样改一下脚本,把这些保存下来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a = ''
with open('2.txt','r')as a:
a=a.read()
a=a.split()
tem=''
for i in range(0,len(a)):
tem=a[i]
tem=tem.lstrip('(')
tem=tem.rstrip(')')
for j in range(0,len(tem)):
if tem[j]==',':
tem=tem[:j]+' '+tem[j+1:]
print(tem)
with open('3.txt', 'a', encoding='utf-8') as fp:
fp.write(tem)
fp.write("\n") # 本来应该是\r\n转义的,但是这样写会多出一行空行,反而不转义可以直接输出。注意这里只能写\n不能写\r,虽然输出的txt看上去一样,但是文件大小竟然不一样,而且用gnuplot绘图也绘不出来,原因未知。
1
2
3
4
5
6
with open('2.txt','r') as f:
f = f.read()
b = open('3.txt','w')
for i in f.split('\n'):
b.write(i.lstrip('(').rstrip(')').replace(',', ' ') + '\n')

这个代码和上面那个效果是一样的,但是发现这个代码简洁了很多

用kali系统,这里的gnuplot绘图不是自带的,需要安装

一般的话第一步完成就安装好了

直接输入gnuplot就好了,然后下面输入plot “3.txt”,这个3.txt就是之前存下的坐标

刚绘完图这个二维码不是显示在中间的,我们需要缩放一下,上面红圈的这个放大镜点一下就自动居中了

扫码即得flag

三十三、刷新过的图片

给了一张图片

看到刷新,马上想到F5隐写

用kali系统

1
git clone <https://github.com/matthewgao/F5-steganography>

先下载F5解密的项目

进入文件夹

当成没有密码

导出一个190 bytes的txt,用kali打不开,说编码错误,我们放到windows里面试试

PK文件头,标准的zip文件

直接改后缀为zip

有密码,怀疑是伪加密

01改成00

成功解压

成功

三十四、菜刀666

搜字符串password

这里有内容,并且在上面看到了flag.txt

这个好像是压缩包

导出http对象

最前面是分组名,去那边找

第二个导出

把中间的提取出来,是一个压缩包,因为最后写了需要密码,所以要想办法拿到密码

先试一试伪加密

但是flag.txt也是解压出来的,但是是乱码

密码应该是要去流量包中找到的

发现一个base64

不知道什么鬼

这里学到一个使用wireshark的方法

右边有个下拉菜单,点开可以看到

总共有这么多个tcp流,我们现在要追踪他们,就在这里面找有隐藏信息的

比如进入流7

在下面任意地方右键,追踪tcp流

发现这里的开头是FFD8这就是jpg的文件头啊,赶紧提取出来

在winhex里面新建一个文件,然后这里粘贴的是上图选中的这个格式

然后保存为jpg

如图所示

然后这就是压缩包密码了

三十五、穿越时空的思念

马上想到摩斯电码

套flag{}就好了

三十六、【swpu2019】神奇的二维码

搜png的文件尾,不在最后,然后看到后门是一个rar

提取出来

感觉这种应该是压缩包密码,那么之前那个压缩包里面肯定还有压缩包

用之前的base64解出来的,把这个压缩包的密码解了,无效信息

这是第三个压缩包,这个啥编码,这么长

盲猜base64

后面还有个等于号,要不再来一次?

终于出来了

熟悉的摩斯密码了

千万别看错了,我眼瞎好几次了

三十七、被偷走的文件

分组列表搜flag搜到两个

应该是藏了压缩包

用kali自带binwalk看到确实有一个rar文件

用foremost分离

出现一个output文件夹

有密码,爆破一下

四位数字

三十八、秘密文件

先搜flag(分组列表)

和上题一样,又看到一个压缩包

同样的手法

三十九、Mysterious

一个exe文件

发现输入少于七位的内容点击都没反应,输入七位及七位以上的内容就会关闭程序

notepad在最底下看到这个

还有很多很奇怪的内容

丢ida32里面看看

shift+F12可以看所有的字符串

猜第二个是flag,但是验证后不是。

因为找不到main函数,所以对第一个well done有想法

直接看到了flag了

就是上图中绿色的,拼接起来就好了,因为有{}

发现flag错误

看到{后面有一个v5,说明v5也要进去的

在{前面刚好写了一个关于v5的函数,百度这个函数的定义后知道是将整型的数字变量转换为字符数组变量。那就是把v10的值给v5了,那就看v10是多少,前面的if语句里面写了v10=123,那么v5也是123了

看了别人的WP后知道其实这题可以根据前面的c代码知道程序该输入什么内容的

getDlgItenTextA是读取输入

然后下面v10=…

就是把字符串转换成整型然后再加一

后面就是这个v12,v14,v13

我们看到v10是int其他都是char所以v12,v14,v13都应该转成字符串

在三个数字上面按R键就可以转成字符串了

所以输入的是122xyz了(不是123,已经-1了)

四十、sqltest

能看到这样的东西

这题实在不会,看WP也不会

就照做了

导出http对象

每行最右边的数字,相邻或者相近的有相同的数字的把他们取出来

102 108 97 103 123 52 55 101 100 98 56 51 48 48 101 100 53 102 57 98 50 56 102
99 53 52 98 48 100 48 57 101 99 100 101 102 55 125

ascii转字符串得到flag

贴一下别人的WP

一个数据包,wireshark打开查看内容。
从很多的tcp流上都能看到bool注入的语句,可能是一个完整注入过程的数据包
在这里插入图片描述
可以看到相应内容有以下两种
在这里插入图片描述
在这里插入图片描述
第一种应该是bool注入条件为true 的响应,直接导出http对象:
在这里插入图片描述
可以看到所有的注入语句,最下面就是最终从数据库中注入查询字段内容的部分:
在这里插入图片描述
我们可以从中推断出正确的ascii值,在对一个字符进行bool判断时,被重复判断的ASCII值就是正确的字符,最后提取到:

102 108 97 103 123 52 55 101 100 98 56 51 48 48 101 100 53 102 57 98 50 56 102
99 53 52 98 48 100 48 57 101 99 100 101 102 55 125

转为字符串得flag
flag{47edb8300ed5f9b28fc54b0d09ecdef7}

四十一、[GXYCTF2019]佛系青年

一个压缩包需要密码,发现里面的图片不用密码就可以解开了

应该是从这个图片里面提取出压缩包密码

把图片放到winhex里面,看到文件尾是FF D9说明没有隐藏压缩包什么的

用了一些方法找不出来什么东西,可能方向错了,因为说不定出题人本来就没有想要让我们可以提取出来这张图片,所以我们从压缩包密码破解的角度出发

猜一下是不是伪加密

有好几个50 4B 01
02的目录头,前面几个都不是,最后这个的那一位才是奇数09,可以改成00

压缩包成功解开了

txt里面是这样的,看到下面的佛曰,这个是个编码

注意一下这个要放下下面的方框里面,而且佛曰也要复制过来如图

四十二、喵喵喵

拿到一张图片

图片竟然这么大,肯定有问题

发现有点问题

看了WP

选BGR这个选项才能看到需要的东西,这个一看就是png,藏了一个png在里面

点save bin保存为png

注意一下,这个文件头前面还有一个fffe,这个是要去掉的,不然文件打不开

只有半个二维码,要么是另外一半还在前面的图片里面,要么就是这个图片高度不对

第二行的六七列就是高度,改成这样二维码就全部显示出来了

压缩包解压之后得到这个,竟然被耍了

看来WP才会,这个题目本身有很多的hint,放在buuctf里面hint都没了

这里的话这个压缩包需要用winRAR解压,解压了会报错,但是报错也能解压出来。

但是我的默认解压软件Bindizip直接就解压了没有报错

这里有个hint是NTFS,这里有一个NTFS隐写,利用软件NtfsStreamsEditor可以查到被隐写的内容,但是必须用winrar解压之后扫描才会找出来,可能是报错了之后生成了什么文件吧

这样就可以在flag.txt文件里面找到一个flag.pyc的隐藏文件

然后把这个flag.pyc导出

这个是一个后缀为pyc的文件

这个是加密python代码,需要把他反编译解密掉

https://tool.lu/pyc/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import base64
def encode():
flag = '*************'
ciphertext = []
for i in range(len(flag)):
s = chr(i ^ ord(flag[i]))
if i % 2 == 0:
s = ord(s) + 10
else:
s = ord(s) - 10
ciphertext.append(str(s))
return ciphertext[::-1]
ciphertext = [
'96',
'65',
'93',
'123',
'91',
'97',
'22',
'93',
'70',
'102',
'94',
'132',
'46',
'112',
'64',
'97',
'88',
'80',
'82',
'137',
'90',
'109',
'99',
'112']

这是一个加密脚本,我们必须写出解密脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import base64
def decode():
ciphertext = ['96', '65', '93', '123', '91', '97', '22', '93', '70', '102', '94', '132', '46', '112', '64', '97','88', '80', '82', '137', '90', '109', '99', '112']
ciphertext = ciphertext[::-1]
code = ''
for i in range(24):
if (i % 2 == 0):
a = int(ciphertext[i]) - 10
else:
a = int(ciphertext[i]) + 10
a = i ^ a
code = code + chr(a)
print(code)
decode()

四十三、zip

拿到六十几个压缩包,每个都有密码,第一反应是搞到密码然后用python批量解密,但是发现搞不到密码,用暴力破解试了一下,密码不止四位,然后根据已知信息测试发现密码可能搞不出来了

只能想其他的压缩包隐写方法,然后看到每个压缩包内文件的原始大小只有4个字节。而CRC32爆破这个方法要求的压缩包内文件就要很小,并且在ctf中一搬都为4个字节,所以基本可以确定是使用这个方法了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import zipfile
import string
import binascii

def CrackCrc(crc):
for i in dic:
for j in dic:
for k in dic:
for h in dic:
s = i + j + k + h
if crc == (binascii.crc32(s.encode())):
f.write(s)
return

def CrackZip():
for i in range(0,68):
file = 'out'+str(i)+'.zip'
crc = zipfile.ZipFile(file,'r').getinfo('data.txt').CRC
CrackCrc(crc)

dic = string.ascii_letters + string.digits + '+/='

f = open('out.txt','w')
CrackZip()
print("CRC32碰撞完成")
f.close

把所有压缩包放到这个python脚本的目录就好了,然后就等待CRC32碰撞

碰撞完成后生成out.txt文件夹

根据题目说明

我们base64解密一下

这个好像是压缩包,但是这个乱码不好处理,我们应该把base64解码成十六进制这样可以放在winhex里面

网上搜到一个网站

https://the-x.cn/base64/

注意上面的分隔符上面的东西不用复制,是没用的

看ascii就知道了

现在我们看到写了fix the file and get the flag

刚刚不是说这个事压缩包吗,那就确实压缩包文件头

对比一下感觉这个不太像zip压缩包,可能是rar压缩包

所以就加上52 61 72 21 1A 07 00

用压缩包打开直接看到了下面的flag

flag.txt里面反而不是flag

论解压软件的重要性

看到别人的WP是这样的

根据这个

解出flag

四十四、弱口令

给的压缩包马上就要密码了

根据提示直接弱口令爆破了

发现不对,弱口令爆破不出来,怀疑方向错了

重新打开压缩包

发现下面的备注栏有问题

全选发现有东西,但是看不到,复制到notepad

还是看不到,用sublime看

选中它们,终于看到了,这个是摩斯电码吧

删掉空格,直接保留大写试试,这个应该是压缩包密码

解压成功

拿到一张图片

看了WP知道要用lsb隐写

https://github.com/livz/cloacked-pixel

这是lsb的脚本

把这个项目下载到桌面

cmd进入到这个项目,把我们上面的图片也放到这个文件夹里面,命名为1.png

然后因为题目是弱口令,这个lsb隐写的密码我们就直接猜是123456成功解压(因为这个项目是基于python2的,所以我的电脑的python2命令就是python2,直接输入python的话就是python3了)

然后输出在new这个文件里面

这样就可以得到flag了

四十五、谁赢了比赛?

给了一张图片

没有头绪,binwalk试一下

有一个rar

binwalk -e 123.png就可以提取出rar了

需要密码

暴力破解成功

这里没有,看gif

应该是下棋的全过程,我们逐帧导出看看

360张图片

这里有一张不对的

这个还不是flag,对这个图片分析一下,看一下

找不出来,看了WP才知道gif就要用Stegsolve打开

这里打开的每一帧和我用2345看图王提取出来的不一样,每一帧只有一个棋子

把这种图保存下来

再用Stegsolve打开就可以了

四十六、john-in-the-middle

给了一个流量包,导出http,里面有几张图片

logo这个图片用StegSolve看到了flag。一般这种背景透明的图片,都很可能用StegSolve找到隐藏的内容

四十七、黑客帝国

一个txt文件,这个一看就是RAR的文件头

用winhex

有压缩密码

爆破出来

图片打不开

这个文件头有问题,本来是jpg的,前面硬套了一个png文件头,改回jpg就好了

四十八、间谍启示录

notepad搜flag出来这个东西

在前面看到了RAR文件头,说明这里有一个压缩包

不知道文件尾在哪,直接就复制到底

看上去很高级

直接打开exe文件发现无法运行,想到之前写过类似题目,需要用cmd运行

运行flag.exe文件

发现所在目录出现一个txt

把大写的F改成小写的f就是flag了

四十九、二维码

要点就是接口要对齐不能偏了

五十、蜘蛛侠呀

搜flag搜出一个压缩包

不会了

看wp

在kali系统里面执行下面的命令列出流量包的的隐藏文件

1
tshark -r out.pcap -T fields -e data \> out.txt

发现每次都重复了四次,需要去重

然后把16进制转10进制再转ascii

发现前9个字符都一样,需要去掉

把第二行的复制出来看看

是base64

那就把所有的都base64解码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import base64
b = 0
new = ''
for line in open("out.txt"):
a=line
if b==a:
continue
b=a
newline = ''
for i in range(len(a) // 2):
byte = line[i * 2:i * 2 + 2] # 两个为单位读取数字
num = int(byte, 16) # 16进制数转换为十进制
character = chr(num) # 根据十进制转换ASCII
newline += character
newline = newline[9:].strip('\n')
new += newline
new = new[27:]
new = new[:-25]
new = base64.b64decode(new)
with open('2.zip', 'wb', ) as fp:
fp.write(new)

完整的代码就是这样了,提出一个zip里面是一张gif

gif隐写,看每一帧都没问题,这里可能是gif时间隐写

在ubuntu里面输入以下命令(kali不行)

1
identify -format “%T” flag.gif

20换0,50换1

1
2
3
4
a = '110110111111110011110111111111111111111111111111101110000001111111111001101110110110001101011110111111111111111111111111111111101111111111111110110011110000101110111011110111111100011111111111001001101110000011111000011111111110110100001111011110111111011101111111110110110101111111100110111111111111110110101111111011110111101011101111111110110110101101111100110111111111111110110100001100000110000001100011100000110110110101110000001111000011111111'
for i in range(6):
print(chr(int(a[i * 8:i * 8 + 8], 2)), end='')
# mD5_1t

处理一下二进制

根据题目把他md5一下

f0f1003afe4ae8ce4aa8e8487a8ab3b6

五十一、小易的U盘

一个镜像文件,看文件头是RAR

有个flag.txt

让我们打开32这个exe

搜flag扫到

五十二、USB

一个压缩包里面有个假的flag,注意到压缩包的大小远远大于txt文件的大小,怀疑有隐藏文件

看到了233.png但是我们打开压缩包看不到,怀疑是有内容损坏了

之前写过类似的,这里是固定的值74

一张普通的照片

用StegSolve看到了一张二维码

这个应该就是加密的flag了

ci{v3erf_0tygidv2_fc0}

题目给了一个key文件

搜504B搜出了压缩包

丢binwalk里面也可以

这个流量包根本看不懂该怎么搞

只能看WP了

这个流量包其实每条数据都有个data

我们需要把这些数据提取出来

用到wireshark的命令行模式

在linux下安装

1
sudo apt-get install tshark

这个在kali里面好像自带了

然后运行命令

1
tshark -r key.pcap -T fields -e usb.capdata \> usbdata.txt

生成一个usbdata.txt文件

如果提取出来的文件有空行,那就用这个脚本提取

1
tshark -r key.pcap -T fields -e usb.capdata \| sed '/\^\\s\*\$/d' \> usbdata.txt

这里先补充一下知识,这题的本质是usb流量分析

USB流量分为键盘流量和鼠标流量:

键盘数据包的数据长度为8个字节,击键信息集中在第3个字节,每次key
stroke都会产生一个keyboard event usb packet。

鼠标数据包的数据长度为4个字节,第一个字节代表按键,当取0x00时,代表没有按键、为0x01时,代表按左键,为0x02时,代表当前按键为右键。第二个字节可以看成是一个signed
byte类型,其最高位为符号位,当这个值为正时,代表鼠标水平右移多少像素,为负时,代表水平左移多少像素。第三个字节与第二字节类似,代表垂直上下移动的偏移。

这里数据包长度是八个字节显然为键盘数据包

这里写图片描述

usb keyboard的映射表 根据这个映射表有写脚本解码得出的数据包

用脚本(python2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mappings = { 0x04:"A",  0x05:"B",  0x06:"C", 0x07:"D", 0x08:"E", 0x09:"F", 0x0A:"G",  0x0B:"H", 0x0C:"I",  0x0D:"J", 0x0E:"K", 0x0F:"L", 0x10:"M", 0x11:"N",0x12:"O",  0x13:"P", 0x14:"Q", 0x15:"R", 0x16:"S", 0x17:"T", 0x18:"U",0x19:"V", 0x1A:"W", 0x1B:"X", 0x1C:"Y", 0x1D:"Z", 0x1E:"1", 0x1F:"2", 0x20:"3", 0x21:"4", 0x22:"5",  0x23:"6", 0x24:"7", 0x25:"8", 0x26:"9", 0x27:"0", 0x28:"\n", 0x2a:"[DEL]",  0X2B:"    ", 0x2C:" ",  0x2D:"-", 0x2E:"=", 0x2F:"[",  0x30:"]",  0x31:"\\", 0x32:"~", 0x33:";",  0x34:"'", 0x36:",",  0x37:"." }
nums = []
keys = open('usbdata.txt')
for line in keys:
if line[0]!='0' or line[1]!='0' or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0':
continue
nums.append(int(line[6:8],16))
keys.close()
output = ""
for n in nums:
if n == 0 :
continue
if n in mappings:
output += mappings[n]
else:
output += '[unknown]'
print 'output :\n' + output

这个脚本适配的txt不是我们那样的,我们要把txt文件内容改一下

就是加上冒号,不然的话脚本运行完出不来结果

这个加冒号可以用notepad的多行编辑(alt)或者写脚本

看上面的ci{v3erf_0tygidv2_fc0}

如果是凯撒密码的话,向后位移三位可得:fl{y3hui_0wbjlgy2_if0}

明显不对

如果是栅栏密码的话,因为没有a,所以构不成flag

怀疑是有密钥的凯撒密码即维吉尼亚密码

key是XINAN不是KEYXINAN而且奇怪的是只有这个网站可以正常解密,其他都不对

https://www.qqxiuzi.cn/bianma/weijiniyamima.php

现在有a了,直接栅栏密码

另附鼠标脚本(python2)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
nums = [] 
keys = open('data.txt','r')
posx = 0
posy = 0
for line in keys:
if len(line) != 12 :
continue
x = int(line[3:5],16)
y = int(line[6:8],16)
if x > 127 :
x -= 256
if y > 127 :
y -= 256
posx += x
posy += y
btn_flag = int(line[0:2],16) # 1 for left , 2 for right , 0 for nothing
if btn_flag == 1 :
print posx , posy
keys.close()


五十三、[BJDCTF2020]认真你就输了

肯定不是10.xls

压缩包头部

好几个文件

在里面找到flag

五十四、[BJDCTF2020]你猜我是个啥

无法分离,看一看winhex

png文件

一张二维码

重新看winhex

结尾就是flag了

五十五、[BJDCTF2020]一叶障目

一张png

321*332的分辨率,有408KB

看上去没有东西,但是尝试分离

先把原来的output文件夹清空

没用,确实没东西,输出的png就是原来那个

找不到方法,看了WP才知道放在linux里面打不开这个图片

不知道为什么默认使用火狐打开了,用自带图片浏览器打开

这里说是crc错误

有两种方法,一种是python脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import zlib
import struct
#读文件
file = '1.png' #注意,1.png图片要和脚本在同一个文件夹下哦~
fr = open(file,'rb').read()
data = bytearray(fr[12:29])
crc32key = eval(str(fr[29:33]).replace('\\x','').replace("b'",'0x').replace("'",''))
#crc32key = 0xCBD6DF8A #补上0x,copy hex value
#data = bytearray(b'\x49\x48\x44\x52\x00\x00\x01\xF4\x00\x00\x01\xF1\x08\x06\x00\x00\x00') #hex下copy grep hex
n = 4095 #理论上0xffffffff,但考虑到屏幕实际,0x0fff就差不多了
for w in range(n):#高和宽一起爆破
width = bytearray(struct.pack('>i', w))#q为8字节,i为4字节,h为2字节
for h in range(n):
height = bytearray(struct.pack('>i', h))
for x in range(4):
data[x+4] = width[x]
data[x+8] = height[x]
#print(data)
crc32result = zlib.crc32(data)
if crc32result == crc32key:
print(width,height)
#写文件
newpic = bytearray(fr)
for x in range(4):
newpic[x+16] = width[x]
newpic[x+20] = height[x]
fw = open(file+'.png','wb')#保存副本
fw.write(newpic)
fw.close

等待一会

输出了正常的png

我突然发现这题只要改图片高度就可以解决了

01 4C改成03 4C

就和上面那个图片一样了

是我弄复杂了

五十六、[BJDCTF2020]藏藏藏

binwalk找到压缩包

foremost提取

里面有个doc里面有二维码,扫描出flag

五十七、[BJDCTF2020]just_a_rar

压缩包密码爆破

得到一张jpg图片

备注直接看到flag

千万别想复杂了

五十八、[SWPU2019]我有一只马里奥

一个exe文件

运行得到一个txt文件

给了这个提示

这就是ntfs隐写了

导出即可得到flag

五十九、[BJDCTF2020]鸡你太美

这个副本异常的大,但是打不开

发现文件头错误

补充文件头之后,打开发现flag

flag{zhi_yin_you_are_beautiful}

六十、[BJDCTF 2nd]TARGZ-y1ng

拿到题目说解压密码不需要爆破,我就不知道该怎么办了,竟然还有文件名为压缩密码,也是有道理的其实,因为这个文件名很奇怪,本来就应该怀疑是不是压缩密码

压缩包的后缀是.tar.gz,有问题,先把gz去掉,留下tar后缀的压缩包

然后

就解压了

里面还是一个压缩包

同样先去掉.gz然后再用文件名当压缩密码

又解压了,还是一个压缩包,我怀疑是套娃,要我们解压很多次才能解压出真正的文件,一般这种情况的话是不能手动解的,我们只好用python写一个脚本了

这里就不写了,自己写或者百度一下

下面的是修改文件名的脚本,就是把后面的.gz去掉

1
2
3
4
5
6
7
8
9
10
11
import os
# 获取目录,注意这个是斜杠,不是反斜杠,并且因为是目录,最后还要加上斜杠的,不然报错
path = "C:/Users/long/Desktop/zip/"
# 利用os模块获取当前目录下面的文件名,生成一个列表
filename_list = os.listdir(path)
# 因为文件夹中只有一个文件,所以就取出列表中的第0个值
old_name = filename_list[0]
# 去掉最后的.gz,字符串也可以切片,代表从第一个到倒数第四个
new_name = old_name[:-3]
# 注意这里的文件名必须带上路径,不然显示找不到文件
os.rename(path+old_name,path+new_name)

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!