MISC从入门到放弃
[BUUCTF]RSA
分析
得到一段文字:
在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flga提交
解题
第一想法是python脚本,网上找到一个
import gmpy2
p = 473398607161
q = 4511491
e = 17
d = int(gmpy2.invert(e,(p-1)*(q-1)))
print(d)
得到flag{125631357777427553}
本应在这里就结束……但在其他博主发现一个关于rsa解密软件
RSATOOL
使用: 1.Number Base 设置为十进制 2.注意:Public Exponent这里要使用16进制的数,如果公钥e=17的话,就应该填入十六进制的11 3.给出p,q,e的话直接填入,再点击Calc.D,获得d 4.给出的是n和e的话,输入n和e,点击Factor N(分解),得到p,q,再重复第3步就能得到d了
原文链接:https://blog.csdn.net/MikeCoke/article/details/105920084
将本题带入:(已知p,q,e)
keysize不知道是个啥,但数值好像不影响……
得出flag,即D
[BUUCTF]Mysterious
分析
下载得到可执行文件,随便输入一些,没得反应
解题
PE..L..说明其为32位的exe文件,放入IDA
PE…d…是64位程序
shift+F12检索字符串,看到well done,点进去
原因:大佬说这可能表示该程序输入成功后的情况
类似于答案的文字
左侧401090进去,接着F5进行反编译
将已编译的机器码或字节码重新转换回高级编程语言的过程,让其“易读”
主要分析这一段:
if ( v10 == 123 && v12 == 120 && v14 == 122 && v13 == 121 )
strcpy(Text, "flag");
memset(&v7, 0, 0xFCu);将v7的前252个字节设置为0。
_itoa(v10, &v5, 10);将v10转换为字符串并存储在&v5中。即v5=“123”
strcat(Text, "{");
strcat(Text, &v5);将v5(即v10的字符串表示)连接到Text的末尾。
strcat(Text, "_");
strcat(Text, "Buff3r_0v3rf|0w");
strcat(Text, "}");:将"}"
MessageBoxA(0, Text, "well done", 0);显示一个消息框,内容为Text,标题为"well done"。
所以输出txt为
flag{123_Buff3r_0v3rf|0w}
[BUUCTF]disk
分析
VMDK:(VMWare Virtual Machine Disk Format)是虚拟机VMware创建的虚拟硬盘格式,文件存在于VMware文件系统中,被称为VMFS(虚拟机文件系统)
解题
凡是先打开010
获得ctf{unseCure_quick_form4t_vo1umer
查找另外一半
用7Z打开该vmdk文件,发现fat
FAT文件系统是微软在上个世纪七八十年代为DOS系统开发的一种文件系统。最初是FAT12系统,用在软盘上。后来计算机硬件不断发展,逐渐推出了FAT16和FAT32。 它们大体上是一致的,本质的不同之处在于描述文件存储的FAT表中各元素的长度分别为12位, 16位和32位。
fat文件可以使用VeraCrypt进行挂载
选择一个磁盘,我这里选择E,然后加载
发现需要密码
猜rctf
图片名称提到ignore,那就先不管,在网上看到这段话
这里就有个盲区知识点,在挂载输入密码的时候,不同的密码可以进入不同的文件系统
使用这个password2
用winhex-工具-打开磁盘
找到另一半 李大普
_and_corrupted_1nner_v0lume}
flag{unseCure_quick_form4t_vo1ume_and_corrupted_1nner_v0lume}
知识点:vmdk与fat文件,veracrypt使用
[BUUCTF]数据包中的线索
解题
打开pcapng,进行协议分级,发现Line-based text date占比较大,将其过滤出来
追踪HTTP流,发现base64编码
复制 解码
没看到JFIF以为magic又出问题了,于是换了个网址https://the-x.cn/base64,
下载JPG文件,得出flag
发现电脑好像不可以识图复制flag,果断拿起手机微信识图……
[BUUCTF]喵喵喵
分析
题目是一张图片,打开属性,放入010editor,无果;于是想到LSB隐写
解题
发现一张PNG,但开头不太对劲
将其保存txt文件,发现放入010editor并不可以修改开头
在某位大佬博客中学到一个方法,如下:
首先,在notepad中打开txt文件
Alt按列选择左侧复制,放入Cyberchef
两者交换
下载图片,得到一个二维码
大概率宽高被修改了,在010中进行修改,得到一个完整二维码
扫码得到网址:https://pan.baidu.com/s/1pLT2J4f
接着,得到一个flag.rar,用winrar打开,得到flag.txt
太过分了! 在大佬的wp得知,这是NTFS文件隐写
txt文件隐藏的信息思路
1.观察txt文件的属性说不定会有线索
2.txt文件里面是一堆空行可能存在snow隐写
3.存在NTFS隐写
并且在使用该工具时,下载的压缩包用WinRAR解压才可以提取到隐藏的文件
流隐写得用WinRAR解压
随后得到一个反编译文件python pyc文件 - 知乎
利用在线反编译工具在线Python pyc文件编译与反编译,得到如下代码
# Visit https://www.lddgo.net/string/pyc-compile-decompile for more information
# Version : Python 2.7
import base64
def encode():
flag = '*************'
ciphertext = []#初始化一个空列表ciphertext,用于存储加密后的字符
for i in range(len(flag)):#使用一个for循环遍历flag字符串中的每个字符。
s = chr(i ^ ord(flag[i]))#对于每个字符,使用它的索引i和字符的ASCII值进行异或操作,然后使用chr函数将结果转换为一个字符。
if i % 2 == 0:
s = ord(s) + 10#如果是偶数,将字符s的ASCII值增加10。
else:
s = ord(s) - 10#如果是奇数,将字符s的ASCII值减少10
ciphertext.append(str(s))#将处理后的字符s转换为字符串,并添加到ciphertext列表中
return ciphertext[::-1]#函数返回ciphertext列表的逆序。
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列表,包含了加密后的字符的ASCII值的字符串表示,这个列表是按照加密函数的逻辑生成的
这段代码是一个加密程序,据此,可有写一个脚本将flag解出来,由于能力有限,借鉴一下网上大佬
def decode(ciphertext):
# 反转密文列表
ciphertext = ciphertext[::-1]
flag = []
for i in range(len(ciphertext)):
s = int(ciphertext[i])
# 根据索引的奇偶性进行逆操作
if i % 2 == 0:
s -= 10
else:
s += 10
# 进行逆向的按位异或操作
original_char = chr(i ^ s)
flag.append(original_char)
# 将列表中的字符拼接成字符串
return ''.join(flag)
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'
]
# 解密得到的flag
flag = decode(ciphertext)
print("解密后的flag是:", flag)
解密后的flag是: flag{Y@e_Cl3veR_C1Ever!}
参考:【CTF入门】BUUCTF Misc刷题(持续更新) - Super_Snow_Sword - 博客园
知识点:图片隐写,Lsb,txt隐写,宽高,NTFS隐写,py反编译
[BUUCTF]丢失的MD5
分析
打开,得到py文件
import hashlib
for i in range(32,127):
for j in range(32,127):
for k in range(32,127):
m=hashlib.md5()
m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
des=m.hexdigest()
if 'e9032' in des and 'da' in des and '911513' in des:
print des
诶 我看不懂 运行一下 报错 直接找ai
ai给了我答案
import hashlib
for i in range(32, 127):
for j in range(32, 127):
for k in range(32, 127):
m = hashlib.md5()
m.update('TASC'.encode() + chr(i).encode() + 'O3RJMV'.encode() + chr(j).encode() + 'WDJKX'.encode() + chr(k).encode() + 'ZM'.encode())
des = m.hexdigest()
if 'e9032' in des and 'da' in des and '911513' in des:
print(des)
得出flag{e9032994dabac08080091151380478a2}
非常草率……
[攻防世界]Pixel-Princess
解题
下载得到一个压缩包
一开始用winrar解压。得到一串jpg字符
修改文件头发现没有,以为就是这么一个文件
后面卡住时看一眼wp发现原来这就有一个图片,换成7Z之后能解压出来
分离一下这个,得到MarioCastle.jpg
得到一个密码:BaD_DR4G0N
没错,就是卡在了这里发现winrar解压出来的本应是一个图片文件
看了一下wp,原来这里还要分离,密码就是上图中提供的密码
得到flag
[攻防世界]信号不好先挂了
分析
又是图片隐写
我也先挂了……
解题
save bin
保存后的zip还需要修复一下才能解压缩
……怎么里面又是这张图片
两张一样图片还可在stegslove合成图片
用BlindWaterMark这个工具一直报错(麻木)
直接打开puzzlesolve,得到图片
知识点:盲水印
信女愿一台不会报错的电脑
[攻防世界]看雪看雪看雪
分析
得到一个rar文件,里面有一张jpg
南方孩子羡慕
按照图片隐写思路:
- 属性
- 010editor(隐藏文件分离,宽高)
- stegslove
- 等
解题
按照刚才思路,没有什么发现
回头看看题目“看雪看雪看雪”,好像有个东西叫雪隐写
后面看wp,其实属性里面有提及过,只是我没有注意到…….
所以压缩包内可能有其他我看不见的文件
于是乎
将后面这一大段复制进sublime
看吧,里面还是有东西的
将其全部复制下来进一个新的txt文件,用snow工具
得到flag
知识点:图片隐写,snow隐写
[攻防世界]打野
解题
得到一张bmp文件
查看010,stegslove,暂时没啥发现
看了wp,学到一个新工具———zsteg
然后我一使用,出问题了
(but之前写另外一个题目没问题)
…………
时隔多日,我又回来了
如果zsteg出现栈报错“tack level too deep (SystemStackError)”,可以将命令改成“zsteg --msb 瞅啥.bmp”或“zsteg -o xY 1.bmp”,改变扫描顺序。 -o 是设置行列的读取顺序 --msb:most significant BIT comes first,最高有效位排在第一位
得出qwxf{you_say_chick_beautiful?}
[攻防世界]不确定,再看看
题目
做题做累了吧,给你准备了一道钢琴曲,要仔细听哦!我藏得很深。
hint1:信息隐藏一般要求载体需要有一定的冗余度,而base64编码刚好就有这个特点。
解题
下载得到音频文件
放入Audacity,并无收获
解锁新工具Deepsound
主要用于处理音频文件的加密。以将敏感数据隐藏在音频文件中,从而实现数据的保密和安全传输。
得到txt文件
解码
知识点:音频隐写,新工具Deepsound
[BUUCTF]黄金6年
分析-解题
现在010editor中打开,发现最后有base64编码
进行解密,结果是一个rar文件,直接保存(该网站可以直接保存解码后文件)
Base64解码 Base64编码 UTF8 GB2312 UTF16 GBK 二进制 十六进制 解密 - The X 在线工具 (the-x.cn)
打开rar
发现需要密钥,那么应该在视频中存在线索;在Kinovea打开视频
二维码结果:
i
二维码结果:
want
二维码结果:
play
二维码结果:
ctf
即 iwantplayctf
即txt的密钥
得出roarctf{CTF-from-RuMen-to-RuYuan}
[BUUCTF](╯°□°)╯︵ ┻━┻
原来这串符号是“掀翻桌子”……
分析
(╯°□°)╯︵ ┻━┻ 50pt
(╯°□°)╯︵ ┻━┻
d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd
以为是颜文字,不如我所料,这啥也不是……
后面一串编码看起来像16进制,但是放在解码工具并没有想要的结果
50pt不知道是个啥
解题
使用脚本
n = "d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd"
answer = ""
for i in range(0, len(n), 2):
m = n[i: i + 2]
answer += chr(int(m, 16) - 128)
print(answer)
得出 DDCTF{922ab9974a47cd322cf43b50610faea5}
[BUUCTF]docx
分析
下载后是一个docx文件,在里面搜寻flag,无果。将其放入010editor分析
解题
发现这其实是zip文件,将docx改成zip后打开
得到flag{unz1p_3v3ryth1ng}
知识点:关于办公文件的隐写
[BUUCTF]间谍启示录
分析
下载后是一个iso文件
.iso 文件是一种常用的光盘映像文件格式,它可以精确地复制光盘上的所有数据,包括文件、目录结构以及文件系统属性。ISO 文件通常用于备份光盘内容、分发操作系统安装介质、或者在网络上传输大容量的数据。ISO 文件可以包含任何类型的文件,如文档、音频、视频、软件安装包等。
解题
先放进010editor,发现隐藏了文件
用foremost分解,得到一大堆
其中,在rar中有可运行文件
运行flag.rar
可以得到txt,其中有flag
该txt文件是隐藏文件,查看方法如下:
运行“文件已销毁.exe”发现“flag.exe”被销毁了;通过搜索,得知这是一个自解压文件。
以下信息来自网络! 自解压文件一个 SFX (SelF-eXtracting)自解压文件是压缩文件的一种,因为它可以不用借助任何压缩工具,而只需双击该文件就可以自动执行解压缩,因此叫做自解压文件。同压缩文件相比,自解压的压缩文件体积要大于普通的压缩文件(因为它内置了自解压程序),但它的优点就是可以在没有安装压缩软件的情况下打开压缩文件(文件类型为.exe格式)。
它结合了可执行文件模块,一种用以运行从压缩文件解压文件的模块。这样的压缩文件不需要外部程序来解压自解压文件的内容,它自己便可以运行该项操作。然而 WinRAR 仍然可将自解压文件当成是任何其它的压缩文件处理。所以如果你不愿意运行所收到的自解压文件 (比如说,它可能含有病毒时),你可以使用 WinRAR 来查看或是解压它的内容。
自解压文件通常与其它的可执行文件一样都有 .exe 的扩展名。
自解压文件是很方便的,如果你想要将压缩文件给某一个人时,但却不知道他们是否有该压缩程序可以解压文件的时候。你也可以使用自解压来发布你自己的软件,例如 WinRAR 的安装程序便是使用图形 GUI RAR 自解压模块 Default.sfx 所制作的。什么叫自解压?
自解压可执行文件的后缀名为exe,用压缩软件生成这种格式的文件后,再打开时你可以不必借助压缩软件进行解压,它可自行解压。
如果你的机器上没有安装压缩软件,别人给你了一份经过压缩的文件,你是打不开的,但自解压的可执行文件却在任何电脑都能运行,还原出你需要的文件。
知识点:iso隐写,自解压文件
[BUUCTF]爬
分析
下载得到有个文件,放入010,得知文件为一个PDF
解题
将文件后缀改为pdf形式
得到线索:FLAG被图片覆盖了,pdf是不能移动图片的,将其在Word中打开
微信识图
0x77637466323032307b746831735f31735f405f7064665f616e645f7930755f63616e5f7573655f70686f7430736830707d
将字符带入工具,得到flag
wctf2020{th1s_1s_@_pdf_and_y0u_can_use_phot0sh0p}
[攻防世界]saleae
分析
下载得到一个logicdata文件
第一次见
回头看题目 saleae
下载saleae逻辑分析工具
这个题大致是这么使用的,些许懵逼……
1.open文件
2.选择SPI
3.修改参数,save
4.拖拉,得到flag
flag{12071397-19d1-48e6-be8c-784b89a95e07}
来自官方的解释:
看了依旧懵逼
[攻防世界]challenge_how_many_Vigenère
分析
下载得到一堆字符串,分析题目,维吉尼亚
Vigenere算法加密和解密原理及其实现_vigenere密码算法-CSDN博客
没有提供key,这里有个爆破
先就跟着题目要求一步一步来
解题
进入网址爆破
得到key
ohihzkssefkmqxqbkihybnynvndzkdlqvhwhgywaftmeteecqprzjczvnmhnzwyasmlwbwvaqitejbfofycejjlcbpk
result
aliceleavestheteapartyandentersthegardenwhereshecomesuponthreelivingplayingcardspaintingthewhiterosesonarosetreeredbecausethequeenofheartshateswhiterosesaprocessionofmorecardskingsandqueensandeventhewhiterabbitentersthegardenalicethenmeetsthekingandqueenthequeenafiguredifficulttopleaseintroduceshertrademarkphraseoffwithhisheadwhichsheuttersattheslightestdissatisfactionwithasubjectaliceisinvitedorsomemightsayorderedtoplayagameofcroquetwiththequeenandtherestofhersubjectsbutthegamequicklydescendsintochaosliveflamingosareusedasmalletsandhedgehogsasballsandaliceonceagainmeetsthecheshirecatthequeenofheartsthenordersthecattobebeheadedonlytohaveherexecutionercomplainthatthisisimpossiblesincetheheadisallthatcanbeseenofhimbecausethecatbelongstotheduchessthequeenispromptedtoreleasetheduchessfromprisontoresolvethematter
得到作品《爱丽丝梦游仙境》Alice's Adventures in Wonderland
再根据题目意思加密作品名字
得到flag
知识点:维吉尼亚爆破
[CTFSHOW]misc30
解题
下载得到一个加密的压缩包,没有提示信息,大概率是伪加密
用ZipCenOp直接伪加密爆破
得到一个MP3文件,将其打开还有一张图片
mp3并无发现
回到最初的图片,用foremost将其分离出来,得到已知jpg文件
用图片隐写思路,猜测是宽高
问题来了,并不知道图片本身宽高,没错卡了很久(小技巧:尽量往大的宽高修改,然而,对我并没有什么用)
照着wp修改宽高
得到图片
猪圈密码
中间有个空格
flag{well done}
[BUUCTF]alison_likes_jojo
分析
打开txt文件,并无发现什么
该文件夹下暂时也无发现
在另一个文件夹中发现图片,猜测是图片隐写
解题
010打开图片
其中一张图片发现txt文件,用foremost将其分离出来
得到一个zip,打开需要密码,直接暴力破解,得到txt中内容
放入工具解码
猜测可能是某个密码,想到还有另一个图片未分析
010editor与Stegsolve都无发现,借鉴大佬的wp得知这是outguess隐写
wctf2020{pretty_girl_alison_likes_jojo}
知识点:文件分离,outguess隐写
[BUUCTF]吹着贝斯扫二维码
分析
下载后得到许多位置文件与一个带密码的压缩包
解题
试图暴力破解zip,不出意外肯定出意外,破解失败
但还是发现线索
放代码进工具,依旧解密失败,先不管他
将未知文件带入010,发现是jpg文件,将其添加后缀,果然是
应该所有图片拼在一起是一个二维码,将所有图片添加后缀(该目录下cmd)
ren * *.jpg
但是全是乱序的
仔细发现在文件结尾有相应的数字,代表着顺序,如果不确定可以多看几个图片
通过脚本将其拼凑成一张完整的二维码
# coding=utf-8
# python3
import os
from PIL import Image
# 图片压缩后的大小
width_i = 134
height_i = 130
# 每行每列显示图片数量
row_max = 6
line_max = 6
# 存储图片路径和对应的排序数字
all_path = []
# 文件夹路径
dir_name = r"D:\\pythonlearning\\pythonProject\\吹着贝斯扫二维码"
# 获取文件夹下所有.jpg文件的列表
dir_list = [f for f in os.listdir(dir_name) if f.endswith('.jpg') and not f.startswith('__pycache__')]
# 从每个文件末尾提取数字并排序
for file in dir_list:
try:
with open(os.path.join(dir_name, file), 'rb') as f:
f.seek(-6, os.SEEK_END) # 移动到文件末尾的前6个字节
last_bytes = f.read(6) # 读取末尾的6个字节
# 查找FF D9标记
ff_d9_index = last_bytes.rfind(b'\\xff\\xd9')
if ff_d9_index != -1:
# 读取FF D9之后的字节
number_bytes = last_bytes[ff_d9_index+2:]
# 将字节转换为整数
file_num = int.from_bytes(number_bytes, byteorder='big')
all_path.append((file_num, os.path.join(dir_name, file)))
else:
print(f"File {file} does not contain 'FF D9'")
except Exception as e:
print(f"Error processing file {file}: {e}")
# 按文件末尾的数字排序
all_path.sort(key=lambda x: x[0])
# 创建新图片
toImage = Image.new('RGBA', (width_i * line_max, height_i * row_max))
# 拼接图片
for i, (_, file_path) in enumerate(all_path):
if i >= row_max * line_max:
break # 只处理需要的图片数量
pic_file_head = Image.open(file_path)
tmppic = pic_file_head.resize((width_i, height_i))
loc = (i % line_max * width_i, i // line_max * height_i)
toImage.paste(tmppic, loc)
# 保存图片
toImage.save('merged.png')
print("Merged image saved as 'merged.png'")
BASE Family Bucket ??? 85->64->85->13->16->32
即解码顺序:base85→base64→base85→rot13→16进制→base32
得到
ThisIsSecret!233
做为密码将zip里文件打开
得到flag{Qr_Is_MeAn1nGfuL}
知识点:解密工具使用,多图片拼接及后缀的改写
[BUUCTF]rsarsa
分析
解题
放入工具,得到d
e = 65537
p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
n = p * q
# 密文
C = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
d = 56632047571190660567520341028861194862411428416862507034762587229995138605649836960220619903456392752115943299335385163216233744624623848874235303309636393446736347238627793022725260986466957974753004129210680401432377444984195145009801967391196615524488853620232925992387563270746297909112117451398527453977
# 求明文
M = pow(C, d, n) # 快速求幂取模运算
print(M)
得出flag{5577446633554466577768879988}
[BUUCTF]zips
解题
打开第一个压缩包,带有加密,暴力破解
然后再次得到压缩包
伪加密,将其改成00
flag文件加密,setup.sh内容如下
#!/bin/bash
#
zip -e --password=`python -c "print(__import__('time').time())"` flag.zip flag
zip -e --password=
:这部分是 zip
命令,用于压缩文件。e
参数表示压缩后的文件应该是加密的。-password=
后面应该跟一个密码,用于加密压缩文件。
python -c "print(__import__('time').time())"
:这是一个子命令,使用反引号(```)来执行。它调用 Python 来执行一个简短的代码片段。__import__('time').time()
会导入 Python 的 time
模块,并调用 time()
函数,该函数返回当前时间的 Unix 时间戳(自 1970 年 1 月 1 日以来的秒数)。
flag.zip flag
:这是 zip
命令的参数,指定了输出的压缩文件名(flag.zip
)和要压缩的文件(flag
)
即运行python -c "print(import('time').time())"
数字大概为破解密码
这里是以时间戳作为压缩包的密码
时间戳,是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数(不考虑闰秒),用于表示一个时间点。
比如现在的时间戳
根据上图代码的使用,猜测这是掩码破解,以15开头(有误差,不一定是17)
1558080832.15
得到flag{fkjabPqnLawhvuikfhgzyffj}