考点:了解CTF中flag的格式一般为flag{}
下载文件,发现里面是一张gif图片,我们查看一下发现总有东西一闪而过
这里我们介绍第一个在Misc图像隐写中非常常用的工具——StegSolve
打开发现只有一个非常小的窗口,点击File->open导入gif图片
Analyse->FrameBrowser使用帧浏览器功能分解gif的帧
用下面的左右箭头查看各个帧的图像,我们发现了隐藏的flag:flag{he11ohongke}
考点:利用工具逐帧查看gif文件图像
下载文件,发现里面是一张jpg图片,我们查看一下貌似什么也没有
1.查看图片的属性是否藏了东西,一定要使用能够查看exif信息的工具,PNG格式的话使用TweakPNG等工具判断是否存在PNG宽高隐写2.使用010Editor、strings等工具发现插入隐藏信息3.使用StegSolve、zsteg等工具发现隐写隐藏信息4.使用binwalk、foremost等工具提取隐藏信息5.使用steghide、盲水印提取等工具提取特定工具隐藏信息,如果有提示最好,没有提示只能一个个尝试了,注意jpeg和png等不同格式的图片文件使用的工具也不一样jpeg:steghide——outguess——png:zsteg——cloacked-pixel——BlindWaterMark-master——kindred-adds/BlindWaterMarkplus
首先我们打开010Editor,导入文件
我们看到花花绿绿一大片的东西,啥啊这是?
JPG格式没有直接保存图像的像素值信息,而是将其转换为YUV色彩空间(Y表示像素的亮度,U和V一起表示色调与饱和度)保存到图像信息中,保存时既可以选择无损压缩也可以选择有损压缩。
JPG文件按照“段”的格式来组织存储,一个文件由多个段组成,每个段代表不同的信息。同时,每个段也有自己唯一的标识符。标识符由两个字节组成,格式形如0xFFXX,其中FF代表不同的类型。
整个JPG图片的组织便是由这些不同类型的段和经过JPG压缩后的数据组成的。(原文来自《CTF那些事儿》)
010Editor的模板功能可以自动为我们带来文件解析后的结果(亮色标记),我们就可以更加直观地看出JPG文件的各个段的位置,我们可以通过模板存储库来检查和添加文件的模板(一般没有模板会在你导入文件的时候提醒你自动下载)
回到题目,我们发现从头到尾文件好像都没什么问题
我们可以ctrl+f进入字符串搜索,因为是CTF题目所以直接搜索flag,查看是否有直接插入的flag信息,果然,我们发现了:
flag插入在文件结尾段的后边,被模板识别为“unknowPadding”段,我们直接可以复制flag提交了
考点:利用十六进制编辑器找到隐藏的信息
这道题我们导入StegSolve,使用查看图片的具体信息功能也可以解开
我们用这个功能可以查看图片的具体信息,其中包括了结尾插入的隐藏Ascii(字符串)
下载文件,发现里面是一张png格式的二维码图片,我们用二维码识别软件QRResearch扫一扫,发现隐藏信息——secretishere,并没有flag
按照图片隐写思路,第一步无果,我们优先打开010editor打开图片查看:
(PNG模板出了点问题,没有很明显的颜色,但不影响分析)
PNG是一种位图文件存储格式,既可以存储灰度图像(只有黑白灰,没有彩色),也可以存储彩色图像。PNG使用从LZ77派生的无损算法压缩图像信息,能获得较高的压缩比,并利用特殊的编码方法标记重复出现的数据,因而对图像的颜色没有影响,也不可能产生颜色的损失,这样就可以重复保存而不降低图像质量。
PNG图像格式文件由文件头和数据块(Chunk)组成。PNG图像整体格式如下:
根据常见的文件头(记一些常用的就好)的记录我们可以发现504B0304是ZIP格式文件的文件头,也就是说这张图片后边插入了ZIP压缩包,我们应该如何把这压缩包从这张图片文件中分离出来呢?
淳朴的复制粘贴手工艺:使用十六进制编辑器,我们把ZIP文件从文件头到文件尾的内容复制一遍,然后新建十六进制文件粘贴上去,保存后上“.zip”的后缀就有了。
利用Binwalk工具自动提取:Binwalk是一个自动提取文件系统,该工具可以自动完成指定文件的扫描,发现潜藏在文件中中所有可疑的文件类型以及文件系统。使用命令:
binwalkQR_code.png-e-e提取隐藏文件即可自动提取出其中的隐藏文件
利用foremost工具自动提取:foremost通过分析不同类型的头、尾和内部数据结构,同镜像文件的数据进行比对,来还原文件。支持19中类型文件的恢复。用户还可以通过配置文件扩展支持其他文件类型。使用命令:
foremostQR_code.png-oyincang-o输出文件名
总而言之,我们分离出了zip文件,我们尝试打开,发现里面存在一个名为“4number.txt”的文件。我们尝试解压却发现压缩包含有密码。
根据文件名“4number”,我们可以猜测解压密码是四个数字,我们使用ARCHPR工具开始进行爆破。
我们打开ARCHPR,导入zip文件,攻击类型选择暴力(按照顺序一个个尝试密码),暴力范围选项选择数字,在长度那一栏最小口令和最大口令都填入4:
然后我们就可以开始爆破了,很快成功的消息就弹出来了:
我们可以知道解压密码为:7639
解压文件,在“4number.txt”中得到了flag
考点:文件分离、压缩包密码爆破
下载文件,发现里面是一张png格式的图片:
我们根据题目提示,优先查看PNG图片是否进行了宽高隐写
因此我们首先根据图片的CRC校验值计算PNG图片正确的长度和宽度:
importbinasciiimportstructcrcbp=open("dabai.png","rb").read()#打开图片crc32frombp=int(crcbp[29:33].hex(),16)#读取图片中的CRC校验值print(crc32frombp)foriinrange(4000):#宽度1-4000进行枚举forjinrange(4000):#高度1-4000进行枚举data=crcbp[12:16]+\ #创建一个数据段,内容为从文件内容的字节12到16(包含第12字节,不包含第16字节),这部分通常是固定的。struct.pack('>i',i)+struct.pack('>i',j)+crcbp[24:29] #将宽度变量'i'和高度变量'j'转换成大端格式的四字节(大端格式:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中)crc32=binascii.crc32(data)&0xffffffff #计算data数据段的CRC校验值,'&0xffffffff'确保CRC校验值为32位print(crc32)if(crc32==crc32frombp):#计算当图片大小为i:j时的CRC校验值,与图片中的CRC比较,当相同,则图片大小已经确定print(i,j)print('hex:',hex(i),hex(j))exit(0)struck.pack(format,v1,v2,...):返回一个字节对象,该对象包含根据格式字符串格式打包的值v1、v2,…。参数必须与格式要求的值完全匹配。
binascii.crc32(data):计算data的32位校验和——CRC-32
运行脚本,可以得到:
保存文件,发现图片的高度恢复出现了新的内容,得到flag:
考点:PNG宽高隐写、理解爆破PNG宽高原理
下载文件,发现里面是一张jpg格式的图片:
又一次,我们在文件尾后面发现了插入的flag:
下载文件,发现里面是一个pcap格式的文件。这是什么东西?
网络分析工具对指定网卡进行数据包捕获,方便工作人员监测网络流量情况。
而pcap格式就是网络分析工具保存的网络数据包,是捕获的从网卡发送或者接收的每一个数据包的离线网络流量。
我希望能够从题目入手,带大家对这方面的内容进行深入理解
回到题目,我们知道了pcap格式是网络分析工具保存的文件,那么我们应该拥有网络分析的工具。我们将重点介绍wireshark,这不仅是题目名,更是非常重要的网络分析工具。
首先我们用wireshark打开pacp文件:
花花绿绿的一大片数据包,我们应该从何处入手?
1.观察分组数(wireshark右下角),如果分组数量较大我们就进行协议分级进行分析,数量较小就逐个人工查看(数量小协议分级效果不明显,但还是可以优先协议分级减小工作量)2.根据协议分级的结果,我们优先分析数量多占比高的协议流量,分析过程根据题目不同思路也有所不同3.如果协议分级中有文件传输协议或是有传输媒体文件内容优先进行导出,一定要使用foremost工具进行辅助4.如果没有思路就搜索“flag”“ctf”等关键词5.涉及到攻击的流量就只能逐个追踪TCP流查看了
对数据包按TCP/IP协议栈从底层向高层逐层进行统计,显示每个协议的数据包数、字节数以及各协议所占的百分比。
我们可以发现应用层HTTP协议占比最高,应该优先分析。
决定哪些数据包被显示,在显示过滤器中输入表达式,使过滤规则生效。
在前面我们已经找到了需要显示过滤来分析的HTTP协议,因此我们在协议分级窗口中选中HTTP协议作为过滤器应用:
在左下角的TCP/IP协议栈解析窗口我们可以以更清晰的格式分析协议的消息结构,我们逐个分析,发现第三个POST请求包的URL加密信息里面找到了“password”字段:
题目说管理员的密码即是答案,因此使用flag{}包起提交即可
考点:网络流量分析、理解HTTP协议数据包结构
我们明白要分析HTTP协议后,直接在显示过滤器中查找包含”flag“字段的数据包有时候能直接找到我们想要的东西:
下载文件,发现里面是一个exe格式的文件,我们运行也运行不起:
这又不是逆向题,给我们exe文件干嘛!所以我们优先使用010editor分析文件:
发现它的内容纯纯的就是一普通的文本文件,根据左上方开头的提示我们发现这些数据是源内容经历了base64编码的jpg格式的图片,因此我们使用cyberchef来进行解码:
解码后的内容虽然是乱码,但看文件头含有“PNG”字段应该就是我们的PNG格式文件了!cyberchef有个很方便的魔法解密功能,可以直接分析出下一步应该如何解密,点击Output栏的魔法棒图标即可自动解密:
可以发现它自动将PNG图片16进制的乱码转为了图片,出现了二维码,直接扫描解密出二维码隐藏的内容:
考点:会使用工具解码base64、会将PNG图片的16进制的乱码转换为PNG图片
我们也可以将输出内容复制粘贴到010editor里面创建新的16进制文件,保存为.png格式也是可以发现二维码图片的。
解出压缩包密码为:2563,打开获得经过base64编码的flag,解码即可:
考点:压缩包密码爆破
下载文件,发现里面是一张jpeg图片,我们查看一下貌似什么也没有
按照图片隐写思路首先查看图片属性的详细信息,在图片的备注中发现了flag:
考点:会查看图片属性。
下载文件,发现里面是一张png图片,我们查看一下貌似什么也没有
虽然题目已经明示了这是一道LSB隐写的图片,但我们还是会按照图片隐写思路做。第一步无果,我们优先打开010editor打开图片查看:
貌似没有插入信息,我们再用string查看:
stringsflag11.pngstrings查询一个二进制文件中所含有的字符信息并将其输出来
跑出一堆没用的乱码,我们可以开始第三步了。
我们使用StegSolve打开图片时,下面有两个箭头,我们点击可以选择调整图片通道来观察是否有隐藏的信息。(视频中有解说,每张图片每个像素点都拥有红绿蓝三种颜色还有透明度的通道)
我们可以发现,当我们关闭红色通道(redplane0)、绿色通道或是蓝色通道时,图片的上方出现了黑白的印记,很显然是二进制的信息,我们继续使用StegSolve进行分析。
主要用于提取比特并排列组合
由我们之前得到的信息可知,应该如下图般配置,配置完成后点击preview查看隐藏信息:
Alpha之前发现透明度通道没有什么隐藏信息,故不选
Redplane0含有隐藏信息
Greenplane0含有隐藏信息
Blueplane0含有隐藏信息
ExtractBy我们发现图片上方在关闭通道出现黑白的印记是横向的,因此按row(行)提取像素而不是column(列)
BitOrder我们知道像素值是按最低位的修改进行隐写的,因此选LSB(像素值最低位作为第一位)
BitPlaneOrder设置RGB通道的顺序,默认RGB
我们发现隐藏信息是一张png图片文件,我们点击SaveBin,将图片保存为.png格式的文件,发现是张二维码图片:
扫一扫即可得到flag
考点:理解LSB隐写原理、学会利用工具
下载文件,发现里面是一个rar的压缩包,根据题目提示,它是伪加密的。
一个ZIP压缩文件由如下三部分组成:压缩源文件数据区、压缩源文件目录区和压缩源文件目录结束标志。具体而言,一个ZIP文件可以按如下方式分解:
[本地文件头+文件数据+数据描述符]{1,n}+目录区+目录结束标识[本地文件头+文件数据+数据描述符]构成压缩源文件数据区
{1,n}表示这部分数据最少出现1次,也可以出现n次,n的数量和压缩前的文件数量一致
目录区会保存压缩前文件和文件夹的目录信息,这部分数据一般均为明文显示
目录结束标识存在于整个压缩包的结尾,用于标记压缩的目录数据的结束
(源于《CTF那些事儿》)
回到题目,我们使用010editor打开zip文件:
我们可以在压缩源文件数据区中可以找到全局方式位标记,它的值为0900:
当全局方式位标记的第二个数字(即0900中的第二个数字9)为奇数时,ZIP文件被识别为加密;而当这个数字为偶数时,文件被视为未加密。因此,我们将0900改为0000,保存后就可以直接打开压缩文件了:
考点:理解zip伪加密原理
下载文件,发现里面是一个pcapng格式的文件,我们使用wireshark打开查看:
按照数据包分析思路,我们先进行协议分级:
可以发现HTTP协议占比最高,并且看HTTP协议内容像是在上传媒体文件:
flag可能就隐藏在这上传的文件里面,我们应该如何提取这其中的文件呢?
点击全部保存即可,我们依次分析发现upload(3).php中包含一张jpg图片,并且结尾处插入了flag:
当离线流量太大或者传输文件头受损时,这种方法会失效;而且导出对象法支持的协议过少,应用范围有限。
方法二:导出分组字节流法。我们在找到的传输文件的HTTP包的内容进行导出分组字节流:
保存类型默认为.bin文件,但我们可以改成.jpg,并使用010editor进行分析:
我们也可以在结尾处发现插入的flag。
这是一种完全由人工操作的提取方法(再不济直接把16进制文本复制下来修复),具有广泛的适用性。
方法三:binwalk提取法。利用binwalk对离线流量文件进行检测和提取:
我们发现这道题分解不出来,所以我们使用以下命令指定输出文件:
binwalk-D=jpeg被嗅探的流量.pcapng发现图片文件貌似受损,但使用010editor还是能发现其中隐藏的flag:
binwalk检测的原理是根据文件头特征,如果流量中文件的文件头损坏binwalk也无法提取成功,这时仍需手工提取。
考点:网络流量分析、理解HTTP协议数据包结构、学会提取流量包中的文件
下载文件,发现里面是rar格式的压缩包,根据题目提示,这是我们遇到的第三个需要爆破密码的压缩包了,我们直接爆破得到密码:
解开rar文件,获得flag
下载文件,发现里面是一张png格式的二维码图片,我们用二维码识别软件QRResearch扫一扫,发现flag:
考点:会扫二维码。
按照文件名提示我们应该使用Stegsolve来查看,在此跳过图片隐写思路前两步直接使用Stegsolve打开,调整通道查看图片发现:
我们可以发现,当我们关闭红色通道(redplane0)、绿色通道或是蓝色通道时,图片的上方出现了黑白的印记,很显然是隐藏的二进制的信息,我们继续使用StegSolve进行分析:
我们可以以文本形式保存,获得flag。相当于我们再次复习了LSB隐写的题目。
下载文件,发现里面是一张jpg格式的图片
我们可以发现EOIMaker是jpg文件的文件尾,后面的unknownPadding[204]块大小为9721h也就是之后的内容无法被PNG模板解析,看文件头是zip压缩文件
根据前文我们进行文件分离,获得加密的ZIP文件:
按照题目提示,密码是四位数字,爆破密码成功:
使用密码解压,获得flag
按照图片隐写思路,查看文件属性发现备注:
我们再优先打开010editor打开图片查看:
发现文件尾部含有插入的zip文件:
提取zip文件,发现加了密,我们使用之前在属性里面看到的字符串尝试,成功提取flag
考点:文件分离、压缩包密码猜测
我们再优先打开010editor打开图片查看,发现文件尾部含有插入的rar文件:
提取zip文件,发现加了密,按照题目提示我们进行密码爆破:
提取出flag
首先我们用wireshark打开pcap文件:
非常容易,我们可以看见TCP协议传输Data数据内容,我们直接过滤观察数据包:
发现上传了38个Data数据包,每个包包含一个字节,查看前几个包内容可以发现发送的字符串为“FLAG”
也就是说我们将这些Data数据包的内容组合起来就能得到flag
我们的一个完整的数据流一般都是由很多个包组成的,我们在这里跟踪TCP协议数据流可以将Data数据组合:
追踪TCP流可以得到flag
考点:网络流量分析、学会追踪协议流量
模板解析不好,我们直接搜索是否存在”flag“字符串,发现隐藏的flag:
按照提示经过base64解码,得到了flag
考点:寻找插入隐藏flag、理解base64编码
“flag”查询未果,但发现文件结尾插入了规律的二进制字符串:
我们进行二进制转码,得到了隐藏的flag:
考点:寻找发现插入隐藏信息、理解二进制转码
下载文件,发现里面是rar格式的压缩包,根据题目提示,这是我们遇到的不知道多少个需要爆破密码的压缩包了,我们直接爆破得到密码:
打开之后,发现了奇怪的内容:
得到flag
考点:压缩包密码爆破、理解brainfuck编码
首先我们用wireshark打开pcapng文件:
发现HTTP协议发送的Line-basetextdata占比最多,我们优先过滤查看:
追踪HTTP流,发现发送的数据经过了base64编码:
解码,发现是张图片,获得隐藏在图片中的flag:
考点:网络流量分析、学会追踪协议流量、base64解码图片文件
下载文件,发现里面是一张png格式的图片
没有宽高错误,也没有隐藏的插入信息,我们使用StegSolver进入第二步:
我们可以发现,当Redplane0、Greenplane0、Blueplane0时,图片顶部出现规律的黑白组合,我们进一步分析LSB隐写:
可以发现内部隐藏了一个ZIP文件,提取会报错但我们硬提取,文件提取出来发现发现是elf文件:
我们用linux系统运行看看:
发现了flag
考点:理解LSB隐写原理、学会利用工具、理解ELF文件
下载文件,发现里面是一张jpg格式的图片和一个压缩包
(盲文输入器也在网站下方)
输出文本出现乱码,我们盲文类型:
猜测这是zip压缩包的解压密码,于是我们解压文件,发现了一个音频文件
1.听一下,再查看音频的属性是否藏了东西2.使用Audacity观察音频是否藏有信息3.使用010Editor、strings等其他工具发现插入隐藏信息,并使用binwalk和foremost尝试自动提取4.使用steghide、SilentEye、mp3stego等其他特殊工具提取隐写信息
回到题目,我们听到了熟悉的摩斯电码,因此推测与摩斯电码有关
音频的属性没有什么信息,我们接下来使用Audacity打开音频
可以查看音频的波形图,有些信息可能就藏在波形图里面:
我们可以发现音频的波形图按照类似于摩斯电码的“-“和”.“组成,我们进行解码:
解出flag
(按照buuctf的格式应去掉”CTF“并小写,写为flag{wpei0873223dz})
考点:盲文解密、摩斯电码音频
下载文件,发现里面是一个网站目录的文件夹
(如果你打开了杀毒软件,那么很快有问题的文件就会被发现并且删除)
我们首先打开文件夹,发现小白搭网站的目录结构:
一般来说,我们应该逐个查询各个文件寻找是否存在木马文件,但我们有自动化的工具可以帮我们实现这一点
D盾是目前最为流行和好用的web查杀工具,同时使用也简单方便,在web应急处置的过程中经常会用到。D盾的功能比较强大,最常见使用方式包括如下功能:
1、查杀webshell,隔离可疑文件;
2、端口进程查看、base64解码以及克隆账号检测等辅助工具;
3、文件监控。
我们将网站根目录文件放入D盾查杀工具扫描,发现了可疑文件:
我们优先重点观察第三个风险级别为5的文件:
找到了webshell,套上flag{}提交
考点:使用工具扫描寻找可疑后门文件
我们首先打开文件夹,发现朋友搭网站的目录结构:
我们查看第一个文件,找到了webshell,套上flag{}提交(与上一题的flag一模一样……)
下载文件,发现里面是一个wav格式的音频文件
播放音乐,发现是《NyanCat》的循环播放
按照音频隐写思路,音频的属性没有什么信息,我们接下来使用Audacity打开音频:
我们可以发现这首歌有两个音频轨道,右声道轨道放歌,左声道轨道隐藏着信息
我们将右声道静音,听听左声道的信息,发现是摩斯电码,我们按照波形图进行解密:
考点:音频双音轨隐藏信息、摩斯电码音频
我们可以在结尾发现插入隐藏的ZIP文件,我们进行文件分离:
手工提取失败,我们尝试利用binwalk工具自动提取:
文件分离出一个压缩包文件,我们尝试解压,发现压缩包被加密
可以发现这个ZIP文件的目录区存在伪加密的情况,我们进行修改并打开文件:
我们提取出一个vmdk文件
VMDK是VMwareVirtualMachineDisk(虚拟机磁盘)的缩写,它是VMware虚拟化软件使用的虚拟磁盘映像文件格式之一。VMDK文件存储了虚拟机的硬盘数据,类似于实际计算机系统中的物理硬盘。
VMDK文件是一种二进制文件,用于模拟和存储虚拟机的硬盘。它包含了虚拟机操作系统和应用程序所需的文件和数据,包括操作系统文件、应用程序、配置文件和用户数据等。在运行虚拟机时,VMware虚拟机管理器会读取和操作VMDK文件,提供虚拟机所需的存储和访问功能。
我们可以使用7z来提取vmdk虚拟磁盘文件中的内容:
我们得到两个文件夹:
我们在key_part_one中发现了_NUL文件,我们查看其内容:
按照前面的经验,我们可以知道这个是brainfuck编码的内容,我们进行解码
我们得到了flag的碎片1
我们在key_part_two中发现了where_is_flag_part_two.txt文件,我们查看其内容:
里面没有内容,我们查看文件的属性也没发现什么有用的信息:
我们使用7z打开vmdk文件查看详情:
我们可以发现where_is_flag_part_two.txt文件存在1交替数据流
NTFS(一种文件系统,用于明确磁盘或分区上的文件的方法和数据结构)交换数据流(ADS)简介
要使用7z查看这个文件的隐藏文件,我们使用7z的交替数据流的功能:
这是OOK编码,我们同样可以使用上面的网站进行解码:
我们得到了flag碎片2,拼凑出了完整的flag
考点:文件分离、使用工具分析vmdk文件、理解brainfuck编码、理解交替数据流隐藏文件、理解ook编码
下载文件,发现里面是一个.bin格式的配置文件(文件名为config的一般为配置文件)
bin是binary的缩写,译为“二进制”。binaryfile二进制文件是一个非textfile文本文件的计算机文件。binaryfile是一种计算机文件格式,它以二进制编码表示文件的内容。这些文件通常包含计算机程序或数据,例如软件/固件、操作系统、文档、图像、音频和视频等。在嵌入式软件开发中,binaryfile通常是软件固件或操作系统的映像文件,binaryfile通常用于将代码和数据加载到嵌入式系统的nonvolatilememory非易失性存储器(如flashmemory)或其他存储器中。此外,binaryfile还可以用于将数据从一个嵌入式系统传输到另一个嵌入式系统。
在操作系统中,可执行文件和库文件通常以二进制格式存储。
在网络通信中,binaryfile可以被用作数据传输的格式,如HTTP请求和响应、SMTP邮件等。
一般来说我们可以使用十六进制编辑器查看.bin文件的内容,但我们使用010editor打开发现是一片乱码:
由题目提示可以猜测,”宽带数据泄露“可以猜测题目的config.bin文件为一路由器的配置文件,我们可以使用RoutePassView工具查看配置文件具体内容
题目的提示并不充分,我们应用这个软件是为了寻找路由器配置的用户名、密码等信息的,因此flag很有可能就是路由器配置的用户名、密码等信息
将其包裹上flag{},即可过关
考点:理解.bin文件作用、使用工具分析路由配置文件
按照模板解析除了很多层的东西,看上去很有可能插入了隐藏文件
手动提取其中的隐藏文件看上去有点困难,我们使用binwalk自动提取:
文件分离出两个加密的压缩文件,我们尝试以图片文件的文件名“123456cry”作为密码输入,失败了因此我们逐个分析压缩包的伪加密情况,发现了这个压缩包的一个deFlags为“2049”而其他的deFlags为“2048”,判断存在伪加密:
我们进行修改,解压文件:
又是一张图片,我们继续按照图片隐写的思路进行分析
并没有发现什么东西,使用了StegSolve也没有看出任何隐藏信息,因此我们开始使用特定工具分析图片包含的隐藏信息。此类特定工具很多,我们将按顺序一一尝试
Steghide是一个可用于隐写术的工具。它允许您在音频和图像文件中嵌入秘密信息,包括JPEG、BMP、WAV和AU文件
我们在kali中使用命令:
steghideextract-sfgood-已合并.jpg-sf指定文件
Enterpassphrase输入密码,没有密码就直接回车
我们可以发现我们的图片中提取除了ko.txt的隐藏文件:
我们对压缩包进行解压,得到flag
考点:文件分离、理解zip伪加密原理、使用了特定工具进行的图片文件隐写
我们可以发现应用层HTTP协议占比最高,应该优先分析:
我们可以发现一些HTTP请求报文,在编号为4的数据包可以发现主机向服务器使用POST方式请求上传了“name”和“word”参数,我们可以猜测这是账号和密码,按照题目需求,我们进行MD5加密,得到了flag:
下载文件,发现里面是一个xls格式的表格文件,我们点击查看:
里面全是乱码,但我们可以看出存在ZIP格式文件头字符“PK”,我们将文件后缀改为.zip后打开查看:
我们可以看见有很多文件夹,因为如今的office办公软件的输出文件其实都是一个压缩包,包含着文件的xml文件、图片、视频等所有素材。
经过一番搜寻,我们最终找到了flag:
考点:理解office文件是一堆文件的压缩文件
我们可以发现UDP协议占比最高,但存在基于TCP协议的FTP文件传输协议,我们优先查看传输的文件:
可以发现编号为49的ftp数据包传输了名为“flag.rar”的文件,我们导出对象:
我们没有任何其他的密码提示,rar格式不存在伪加密的情况,因此我们开始一边进行密码爆破一边继续分析
密码爆破成功,我们解压文件得到了flag:
考点:网络流量分析、理解FTP协议数据包结构、学会提取流量包中的文件、压缩包密码爆破
我们可以在结尾发现插入隐藏的ZIP文件,我们进行文件分离,得到的压缩包中含有一个docx文档,我们打开查看:
是一个二维码,我们进行扫描得到了flag:
考点:文件分离
下载文件,发现是一个加密的压缩包:
题目没有提示,我们优先查看zip的伪加密情况:
可以发现一处deFlags的值为“9”,与其余的deFlags值“0”不同,在此修改后成功解压文件:
我们优先查看txt文本文件,打开发现:
底下是互联网著名的佛曰加密,我们在进行解密得到了flag:
(现在网上在线的佛曰解密多是新版佛曰,因此这里使用了解密工具“[随波逐流]CTF编码工具V5.420140328”)
考点:理解zip伪加密原理、理解佛曰加解密
下载文件,发现是一个损坏的压缩包:
我们优先使用010editor进行分析,发现它应该是一个png格式的图片:
我们直接将后缀名修改为.png,得到图片:
扫描二维码,被骗了:
按照图片隐写思路,第一步无果,我们优先打开010editor打开图片查看,在结尾处发现了插入隐藏的flag:
考点:分析十六进制文件头
按照题目提示,这道题是使用特殊的隐写工具隐藏信息的,因此我们需要找到使用的是什么工具
此工具使用的是java语言,我们输入命令:
java-mx40MExtractMisc.jpg-mx40M不清楚做什么用的,按照官方文档说使用这样的命令进行解密
生成了隐写信息的输出output.txt:
我们可以发现zip文件的文件头字符“PK”,因此我们修改后缀,解压文件发现需要密码:
我们使用010editor进行分析,发现是伪加密:
修改后即可解压获得flag
考点:使用了特定工具进行的图片文件隐写、理解zip伪加密原理
我们可以发现TCP协议占比最高,但存在基于TCP协议的FTP文件传输协议,我们优先查看传输的文件:
可以发现编号为95的ftp数据包传输了名为“6b0341642a8ddcbeb7eca927dae6d541.rar”的文件,我们导出对象:
导不出来,因此我们使用foremost工具进行导出:
压缩包被加密了,我们没有任何其他的密码提示,rar格式不存在伪加密的情况,因此我们开始一边进行密码爆破一边继续分析
发现文件尾部有插入隐藏zip文件,我们进行文件分离并解压得到密文和密钥:
cipher文件是乱码,key文件是base64编码后的密文,我们进行解码:
key的内容是“NickiMinaj最喜欢的关于蛇的歌是什么?”
我们之间上网搜索,明白了NickiMinaj是一位歌手,她唱过一首名为《Anaconda》(蟒蛇)的歌
那么我们可以猜测key的值为“Anaconda”
key的值不为“Anaconda”,那我们可以尝试一下“anaconda”
得到了正确的flag
下载文件,发现里面是两张gif格式的图片
回到题目,我们可以发现“篮球副本.gif”文件文件头损失,我们进行修复:
我们以文本格式进行编辑,在文件头的部分添加4字节数据(由“篮球.gif”和“篮球副本.gif”两个文件对比可发现损坏的文件头缺少四字节的内容)
返回到十六进制的编辑方式,我们将添加的4字节数据更改为文件头:
再次运行模板发现成功识别出gif文件了,我们可以直接打开图片查看内容:
得到了flag
考点:文件头修复
下载文件,发现里面是一个rar格式的压缩文件
按照文件名提示的“四位数”,不用说直接上爆破:
解压后得到了一张JPG格式的图片,我们按照图片隐写思路查看文件属性找到flag:
根据响应包返回的内容我们可以推测tcp流1在探测服务器的主机信息
根据响应包返回的内容我们可以推测tcp流2在探测服务器的目录
根据响应包返回的内容我们可以推测tcp流3攻击机在向服务器请求“xxd_8.0.1257-2_amd64.deb”这个文件
根据响应包返回的内容我们可以推测tcp流4、5在探测服务器的目录,我们可以发现flag.txt的身影
根据响应包返回的内容我们可以推测tcp流6攻击机在向服务器请求“vim-common_8.0.1257-2_all.deb”这个文件
根据请求包发送的内容我们可以推测tcp流7在上传一个文件,再请求回显当前目录我们可以发现多了一个6666.jpg的文件,我们可以推测这就是上传的文件,我们复制下来进行解码查看(注意上传图片文件的参数是“z2”):
我们可以发现上传的是一张图片文件,尝试了之后图片的内容并不是flag,我们继续分析:
根据响应包返回的内容我们可以推测tcp流8攻击机在向服务器请求“less_487-0.1_amd64.deb”这个文件
根据响应包返回的内容我们可以推测tcp流9创造了一个“hello.zip”文件,并且向服务器请求了这个文件,我们可以将返回包的zip文件内容复制进行手动文件提取,或者使用foremost工具自动提取:
解压发现需要密码,我们尝试将前面的图片文件的内容进行尝试成功,得到flag
考点:网络流量分析、理解webshell的利用方式
按照图片隐写思路,第一步使用TweakPNG工具发现图片的crc校验出现错误,因此可能存在PNG宽高隐写
我们使用之前写的PNG宽高爆破脚本,可以得到正确的图片宽高,我们进行修改即可:
打开图片,发现了隐藏的flag
下载文件,发现里面是一张png格式的二维码图片,我们用二维码识别软件QRResearch扫一扫,发现并没有flag
发现了插入隐藏的rar文件,我们进行手动文件分离得到了:
鉴定为base64编码,我们进行解码,提交发现这并不是flag
这说明这张图片还有其他隐藏的信息,我们再使用binwalk自动提取工具进行提取查看:
藏的东西可真多啊……
我们逐一查看分析:
716A.rar包含的内容就是“flag.jpg”与“看看flag在不在里面_.rar”两个文件,压缩文件显然加密了
我们尝试使用”encode.txt“的解码内容,成功解压:
根据文件名这么讨嫌的说法已经可以猜测flag不在里面了……我们先继续分析其他的文件
7104.rar就是前文发现的“encode.txt”
17012.rar包含了“flag.doc”
一大串乱码鉴定为base64编码,我们进行解码,发现密文貌似没什么变化,这可能是进行了多次base64编码,我们也进行多次base64解码:
总共进行了20次base64编码,得到了一字符串,尝试提交发现也不是flag
18394.rar加密的压缩文件
使用之前得到的字符串作为密码成功解压,得到了“good.mp3”,一听鉴定为摩斯电码,我们使用Audacity观察其声波输入摩斯电码进行解密:
(按照buuctf的格式应小写,写为flag{morseisveryveryeasy})
考点:文件分离、压缩文件密码猜测、理解base64多次编码、摩斯电码音频
下载文件,发现里面是一张gif格式的图片与提示文件
可以发现和坤坤那题一样,GIF文件头缺失,我们进行修复即可:
我们查看一下发现flag都是一段一段的出现又一闪而过,我们可以使用StegSolver进行逐帧分析:
将字符串拼接起来并进行base64解码,得到flag
考点:文件头修复、利用工具逐帧查看gif文件图像
下载文件,发现里面是一个xls格式的表格文件,我们点击查看发现加密了:
考点:学会使用010editor查看打不开的文件
下载文件,发现里面是一张png格式的图片,按照条形码只有两种“短”和“长”的形态可以猜测这是摩斯电码:
我们进行解密,得到了flag
考点:理解摩斯电码
按照图片隐写思路,第一步可以发现详细信息中隐藏着提示:
我们可以在结尾发现插入隐藏的信息,我们可以分析出这是十六进制编码的内容,我们进行解码:
我们得到了一大堆的坐标格式的内容,我们保存输出结果。根据图片属性中给出的提示,我们可以推测这是使用画图工具绘出图像。在此我们可以使用gnuplot工具(当然也可以使用python具有绘图功能的库如matplotlib)
gnuplot可将数学函数或数值资料以平面图或立体图的形式画在不同种类终端机或绘图输出装置上。它是由ColinKelley和ThomasWilliams于1986年开发的绘图程序发展而来的,可以在多个平台下使用。gnuplot既支持命令行交互模式,也支持脚本。
在使用gnuplot之前,我们应该把输出的坐标更改为gnuplot可以识别的模式,我们可以使用记事本的编辑功能或者自己写脚本:
我们打开gnuplot.exe,使用以下命令:
load(gnuplottxt.txt的文件路径,如果直接把txt文件放到gnuplot的文件路径下可以略过这一步)plot"gnuplottxt.txt"即可绘出一副二维码,我们进行扫描获得flag
考点:利用十六进制编辑器找到隐藏的信息、学会使用数学坐标绘图工具
下载文件,发现里面是一张jpg格式的图片和flag.txt文件的提示(其他文件名带“._”的文件可以忽略,他们并不是题目的一部分)
根据flag.txt和题目名的提示我们可以明白这题目使用了特殊的隐写工具——outguess
outguess是一款开源的隐写工具,可以隐藏信息在图像和声音文件中。它使用了一种基于数据的方法,而不是基于修改的方法来隐藏信息,这使得它更加难以被检测到。
使用outguess隐写信息需要加密信息的密码key,也就是说我们需要找到key来找出jpg图片中隐写的信息。
按照图片隐写思路,第一步我们在图片属性中的详细信息中发现了内容:
这是一个很有意思的编码方式,叫做“社会主义核心价值观编码”,我们可以使用在线或者本地工具进行解码:
解码出“abc”,我们可以推断出这就是我们需要的key,现在我们可以使用以下命令使用outguess进行解密了:
outguess-k'abc'-rmmm.jpgflag.txt-k指定key
-r指定输入文件和输出文件
成功解出flag
考点:理解特殊编码方式、使用了特定工具进行的图片文件隐写
我们可以在结尾发现插入隐藏的rar文件,我们进行文件分离,得到的压缩包中含有一张gif图片和flag.txt文件,我们尝试打开gif图片却发现压缩文件被加密了,因为没有找到其他提示所以我们优先进行爆破:
解压文件,发现这个gif真的有够长的,我们先使用stegsolve来逐帧查看,在第310帧发现了奇怪的图片:
尝试上交发现并不是flag,我们先将这一帧图片进行保存再继续分析:
最后我们发现在关闭红色通道(redplane0)时会出现一张二维码,我们进行扫码即可获得flag
下载文件,发现里面是一个mp3格式的音频文件
按照音频隐写思路,我们听出音频中含有摩斯电码的声音,音频的属性没有什么信息,我们接下来使用Audacity打开音频:
发现右声道存在摩斯电码,我们进行解码:
得到flag(这里出现了两段摩斯电码,第二段是第一段摩斯电码前半部分的重复内容,按照题目提示flag为小写的32位字符,我们不用管就行)
按照图片隐写思路,第一步我们在图片的备注中发现了盲文:
我们可以发现盲文的末尾含有等号,这说明这并不是真正的盲文内容,应该时经盲文加密后的内容(盲文翻译和盲文加密是两个东西)
考点:会查看图片属性、理解盲文加密与盲文翻译的区别
下载文件,发现里面是一个exe格式的可执行文件
我们先直接运行,它会生成一个1.txt:
根据提示我们可以知道这是NTFS文件隐写,在前文交替数据流的内容中已经简介了这种隐写方式了,文件偷偷携带着附加的信息。
我们可以使用7z打开这个文件来探索它的隐藏内容,发现了flag:
考点:理解NTFS文件隐写
下载文件,发现里面是一份txt格式的文本:
鉴定为brainfuck编码,我们进行解码:
考点:理解brainfuck编码
下载文件,发现里面是一份txt格式的文本(还有公众号的二维码图片,扫码获得提示):
我们可以看到一串串的base64编码内容,再根据题目名的提示我们可以判断这里存在base64隐写。
Base64的编码过程就是将文本字符对应成二进制后,再六个一组对应成索引,转为编码字符。如果字符串长度不是3的倍数,则对应的二进制位数不是6的倍数,需要在末尾用0填充。若剩1个字符则在编码结果后加2个‘=’;若剩2个字符则加1个‘=’。
Base64的解码过程,即先丢弃编码后面的‘=’,然后将每个base64字符对应索引转为6bit的二进制数,再8个一组转为ASCII码字符完成解码,最后若剩下不足8位的,则全部丢弃。
所以某些bit位在解码时会被丢弃,换句话说,这些bit值不会对解码结果产生影响。一个简单直观的例子就是QUJDRA和QUJDRC解码后都是ABCD。由此我们便可以将隐藏信息插入这些bit位中实现隐写。
这里再给个例子:
Terra这一字符串的长度为5,非3的倍数,在转为6位二进制字串时添加了两个0(红色加粗部分)。编码后的结果为VGVycmE=:
倘若添加的二进制值不全为0,虽然会改变“=”号前最后一个字符的值,使编码后的字符串变为VGVycmH=。但该字符串进行Base64解码的结果依然是Terra:
末尾有两个“=”字符的编码字符串同样如此,Lucy字符串正常编码应为THVjeQ==
修改后为THVjeV==,同上,进行base64解码结果依然是Lucy
若像这样对多个base64编码字符串结尾进行修改,即可隐藏更多的信息,这就是base64隐写。
一串Base64的编码最多也只有4bit的隐写空间,所以实现隐写往往需要大量编码串。隐写时把明文的每个字符用8位二进制数表示,由此将整个明文串转为bit串,按顺序填入Base64编码串的可隐写位中即可实现隐写。
它可以自动帮我们进行base64隐写的解密,直接获得flag:
考点:理解base64隐写
我们可以在结尾发现插入隐藏的rar文件,我们进行文件分离,压缩文件被加密了,因为没有找到其他提示所以我们优先进行爆破:
解压出的flag.txt中包含一大堆乱序的字符:
#-*-coding:utf-8-*-#Author:mochu7alphabet="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+-=\\{\\}[]"strings=open('./flag.txt').read()result={}foriinalphabet: counts=strings.count(i) i='{0}'.format(i) result[i]=countsres=sorted(result.items(),key=lambdaitem:item[1],reverse=True)fordatainres: print(data)foriinres: flag=str(i[0]) print(flag[0],end="")puzzlesolver也拥有字频统计的功能:
我们可以发现字频统计的结果中排列在前18的字符包含了flag
考点:文件分离、字频统计
根据密文特征与题目提示,我们可以确定加密方式为类凯撒密码的替换式密码加密,我们直接进行解密得到flag:
考点:理解类凯撒密码替换式密码加密
根据密文特征与题目提示,我们可以确定加密方式为键盘加密,你真的低个头直接进行解密得到flag:
考点:打开脑洞理解键盘加密
我们可以在结尾发现插入隐藏的rar文件,我们进行文件分离,解压出的1.txt中包含一大堆颜文字:
因为是没见过的加密方式,所以我们启用万能的互联网:
解密出flag
可以发现是数字和字母混合的字符串,里面的字母最大不超过“f”,说明是16进制的编码,我们进行解码:
发现是rar文件,我们保存为.rar的格式文件,又加密了,我们进行密码爆破:
解压后得到一张png格式的图片
我们可以发现文件内容含有“JFIF”字符串,应该是属于jpg图片格式的特征,而文件头却是png图片格式的,文件头格式错误我们进行修复(可以挪用正常的jpg图片的文件头):
修复好的图片直接为我们展示了flag:
下载文件,发现是一个加密了的zip压缩文件,而里面的“密码.txt”可以解压出来进行分析:
我们可以使用010editor中自带的一些编码方式尝试解码:
最后我们发现使用EBCDIC编码方式时出现了压缩包的密码:
解压文件,发现了一堆jpg格式的图片:
下载文件,发现里面是一个rar的压缩包,尝试解压失败我们使用010editor查看:
文集那头除了问题,我们进行修复:
提取出一个docx文件:
发现文件尾部含有插入的疑似jpg图片的文件并且文件头含有隐藏信息
我们先对隐藏信息进行分析,字符串全部由大写字母与数字组成,数字出现的仅有2-5组成
Base32是一种数据编码机制,使用32个可打印字符(字母A-Z和数字2-7)对任意字节数据进行编码的方案,编码后的字符串不用区分大小写并排除了容易混淆的字符,可以方便地由人类使用并由计算机处理。
可以猜测并发现是base32编码内容,解码即可得到flag:
考点:利用十六进制编辑器找到隐藏的信息、理解base32编码特征
下载文件,发现里面是两个加密的zip的压缩包:
flag2.zip没有任何密码提示,也没有伪加密的情况,我们先对flag3.zip继续分析
flag3.zip的注释中提示了密码,我们进行爆破:
解压出内容:
我们打开flag.docx查看:
没有隐藏的内容,我们推测这里的内容5.20和7.11会是一种提示,图片可能含有隐藏信息我们之后再进行分析
1.如果视频内容较短,优先使用Kinovea等工具逐帧查看所有内容寻找隐藏内容2.使用010editor分析插入隐藏信息3.使用了特定工具的MP4隐写
按照思路加上前面的提示内容,我们优先逐帧查看(尤其是5秒和7秒左右)“影流之主.mp4”查看是否含有隐藏信息:
发现画面中的灯上隐藏了信息:
组合起来的内容并不是flag,我们推测是flag2.zip的解压密码,解压成功
发现里面是一张jpg格式的图片
发现了插入隐藏的flag
考点:压缩包密码爆破、MP4文件的分析、理解敲击码、利用十六进制编辑器找到隐藏的信息
下载文件,发现里面是一个rar的压缩包,解压后爆了一大堆txt文件,内容都是一样的:
按照题目提示,“NTFS数据流”说明flag.rar压缩包含有NTFS交换数据流隐藏数据,我们使用7z工具进行按照交替数据流方式排列查看:
可以发现293.txt文件携带着附加的信息就是flag
考点:理解交替数据流隐藏文件
HTTP数据包还是有很多,我们导出HTTP对象看看:
可以发现攻击机一直在向index.php进行请求,看得出来是在使用GET请求修改URL来进行SQL注入
我们只好进行逐行分析,首先使用tshark进行导出更方便分析:
我们打开文件进行SQL注入过程的分析(为了方便分析,在此将所有%20替换为了空格):
(1~9行)获取information_schema.SCHEMATA中数据行数的长度,从中可以知道长度是1
(10~18行)获取information_schema.SCHEMATA中数据行数chr(53)='5',
即infomation_schema.SCHEMATA有5行数据information_schema.SCHEMATA中保存了所有数据库,所以总共爆出5个数据库
可以发现第一个数据库长度为18
第二个数据库长度为3
第三个数据库长度为7
第四个数据库长度为4
第五个数据库长度为5
即infomation_schema.COLUMNS有1行数据information_schema.COLUMNS中保存了所有字段,所以在“db_flag”中总共爆出2个字段
可以发现第一个字段长度为2
第二个字段长度为4
(546~601行)获取每一个字段名,并发执行
即db_flag.tb_flag有1行数据db_flag.tb_flag中保存了所有数据,所以在“db_flag”中总共爆出1个数据
(620~627行)获取数据的长度,可以发现数据的长度为38
(628-972行)获取数据值这一步就是我们要找的flag了,我们可以逐一手动提取,也可以写一个脚本提取一下。
我们知道注入语句为
id=1andascii(substr(((selectconcat_ws(char(94),flag)fromdb_flag.tb_flaglimit0,1)),{第i个字符},1))>{字符的ascii值}我们把第i个字符和ascii值提取出来,取i变化时的值,脚本为:
考点:SQL注入流量分析
下载文件,发现里面是一个pcap格式的文件,我们使用wireshark打开查看:
发现HTTP协议发送的MediaType占比最多,媒体文件我们尝试导出对象查看:
我们优先分析图片,使用010editor逐一查看没有发现不对劲的,我们开始使用stegsolve,发现了scanlines.png图片文件在很多通道中会显示一条线:
但在logo.png的一个通道中显示出了flag:
上网查了其他人的wp,发现在此应该使用Stegsolve的图像组合
发现logo.png有一条很可疑的直线,我们将它与scanlines.png进行图像拼接:
考点:提取流量包中的文件、LSB隐写(?)
发现HTTP协议占比最多,看了下好像是有在文件传输,我们尝试导出对象查看:
值得注意的有secret.zip和hint.html(提示)文件,zip文件加密了我们先打开提示看看:
已经是明示zip存在伪加密了,我们进行修改解压即可在flag.swp文件中找到flag:
考点:提取流量包中的文件、寻找导出对象重点文件、理解zip伪加密原理
下载文件,发现里面是一个docx格式的表格文件,我们点击查看:
没发现藏着什么东西,因为如今的office办公软件的输出文件其实都是一个压缩包,包含着文件的xml文件、图片、视频等所有素材,我们将文件后缀改为.zip后打开查看找到了flag:
我们可以看到一串串的base64编码内容,我们可以判断这里存在base64隐写
在此我使用puzzlesolver自动进行base64隐写的解密:
下载文件,发现里面是一个iso格式的文件:
带有.iso扩展名的文件是未压缩的存档磁盘映像文件,它代表光盘(如CD或DVD)上的全部数据内容。基于ISO-9660标准,ISO映像文件格式包含光盘数据以及存储在其中的文件系统信息。ISO文件包含内容的精确副本的能力使其成为创建CD/DVD副本的完美文件类型,并且主要用于存储可引导数据以进行安装。大多数时候,ISO文件被刻录到USB/CD/DVD作为可引导内容,用于引导机器进行安装。ISO文件的MIME类型为application/x-iso9660-image。
映像文件中的内容各种各样,我们需要分情况分析,但首先我们用7z工具查看其中的内容:
我们进行解压,大部分是空文件,还有一个类似提示的说明:
我们尝试运行exe文件:
我们可以发现它是一个自解压程序,貌似我们尝试获取机密时身份识别立刻生效将文件销毁了。
一个SFX(SelF-eXtracting)自解压文件是压缩文件的一种,因为它可以不用借助任何压缩工具,而只需双击该文件就可以自动执行解压缩,因此叫做自解压文件。同压缩文件相比,自解压的压缩文件体积要大于普通的压缩文件(因为它内置了自解压程序),但它的优点就是可以在没有安装压缩软件的情况下打开压缩文件(文件类型为·exe格式)。
我们将该exe文件使用7z当做压缩包打开观察里面包含的内容:
我们可以推测我们尝试获取机密时运行的是“flag.exe”文件,但很快接着运行了“文件已被销毁.exe”文件,我们将“systemzx.exe”进行解压并运行“flag.txt”即可得到flag机密文件:
注意:这机密文件还是隐藏的,我们需要开启查看隐藏文件的选项才能看到:
看到了不认识的后缀文件,我们使用010editor打开,被模板解析后没有发现插入隐藏的文件,我们直接搜索文本“flag”:
发现了其中藏着的“flag.exe”,手动提取看似非常困难,我们使用工具自动提取:
貌似无法分解,我们尝试使用foremost:
我们发现foremost按照文件格式分解出了很多文件,我们一个个分析:
exe文件夹中自解压程序强行提取被损坏了
ole文件是看不懂的格式,先跳过
rar文件包含了“flag.exe”,运行即可得到flag
考点:理解iso文件格式、理解自解压程序
按照图片隐写思路,第一步无果,第二步也无果,我们优先使用stegsolve打开图片查看:
我们可以发现,当我们关闭红色通道(redplane0)、绿色通道或是蓝色通道时,图片的上方出现了黑白的印记,很显然是二进制的信息,我们继续使用StegSolve进行分析:
BitPlaneOrder设置RGB通道的顺序,默认RGB,多次尝试发现正确的排列顺序是BGR才会出现正确的隐藏信息
我们发现隐藏信息是一张png图片文件,我们点击SaveBin,将图片保存为.png格式的文件,发现打不开:
这里不知道为什么010editor不能打开进行分析了(软件抽风),所以这里介绍另一种方法
我们点击SaveText保存保存输出,用Notepad++打开:
我们发现输出很奇怪,但没关系,我们按住alt键进行按列复制:
复制的内容放到cyberchef去掉换行符并进行十六进制编码:
我们将输出保存为png格式的图片发现010editor还是打不开,那我们直接将十六进制格式的输出复制到010editor里面(shift+ctrl+v):
修复文件头后即可打开图片:
可以发现是半张二维码,可以猜测这里存在PNG宽高隐写,我们使用脚本进行爆破:
修改宽高值,扫描二维码即可得到flag.rar的网盘下载地址,我们进行下载:
1.观察txt文件的属性说不定会有线索
2.txt文件里面是一堆空行可能存在snow隐写
3.存在NTFS隐写
观察文件属性也没有备注消息,我们猜测这里存在NTFS文件隐写,我们使用7z打开flag.rar却没发现交替数据流的信息,这里我们要使用专业的软件来查看NTFS文件隐写的软件:NtfsStreamsEditor
NTFS流隐写得用WinRAR解压(这里我也不清楚原理),解压后观察flag.txt的NTFS隐写流
defencode():flag='*************'ciphertext=[]foriinrange(len(flag)):s=chr(i^ord(flag[i]))ifi%2==0:s=ord(s)+10else:s=ord(s)-10ciphertext.append(str(s))returnciphertext[::-1]遍历字符串
foriinrange(len(flag)):s=chr(i^ord(flag[i]))这个循环遍历了字符串flag的每一个字符。对于每个字符,首先将字符的ASCII值(使用ord()函数)与当前位置的索引值i进行按位异或操作,然后将结果转换为一个字符(使用chr()函数)。
根据索引的奇偶性调整ASCII值
ifi%2==0:s=ord(s)+10else:s=ord(s)-10如果索引i是偶数,调整后的字符的ASCII值增加10;如果是奇数,ASCII值减少10。
生成密文
ciphertext.append(str(s))将转换后的字符的ASCII值(转换为字符串形式)添加到ciphertext列表中。
列表反转
returnciphertext[::-1]在返回最终的密文列表之前,列表被反转。
在此我们得编码写出解密脚本:
defdecode(ciphertext):#反转密文列表ciphertext=ciphertext[::-1]flag=[]foriinrange(len(ciphertext)):s=int(ciphertext[i])#根据索引的奇偶性进行逆操作ifi%2==0:s-=10else: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']#解密得到的flagflag=decode(ciphertext)print("解密后的flag是:",flag)得到flag
考点:理解LSB隐写原理、学会利用工具、文件头修复、PNG宽高隐写、理解爆破PNG宽高原理、理解NTFS流隐写隐藏文件、pyc文件反编译、逆向解密脚本编写
下载文件,发现里面是一个iso格式的文件。首先我们用7z工具查看其中的内容:
我们找到了flag.txt,打开查看:
这里提示flag还没生成,我们按照提示应该注意可以生成flag的程序,就是上方一堆autoflag.exe的副本
最下方还有个autorun.inf文件,我们查看其中内容:
inf文件是Windows系统中非常重要的配置文件,主要用于驱动程序安装和设备配置。它们以结构化的方式包含了安装过程的所有指令,使得操作系统能够正确安装和配置硬件设备。
[AutoRun]这个节通常用于指定在某个特定条件下自动运行的命令或程序
Open这一行指示系统在特定情况下自动运行指定的程序或命令
我们可以推测autoflag-副本(32)是正确生成flag的程序我们尝试运行:
要分析exe文件我们要使用反编译软件——IDA
IDA是一个反编译器,同时具备调试器的功能。功能非常强大,几乎所有的逆向题目都需要用到它。
我们使用IDA进行分析:
看不懂?没事,这是misc方向的题目而不是reserve方向的题目,因此我们直接搜索字符串
按下shift+F12可以查看exe中的字符串,找到了flag
我们也可以按下F5进行反编译查看源码,可以推测报错的原因是找不到flag.txt文件:
考点:理解iso文件格式、会使用IDA打开文件查找字符串
下载文件,发现里面是一个mp4格式的视频。
按照思路,我们优先逐帧查看视频是否含有隐藏信息,发现了一闪而过的二维码:
有key2,那就有key1,我们仔细寻找:
我们尝试将key作为flag上交,发现不是。
按照思路,我们应该继续对mp4文件进行分析。
MP4文件中的所有数据都装在box(QuickTime中为atom)中,也就是说MP4文件由若干个box组成,每个box有类型和长度,可以将box理解为一个数据对象块。box中可以包含另一个box,这种box称为containerbox。一个MP4文件首先会有且只有一个“ftyp”类型的box,作为MP4格式的标志并包含关于文件的一些信息;之后会有且只有一个“moov”类型的box(MovieBox),它是一种containerbox,子box包含了媒体的metadata信息;MP4文件的媒体数据包含在“mdat”类型的box(MidiaDataBox)中,该类型的box也是containerbox,可以有多个,也可以没有(当媒体数据全部引用其他文件时),媒体数据的结构由metadata进行描述。
我们用010editor打开:
可以发现除了上述的5中box最底下还出现了奇怪的box,我们分析发现这是base64编码后的内容,我们使用cyberchef进行解码:
发现是rar文件,我们进行保存,发现需要密码,我们推测密码就是前面解出来的key:iwantplayctf
解压即可得到flag
考点:MP4文件的分析、利用十六进制编辑器找到隐藏的信息
ren**.jpgren重命名文件
下载地址
两者都属于shell脚本,用于在计算机上使用命令。二者的区别源于使用对象不同,bat主要是运行在Windows的shell脚本完成一系列的项目文件集合启动,集成多项依赖加载执行;sh脚本是运行在Unix系统的shell脚本,方便部署应用。我们使用任意文本编辑器都可以查看.sh的内容,我们查看:
一款可以将dtmf拨号音转换成数字的软件下载后我们使用以下命令:
#-*-coding:utf-8-*-#author:mochu7defhex_str(str):#对字符串进行切片操作,每两位截取hex_str_list=[]foriinrange(0,len(str)-1,2):hex_str=str[i:i+2]hex_str_list.append(hex_str)print("hex列表:%s\n"%hex_str_list)hex_to_str(hex_str_list)defhex_to_str(hex_str_list):int_list=[]dec_list=[]flag=''foriinrange(0,len(hex_str_list)):#把16进制转化为10进制int_str=int('0x%s'%hex_str_list[i],16)int_list.append(int_str)dec_list.append(int_str-128)#-128得到正确的ascii码foriinrange(0,len(dec_list)):#ascii码转化为字符串flag+=chr(dec_list[i])print("转化为十进制int列表:%s\n"%int_list)print("-128得到ASCII十进制dec列表:%s\n"%dec_list)print('最终答案:%s'%flag)if__name__=='__main__':str='d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd'print("字符串长度:%s"%len(str))hex_str(str)考点:理解十六进制编码是如何将字符串转换成一串十六进制数字的、脑洞大开、脚本编写
importosimportzipfiledefextract_zip(file_path):#获取压缩包的文件名(不含扩展名)作为密码password=os.path.splitext(os.path.basename(file_path))[0].encode('utf-8')#创建解压目标路径extract_path=os.path.dirname(file_path)withzipfile.ZipFile(file_path,'r')aszip_ref:try:#解压缩文件并使用密码zip_ref.extractall(path=extract_path,pwd=password)print(f'Successfullyextracted{file_path}')exceptRuntimeErrorase:print(f'Failedtoextract{file_path}.Error:{e}')returnFalsereturnTruedefrecursive_extract(folder_path):whileTrue:extracted=Falseforroot,dirs,filesinos.walk(folder_path):forfilenameinfiles:iffilename.endswith('.zip'):file_path=os.path.join(root,filename)ifextract_zip(file_path):#删除已解压的压缩包os.remove(file_path)extracted=Trueifnotextracted:breakif__name__=="__main__":folder_path='.'#当前文件夹路径recursive_extract(folder_path)extract_zip函数:
recursive_extract函数:
脚本主程序:
folder_path='.'表示当前工作目录。
脚本会从当前文件夹开始递归解压。
fromPILimportImage#读取qr.txt中的RGB数据withopen('qr.txt','r')asfile:data=file.readlines()#假设每一行是一个像素,并且行数与列数一致(即图像是一个正方形)#计算图像的尺寸image_size=int(len(data)**0.5)#创建一个新的图像image=Image.new('RGB',(image_size,image_size))#填充图像的每个像素fori,lineinenumerate(data):#将RGB数据解析为整数元组rgb=tuple(map(int,line.strip().strip('()').split(',')))#计算像素在图像中的位置x=i%image_sizey=i//image_size#将RGB值设置到图像的相应位置image.putpixel((x,y),rgb)#保存生成的图像image.save('output.png')print('Imagesavedasoutput.png')导入库:
读取文件:
计算图像大小:
创建图像:
填充图像像素:
保存图像:
图片属性中的内容都是可交换图像文件格式(英语:Exchangeableimagefileformat,官方简称Exif),我们可以使用这个工具输出一个图片的所有属性如:
Mimikatz是一个广为人知的开源工具,主要用于安全测试和渗透测试领域。它由法国安全研究员BenjaminDelpy开发,最初是为了展示Windows操作系统中存在的安全漏洞。Mimikatz可以执行多种操作,特别是在Windows系统上提取敏感信息。我们使用mimikatz分析.dmp文件:
下载文件,是一个打不开的jpeg格式,我们使用010editor打开:
全是电子书的内容,这种长文本我们直接搜索关键词“flag”或者是“ctf”
考点:关键词搜索
可以发现TCP协议占比最高,我们优先分析传输的Data:
第一个包看内容可以推测:攻击机监听端口4445并且传输了flag.zip文件
第二个包可以发现传输的zip文件,我们可以进行手动提取:
尝试解压发现需要密码,我们先不管,继续分析剩下的包
第三个包可以发现了解压的命令,解压密码为“supercomplexpassword”
解压文件,得到了flag
考点:网络流量分析、学会提取流量包中的文件
下载文件,是一张png格式的图片和html网页小游戏源码
我们优先分析图片,按照图片隐写思路,第一步、第二步无果,我们打开stegsolve打开图片查看:
我们可以发现,当我们关闭红色通道(redplane0)、绿色通道或是蓝色通道时,图片的上方出现了一点点黑白的印记,虽然不是很明显,我们继续使用StegSolve进行分析
我们发现隐藏信息像是一串base64编码的内容,我们尝试解码:
这里出现了“Salted”的字符串,说明这是加了盐的加密
加盐(Salt)是在加密时使用的一个随机值,目的是防止攻击者通过预先计算的哈希表(如彩虹表)快速破解加密数据。通常,盐值会与密码结合,通过一个密钥衍生函数(如PBKDF2)生成一个足够强的密钥。
我们有了这串加了盐的密文,那么我们明白就应该去寻找密钥了,我们接着分析html网页小游戏源码
搜索关键词flag即得到了这个:
这是一串经过base32编码的字符串(后边有三个“=”的特征,或是使用cyberchef的magic功能自动识别):
这是我们唯一能找到的字符串,因此需要猜测这就是我们需要的密钥!
我们观察我们的密钥,长度为23位或21位(去掉“{}”)或16位(去掉“{}”和“suctf”)
我们常用的对称加密有:DES(需要8位密钥)TripleDES(需要24位密钥)AES(需要16位或24位或32位密钥)、RC4等等,题目没有给出提示我们只能逐个尝试
我们优先尝试AES-128的解密方式,发现并不是:
这里再介绍以下cyberchef的这些模块(更详细的内容以后会更新在crypto方向的模块):
得到了flag:
考点:LSB隐写、关键词搜索、理解对称加密
补充:这道题目是buuctf的简化版,原版题目只有html网页小游戏源码文件
原题我们需要在网页小游戏中找到隐藏的“secret”关键词(buuctf给的源码好像有点问题在此直接展示js源码中搜到的地方):
我们优先使用010editor分析:
很长很难分析,我们直接使用binwalk查看其中是否藏了东西:
usb.capdata是USB数据包中的最主要的字段,用于显示捕获的USB数据的原始字节。这些字节通常表示设备在USB总线上发送的实际数据。对于USB键盘,usb.capdata通常包含按键操作的编码信息。比如我们分析一下第一个数据包:
usb.capdata的值为0002000002000000
第一个字节(00):修饰键(ModifierKey)状态,如Ctrl、Shift、Alt等。值为00表示没有修饰键被按下。
第二个字节(02):保留位(Reserved)。通常没有特别意义,固定为00。
第三到第八个字节(000200000000):这些字节表示按键编码(Keycode)。每个字节表示一个按键,其中00表示没有按键被按下。按键编码02对应的是大键盘1键。
总之这个流量包记录了USB连接的键盘输入数据,我们应该进行提取和分析。
提取出了键盘输入的内容,得到了关键信息key{xinan}提交了发现并不是flag
那么我们只能继续对233.rar进行分析了,我们可以注意到当我们使用winrar打开时会报错:
我们使用RAR模板打开好像抽风了,我们只好手动分析:
RAR是有四个文件块组成的,分别是分别是标记块、压缩文件头、文件块、结束块,这些块之间没有固定地先后顺序,但要求第一个块必须是标志块并且其后紧跟一个归档头部块。每个块都包含以下内容:
第一块为标记块(MARK_HEAD),其数据为:
526172211A0700字节的说明
5261为头部校验和(HEAD_CRC),占两个字节,每一块均从HEAD_CRC开始,所有的RAR都以5261开头72为块类型(HEAD_TYPE)占一个字节,所有文件都如此211A为块标记(HEAD_FLAGS)占两个字节0700表示块大小,即526172211A0700(标记块)共占7个字节压缩文件头(MAIN_HEAD)第二块为压缩文件头(MAIN_HEAD),和标记块一样:
接下来用rar文件来讲一下文件头部分的码流分析。
16进制软件使用winhex,hex值左边是低位,右边是高位,比如5261实际上就是0x6152
C43D:HEAD_CRC,2字节,从HEAD_TYPE到HEAD_SIZE的crc校验值7B:HEAD_TYPE,1字节,表示该块是结尾块0040HEAD_FALGS,2字节,位标记0700:HEAD_SIZE,2字节,块大小与标记块类似的是,结尾块也是一个固定字节串的块,依次是C43D7B00400700有了上面的RAR文件格式的分析,结合报错信息我们可以发现RAR文件的“233.png”文件头的HEAD_TYPE应为“74”却被改成了“7A”,我们修改回来,压缩包中藏着的233.png总算是出来了:
(补充:更新了010editor版本后就没有抽风了,我们看看正常模板解析的情况下的回显。可以发现233.png的HeadType错误,应该为FILE)
我们开始分析233.png文件
按照图片隐写思路,第一步、第二步无果,我们打开stegsolve打开图片查看,发现关闭蓝色通道会出现二维码,我们扫描出现了如下信息:
然而,这个也不是flag,按照之前得到的值,我们可以知道这串字符串一定是使用了密钥“xinan”加密的内容。
按照思路,我们需要将所有需要密钥的密码都尝试一遍,并得出最有可能的结果
维吉尼亚密码->Playfair密码->数据加密标准(DES)->三重DES(TripleDES)->AES->RC4->Rabbit等等……(越到后边越需要复杂的条件)我们按顺序来,发现是维吉尼亚密码加密(看上去比较合理):
我们可以看出维吉尼亚密码解密后明文以“f”开头,这种调换顺序的密码让人想要尝试栅栏密码,成功得到flag:
考点:理解USB流量分析并且会使用工具脚本、能够发现RAR文件中的文件头的HEAD_TYPE被修改了、LSB隐写、拥有需要密钥的加密方式的解密思路
下载文件,里面是两个压缩包,“虚假的压缩包”和“真实的压缩包”,二者都进行了加密
我们逐一进行分析,第一步无果发现了“虚假的压缩包”存在伪加密:
我们得到了key:
看到熟悉的参数n和e,我们立刻能够联想到RSA加密的方法(详细会更新在crypto模块中)
在此我们直接解密:
n=3*11 则p=3,q=11φ(n)=(p-1)*(q-1)=20gcd(e,φ(n))=1 (要满足e与φ(n)的公因数为1,3和20的公因数确实是1)(d*e)modφ(n)=1 则解密私钥d=7c=m^emodn 若明文m为解26,c为密文,得出答案是c=20m=c^dmodn 若密文c为解26,m为明文,得出答案是m=5离谱的是解压密码为“密码是5”(需要脑洞打开,能用的字符都要考虑到)
解压文件,里面是一张jpg图片和一个名为“亦真亦假”的无后缀文件
我们优先分析图片,按照图片隐写思路,第一步无果,我们优先打开010editor打开图片查看:
看这文件头,这应该是PNG格式的文件,我们进行修改再按照图片隐写思路,png图片第一步使用TweakPNG工具发现图片的crc校验出现错误,因此可能存在PNG宽高隐写:
我们使用脚本爆破PNG图片的正确宽高,修改即可:
可以发现隐藏的信息:
这里的“5”与上面提到过的“me”不一样,"^"在数学式中表示的是次方,在编程语言里面表示的是异或计算
我们再使用010editor打开“亦真亦假”文件,发现就是一文本格式的文件,内容看上去是十六进制的编码:
按照提示,这些内容应该经过“^5”(与5进行异或)的计算(5异或5值为0,这里可以看出有几段文件流)
我们可以使用010editor的计算工具进行运算:
异或后发现并不能得出什么文件,后来发现是以文本编辑的形式异或和以十六进制编辑的形式异或会有两种计算方式:
十六进制编辑的形式异或:将“e”与“5”的ASCII值进行异或"e"的ASCII值是101(十进制),101的二进制表示为01100101。"5"的ASCII值是53(十进制),53的二进制表示为00110101。01100101(101,"e")XOR00110101(53,"5")--------01010000(80)得到的“80”转为字符为“`”十六进制编辑的形式异或:将“e”与“5”看做十六进制进行异或"e"是16进制,转换为二进制是1110。"5"是16进制,转换为二进制是0101。1110(e)XOR0101(5)----1011(b)结果1011对应的十六进制值是"b"。我们以十六进制编辑的形式进行异或:
结果将每个字节的十六进制与“05”进行了异或,没有看出有什么东西,也没有达到我们想要的效果
在此只好写一个脚本,能够实现将一个文件中所有字符看做十六进制数字并且与5进行异或:
以复制十六进制编辑:
能够发现是以“PK”开头的zip压缩文件,总算成功了!
我们查看里面的文件,发现是doc文件
我们修改后缀后打开:
我们搜索关键词“flag”,发现藏在最后,字体颜色为白色。得到了flag:
考点:压缩包伪加密、PNG宽高隐写、理解RSA算法、理解异或计算、理解office文件是一堆文件的压缩文件
下载文件,是个txt文本,打开查看:
一头雾水,拿去问AI:
我们明白了这是Logo编程语言的代码,我们应该如何让这些代码跑起来呢?
考点:不会就搜索就问、理解logo编程语言
下载文件,里面是一个加密的压缩包和一张图片:
我们优先对图片进行分析
第一步无果,我们优先打开010editor打开图片查看:
发现有插入隐藏的zip文件,而且缺少文件头“PK”我们尝试修复后进行文件分离:
我们解压查看:
我们尝试了,这不是解压密码,那这是什么呢?
我们查看加密压缩包的内容,它的里面也有flag.txt文件,并且二者的CRC校验值是一样的!说明二者是相同的文件。
按照题目提示,这里可以使用ZIP明文攻击。
ZIP文件通常使用对称加密算法(如PKZIP的经典加密方式),并使用一个相对简单的流密码算法(CRC-32校验值和三个32位寄存器)来加密数据。这种方法依赖于一个用户提供的密码生成密钥流,对文件内容进行加密。
前提:在已知明文攻击中,攻击者已经获得了一部分加密文件的对应明文(未加密内容),并且能够访问对应的加密数据(密文)。
步骤1:获取已知明文和对应密文:攻击者知道ZIP文件中某些已加密文件的部分内容。例如,ZIP文件中可能包含一个常见文件如README.txt,攻击者可能已经知道其中的一些文本内容(明文),同时可以访问该文件的加密版本(密文)。
步骤2:推导密钥流:攻击者利用已知的明文和对应的密文来反推出生成密文的密钥流。由于ZIP使用的加密算法基于流密码,明文与密钥流的XOR(异或)操作生成密文。因此,如果知道明文和密文,攻击者可以通过简单的异或操作推导出密钥流的一部分。
步骤3:恢复密钥:利用推导出的密钥流,攻击者可以逐步逆推出用于加密的内部状态和密钥,进而推算出完整的加密密钥。
步骤4:解密整个文件:一旦掌握了密钥,攻击者可以使用该密钥解密ZIP文件中其他的内容,甚至解密整个ZIP文件。
1分50秒至3分41秒
考点:利用十六进制编辑器找到隐藏的信息、文件头修复、理解压缩包明文攻击
下载文件,是一个pcap格式的流量包和提示:
我们发现TCP协议占比最高,并且使用了TLS协议加密(TransportLayersecurity);协议中使用了FTP协议并且占比非常高,优先查看FTP协议发了些什么文件,过滤FTPData并且尝试导出对象:
尝试解压都加密了……
那么我们只能退而求其次,开始过滤分析TCP协议的内容,追踪TCP流从0开始看起,发现前面的数据包都是空的:
前面的TCP流量全是空的因为前面都是握手包:Wireshark的捕获设置可能限制了捕获的数据包数量或大小。如果某个TCP流的数据包在捕获开始或结束之前已经传输完毕,或者超过了捕获的窗口大小,你可能只会看到TCP连接建立(SYN、ACK等)或终止(FIN、RST等)的包,而没有数据包。那么我们直接跳过握手包,跳到有内容的数据包并追踪流:
追踪TCP流2004和2005,传输了两个个zip文件
追踪TCP流2006,这段数据是从FTP服务器返回的目录列表中的一部分,列出了两个文件的详细信息
追踪TCP流2007,这段TCP流量数据包描述了一次与邮件服务器(MX服务器)的交互过程,显示了客户端尝试发送邮件时所经历的各个阶段。
诊断代码:554表示邮件在传输过程中的永久性错误,导致邮件无法投递。
追踪TCP流2009,TCP握手包没有特殊内容
接下来的几个数据包都是发送的邮件
值得注意的是追踪TCP流2016我们发现邮件里插入了一段经base64编码的图片:
我们进行解码:
得到了一张图片,我们识别再解码:
发现是乱码,因此我们可以猜测这是我们寻找的TLS协议加密的密钥,我们按照提示给密钥进行套皮:
SSL/TLS是一种密码通信框架,TLS协议位于传输层和应用层中间,其功能是一个加密通道,和上层应用协议无关。由于HTTP采用明文传输,很容易被攻击者窃听或者篡改内容,通过引用TLS对HTTP的内容进行加密等操作,可以有效防止窃听、篡改和劫持等。
我们需要导入我们获得的私钥文件进行解密:
考点:理解FTP协议、理解SMTP协议、在流量数据中寻找私钥、理解SSL/TLS密码通信框架、学会使用wireshark导入私钥文件
下载文件,是一个txt文件,看上去像是ascii值但是最大的超过了127所以我们排除这方向的思路:
在此提出新的加密方式——TTL隐写
TTL隐写的基本原理是通过控制数据包的TTL值来传输隐秘信息。具体而言,攻击者或隐写者可以在发送数据包时,将TTL字段设置为特定的值以表示某种信息。接收方只需要解析数据包中的TTL字段并恢复原始信息即可。
我们分析密文:
63(二进制后)=00111111127(二进制后)=01111111191(二进制后)=10111111255(二进制后)=11111111发现仅有最前面的两位数字不同,因此我们可以猜测明文由密文二进制后前两位组合而成
那么我们可以编写一个脚本,将63转换成00、将127转换成01、将191转换成10、将255转换成11后将所有内容组合起来(或者说是将密文转换成二进制后提取前两位,但前者应该更加高效)
总之得到了二进制的文本,我们进行转换:
看文件头是zip压缩文件,保存输出后解压发现加密了,发现是伪加密,我们进行修改即可解压(多处deFlags):
打开flag.txt发现内容被base64编码了数次,我们进行解码即可得到flag:
考点:理解TTL隐写、压缩包伪加密
下载文件,发现里面是一个pcapng格式的文件,我们使用wireshark打开查看
我们先进行协议分级:
我们可以发现服务器给的返回包中包含的数据是十六进制的字符串,我们进行进制转换:
可以发现转换出了一个文件名,但文件名好像倒序了,我们加上倒序发现:
发现是通过向一个tmpshell.php发送请求查看当前目录文件得到的回显,我们一路分析流,发现了请求“f14g”的内容,我们解码发现没有东西:
接着往下看,发现了经base64编码的“f14g”,我们提取并且解码:
我们发现当前解码的内容是经过了每一行的倒序的(根据结尾“==”的位置判断),这里我们可以手动一行行的进行倒序,也可以写脚本:
我们进行解码得到:
可以发现flag的输出都输出了两遍,我们进行修改即可得到flag
考点:网络流量分析、观察解密
下载文件,里面是一个加密的rar压缩包和一张图片
我们优先对图片进行分析,第一步无果,我们优先使用010editor分析,发现了插入隐藏的压缩包:
我们提取出来发现这个压缩包也进行了加密,我们根据图片可以推测这张图片还藏了东西,我们进入第三步继续分析图片:
发现在红色通道和蓝色通道存在这种隐藏的数据,我们进行排列组合LSB解密终于得到了一张PNG图片:
得到了zip文件的密码,我们进行解压得到output.txt:
又是ttl隐写,我们进行解密得到rar文件密码:
解压得到了fffflag.zip文件,我们打开发现了word文件夹,可以推测这是一个doc文件,我们修改后缀打开:
推测flag内容为白色字体,我们修改字体颜色发现隐藏内容:
进行解码发现是乱码:
我们只能返回上一步,我们推测这并不是二进制的内容:
那么我们只能分析其中不对劲的地方,我们可以发现base64的编码内容是有换行符的,我们一行一行的进行解密再组合:
110110111111110011110111111111111111111111111111101110000001111111111001101110110110001101011110111111111111111111111111111111101111111111111110110011110000101110111011110111111100011111111111001001101110000011111000011111111110110100001111011110111111011101111111110110110101111111100110111111111111110110101111111011110111101011101111111110110110101101111100110111111111111110110100001100000110000001100011100000110110110101110000001111000011111111此时输出的内容若隐若现,我们脑洞大开将所有数字1改为空格:
是的,得到了flag
He1Lo_mi5c~考点:图片插入隐写、lsb隐写、ttl隐写、脑洞大开
下载文件,查看内容:
发现有很多不可打印字符,我们尝试使用010editor进行解析发现这些字符也都是乱码:
零宽字符隐写的基本原理是将要隐藏的信息编码为零宽字符序列,并将其插入到文本中的某些特定位置。因为这些字符在普通文本显示时不可见,所以文本看起来与原始文本没有区别。
字符包括:
零宽度空格(\u200b)
零宽度非连接符(\u200c)
零宽度连接符(\u200d)
从左至右书写标记(\u200e)
从右至左书写标记(\u200f)
将要隐藏的信息(通常是二进制数据或文本)编码成零宽字符的序列。例如,可以将二进制“0”编码为零宽度空格\u200B,将二进制“1”编码为零宽度不连字\u200C,嵌入普通文本中就不会被发现
考点:理解零宽字符隐写原理
下载文件,貌似是一个空文件,但我们发现ctrl+a选中全文发现隐藏着空格:
空格的排列只有短和长两种形态,但是没有分隔符,不能猜测是摩斯电码,那猜测是二进制,我们进行替换解出flag:
可以发现攻击机一直在向服务器发送请求,请求内容含有的参数是email和password,但服务器一直回显“Incorrectusernameorpassword”,我们将密码进行url解码直接得到flag了。。。
考点:网络流量分析
下载文件,是一个.m4a格式的音频文件,但是已损坏打不开,我们使用010editor打开进行分析:
保存后播放音频听到flag内容
考点:理解音频的异或加密方式
下载文件,里面是一张png图片、wav音频和一个加密的压缩包,我们优先对图片进行分析
按照图片隐写思路,第一步无果,我们优先使用010editor进行分析,发现了插入隐藏的png图片:
我们进行文件分离,得到了png图片:
这并不是加密压缩包的密码,我们继续分析
我们分析分离的png图片,发现了插入隐藏的zip文件:
分离zip文件,发现还是分离的png图片,但文件名给出提示“aes.png”
看似没有别的线索了,我们再对音频进行分析
第一步无果,我们优先使用010editor进行分析,发现了插入隐藏的信息:
根据之前的提示,我们推测这是aes加密的内容(U2FsdGVkX1的开头)
我们进行解密:
这是zip文件的密码,我们解压得到了新的wav音频文件,我们进行分析
按照音频隐写思路,第一步、第二步、第三步无果,我们开始使用特殊工具进行解密,steghide无果,我们继续搞
SilentEye是一种基于图像和音频的隐写工具,主要用于将信息隐藏在图片和音频文件中。它提供了一种简单而有效的方式来嵌入和提取隐秘数据,而不会对文件的外观或音质造成明显影响。
我们使用SilentEye进行解密,得到了隐藏的flag:
考点:
下载文件,是一个excel文件
我们打开,发现以下内容:
什么都没有吗?我们随便点点,发现还是有些格子有内容的:
为什么有内容却没有显示呢?原因是单元格格式被设置为自定义格式,且自定义格式使用了不可见字符,文本可能不会显示出来。
我们选中大部分表格内容,修改单元格格式:
我们可以发现数字1貌似在有规律的排列,我们对这些表格进行填充看看是什么图形:
再修改下表格的宽高就能得到更好的图片:
这并不是我们常用的二维码,这个叫汉信码
汉信码是中国物品编码中心研发的一种二维码码制,现已成为国际二维码标准之一。
考点:理解excel文件隐藏信息的方式、知道汉信码
下载文件,发现里面是三张jpg图片,我们一个个进行分析
按照图片隐写思路,第一步无果,我们优先使用010editor进行分析:
可以发现三张图片都含有插入隐藏的文件,并且将文件拆成了三部分,我们手动分离并且拼接,得到了个加密的压缩包:
我们发现里面的内容也没有经过伪加密,我们只好进行爆破,得到了解压密码:
得到了经过编码后的flag,如果只是编码而不是加密的话我们可以使用cyberchef的magic功能直接自动识别得到flag:
考点:图片插入隐藏信息提取、压缩包密码爆破、多重编码内容解码
下载文件,是一张png图片
按照图片隐写思路,第一步无果,我们优先使用010editor进行分析,得到插入隐藏的zip文件:
提取解压得到了名为“hidden_binary”的没有后缀名的文件,我们使用010editor打开进行分析:
原来是ELF可执行文件,我们使用linux系统直接执行即可得到flag
考点:图片插入隐藏信息提取、理解ELF文件
下载文件,是一张jpg图片
提取解压得到了名为“abc”的没有后缀名的文件,我们使用010editor打开进行分析直接得到了flag
考点:图片插入隐藏信息提取
下载图片,一看就是要我们手动拼接二维码……
这就是个耗力气的活,原理咱都懂,那就只好拿出图片修改工具了:
扫出flag
考点:耐心
下载文件,是一张图片,又是一题二维码修复
我们把二维码的定位符填上,即可得到一串密文:
KFBVIRT3KBZGK5DUPFPVG2LTORSXEX2XNBXV6QTVPFZV6TLFL5GG6YTTORSXE7I=使用cyberchef直接解码出flag
考点:二维码修复
下载文件,是一张bmp格式的图片
按照图片隐写思路第一步无果,我们优先使用010editor进行分析:
BMP格式的文件从头到尾依次是如下信息:
我们根据提示0xf0是派大星的赘肉(调色板的粉色像素内容),在中间发现了派大星的疤痕(0x22、0x44):
(很容易往摩斯电码方向去思考,一定要按照题目提示做题)
我们将疤痕的数据提取出来:
"DD"DD""""D"DD""""""DD"""DD"DD""D""DDD""D"D"DD""""""DD""D""""DD"D"D"DD""""D"DD""D"""DD"""""DDD""""D"DD"""D"""DD"""D""DD"D"D"DD"""DD""DD"D"D""DD""DD"DD"""D"""DD""DD"DD""D"D""DD"D"D"DD"""D"""DD"""D"DD""DD"""DD"D"D""DD"""D"DD""DD""DD"""""DDD""DD""DD"""D""DD""伤痕仅由两种字符组成,我们就应该向只有两种字符组成的加密方式进行思考
我们将"和D转换成1和0后进行转码结果是乱码:
没有分割符所以暂时不考虑
这时候我们应该想到:题目名“派大星的屁股“,那么密文是反着来的,我们应该逆序再试试看!
成功得到32位的字符串!提交了还不是flag,怎么回事?
我们看看疤痕组成的二进制,确实有32位字符
0110110000101100000011000110110010011100101011000000110010000110101011000010110010001100000111000010110001000110001001101010110001100110101001100110110001000110011011001010011010101100010001100010110011000110101001100010110011001100000111001100110001001100那么我们可以这样逆序:将每一个字符的二进制段进行逆序
0011011000110100001100000011011000111001001101010011000001100001001101010011010000110001001110000011010001100010011001000011010101100110011001010011011001100010001101100110010100110101011000100011010001100011011001010011010000110011001110000011001100110010我们可以使用以下脚本实现这个功能
得到正确的flag
考点:理解bmp图片文件格式、两种字符组成的加密方式、脑洞大开
(吐槽:到了最后我也没发现是谁打了派大星啊?)
下载文件,md格式的文本,打开就给flag
考点:会打开md格式的文件
下载文件,是一张二维码,我们优先扫描:
弹出了一个网页链接,是使用bing引擎搜索“key不在这里”的链接
qs代表"QuerySuggestion",用于控制搜索建议的行为。n表示禁用建议。
sp表示搜索阶段或流程控制。-1表示禁用自动完成功能。
cvid表示"ClientVersionID",是用于标识当前会话的唯一ID,可以帮助Bing跟踪和优化用户的搜索体验。
其实我们也一眼就能看出来m参数不对劲,分析一下其中的密文特征:纯数字并且没有分段,有经验的同学看开头“10210897103”就能看出来是“flag”的ascii码了
我们提取出来放到cyberchef进行解密得到flag:
这里也提供脚本:
下载文件,是四个doc文件并且都打不开
我们使用010editor进行分析,发现了奇怪的字符串:
可能就是在OleHeader(文件头)中出现这些导致了文件损坏,我们进行修复即可(都改成FF)
我们打开ABCD四个文件,发现都是一样的内容,但行距好像有些区别:
我们仔细查看,这些诗句之间的行距有的为1,有的为1.5
我们对全诗进行统计,统计出所有诗句之间的行距
这里给出AI帮我写的脚本:
这貌似又是某种规律,由两种字符组成的密码
无论是将“1.5”设为1、“默认”设为0还是将“1.5”设为0、“默认”设为1,都是乱码
没有分隔符不考虑
也都是乱码
后来看了其他人的writeup,发现是题目提示不够明显:
正确的方法是逐一尝试,将得到的每个文件的10组合进行MD5加密,“我是C.doc”文件得出的10组合的MD5值就是flag
考点:脑洞大开
下载文件,一大堆jpg图片,图片宽度和高度相等,一眼就看出来是拼图题,这里我们就是用montage和gaps工具进行自动拼图吧
Montage是一个在Unix/Linux系统上广泛使用的命令行工具,它是ImageMagick工具套件的一部分,用于处理图像。Montage主要用于将多张图像拼接成一张大图,通过指定的布局和设置将这些图像排列在一起。
我们进入含有所有图片的路径下,输入命令:
montage*jpg-tile10x12-geometry+0+0flag.jpg-tile设置拼接后的图像布局方式,10x12表示10行12列(我们先尝试拼接得出行和列)
-geometry用于指定图像的大小和位置,+0+0指定每个图像之间的间距,即图像相对位置的偏移量,第一个+0表示水平方向上图像之间的间距为0像素,第二个+0表示垂直方向上图像之间的间距为0像素
接下来我们使用gaps工具进行自动拼接
安装好后,我们将输出的flag.jpg放到gaps目录中,使用以下命令:
gapsrunflag.jpgtureflag.jpg--generations=40--population=120--size=200--image指定输入拼图图片
--generationgs遗传算法的代的数量,最好等于原始图片的数量
--population个体数量
--size拼图块的像素尺寸,gaps识别的拼图都是正方形的,我们原图的拼图是长方形的,论尺寸刚好可以分成两个正方形,则gaps识别的拼图size=200/2=100(看文件属性宽度为200)
考点:学会使用montage和gaps工具进行拼图
下载文件,是一堆pacp流量包
仔细读题,这道题目是一个问答题:黑客的攻击ip是多少?那么这次我们需要做的就不是协议分级了
我们先打开第一个流量包,进入会话统计,查看根据ipv4协议的会话,按照packetA->B排序查看哪个IP发送的数据包最多:
可以看到前几名ip发送了超过一万条的数据包,我们先不要下定论,再看看端点统计的内容。按照Txpackets排序查看哪个发送方发出的数据包最多:
可以发现183.129.152.140这个ip再一次出现,因此我们可以推测黑客的ip就是183.129.152.140,即为flag
考点:会话统计和端点统计
下载文件,是一个打不开的没后缀文件,我们使用010editor进行分析:
其中发现了office2006的字符串,推测这是office办公软件文件,我们尝试给它加上.doc后缀:
打开发现文件被加密了(之前010editor中看到的字符串也含有加密的一些信息),按照题目提示我们应该使用hashcat工具进行解密,什么是hashcat?
Hashcat是一款功能强大且高效的密码破解工具,专门用于破解散列值(hashes),是一个广泛用于密码审计和恢复的工具,但它在处理速度和支持的散列算法种类上有着明显的优势。
既然我们要用hashcat来破解出doc文件的密码,那么我们首先就需要得到doc文件的hash值,我们可以使用john工具来获取doc文件的hash值
也是一个广泛使用的密码破解工具,主要用于检测密码强度和恢复遗忘的密码。它可以通过多种方法进行密码破解,包括字典攻击、暴力攻击和基于规则的攻击。
一般下载了john就会自动拥有john工具包(将文件转换成john能够识别的hash值)比如我们在此可以使用这个命令输出doc文件的hash值:
那么对应的哈希算法编号就是9500
再准备一个密码字典我们就可以直接开始了(这里用的是纯数字密码字典,从0~999999六位纯数字密码,因为CTF题目一般爆破密码都是纯数字密码)
#打开或创建number.txt文件,模式为写入模式withopen("number.txt","w")asf:#使用循环生成0到999999的所有数字foriinrange(1000000):#将数字写入文件,每个数字一行f.write(f"{i}\n")那么我们可以使用以下命令:
hashcat-m9500-a0-ocracked.txt1.txtnumber.txt-m指定哈希算法
-a指定攻击方式,0表示使用字典攻击
-o表示将破解结果保存到这个文件中
稍等片刻,从输出的文件中得到了密码9919:
尝试打开doc文件发现出错,可能它并不是doc文件,我们修改成xls、ppt,最后发现它是ppt文件
我们打开文件,找到了隐藏的白色flag(更改字体颜色)
考点:会使用hashcat和john工具包
下载文件,是一个wav的文件,听上去全是电磁的杂音
SSTV(SlowScanTelevision,慢扫描电视)是一种用于在业余无线电频段内传输静态图像的通信方式。与传统电视信号的高速扫描方式不同,SSTV以较低的速率逐行传输图像,因此得名“慢扫描电视”。
发送端:在发送端,静态图像被逐行扫描并转换为音频信号。这些音频信号通过无线电发射机发送出去。
接收端:在接收端,接收的音频信号通过解码软件或硬件解码器转换回图像。最终,接收者能够看到发送的图片。
为了识别这种声音信号,我们使用软件MMSSTV
MMSSTV是一种用于接收和发送慢扫描电视(SSTV)信号的计算机软件。它专门设计用于在业余无线电操作中处理SSTV图像。MMSSTV是一个流行的SSTV软件,广泛应用于无线电爱好者社区。
下载软件,打开后直接播放音频即可得到flag:
考点:理解SSTV
这一回最多的是基于UDP协议的RTP协议,这是什么协议?
UDP(UserDatagramProtocol,用户数据报协议)是一个无连接的通信协议,属于互联网协议套件中的传输层协议。与TCP(TransmissionControlProtocol,传输控制协议)相比,UDP是一种更加轻量级的协议,主要用于需要快速传输但对可靠性要求不高的场景(如视频通话)。
RTP是一种网络传输协议,用于在实时通信中传输音频和视频数据。RTP通常与SIP配合使用,负责实际的媒体数据传输。
那么我们可以推测这个流量包包含了实时通信的数据,按照题目名voip我们可以知道这些协议都在给voip技术提供服务
我们可以使用wireshark提取通话中的音频流:
直接播放音频,考验听力,把flag输出来就好了
下载文件,是一个wav格式的音频文件,我们听一下,只有一秒并且只有“滋”的一声
按照音频隐写思路我们优先使用Audacity观察音频是否藏有信息:
我们尝试一下,发现并不是摩斯电码,我们转换成二进制
0 0111010010101010011000100 011101001010101001100010尝试转换也不是二进制,但我们发现了一个规律,那就是它隐藏的信息应该是发送了两次的
0 011101001010101001100010根据题目名电单车,我们可以推测这信号与无线射频信号有关系,并且与电单车的防盗或遥控功能有关。
我们可以发现信号由三种脉冲组成,“0”、“1”和“浮动”三种状态,符合PT2242信号格式,开始分析:
地址码:PT2242发送的信号包括20位地址码
数据码:后跟4位数据码,代表按键的状态。
也就是说我们的flag应该是这条信号的地址码
考点:理解无线射频信号原理
下载文件,是一个wav格式的音频文件,我们听一下,没有什么声音
按照音频隐写思路我们第二步无果,我们使用010editor打开文件也无法看出插入隐藏,我们使用binwalk查看其中的插入隐藏信息:
binwalk提取不出来,我们使用foremost提取:
foremost也提取不出来,那么我们只能推测是使用了特殊工具了
steghideextract-sfout.wav分离出了文件download.txt
这题目已经过期了。。。那么只能看别人的wp了:
考点:音频隐写、打开脑洞猜测flag的值
按照音频隐写思路,我们优先使用Audacity进行分析,查看音频的频谱图即可得到flag:
考点:理解频谱图
我们可以发现应用层ICMP协议占比最高,应该优先分析。
ICMP(InternetControlMessageProtocol,互联网控制消息协议)是一种用于在网络设备之间发送控制消息的协议,通常用于诊断网络连接问题和传递错误消息。
ICMP协议是TCP/IP协议栈中的一部分,主要与IP协议一起使用。
我们可以发现ICMP数据包中都写有Data字段,我们使用tshark进行提取:
可以发现有很多重复数据,我们使用notepad++进行去重操作(使用正则表达式进行替换或者是使用插件TextFX):
^(.*)$\s+^(=.*^\1$)一眼十六进制,我们转换为字符串查看:
提取出了很多东西,我们再把前方“$$START$$”字符串删除后进行观察:
有个等号,推测经过了base64编码,放到cyberchef里面看看:
得到了个zip文件,我们提取解压得到了个gif文件:
我们可以观察gif文件以下内容:
identify是ImageMagick软件包中的一个命令行工具,用于显示图像文件的各种信息和属性。ImageMagick是一个开源软件套件,支持多种图像处理功能,如转换、编辑、组合等,广泛应用于图像处理领域。
我们将输出进行替换,将20替换为0,50替换为1,二进制转码得到字符串,按照题目提示进行MD5加密后得到flag:
下载文件,是一个包含许多txt文件的文件夹、一个加密的压缩包、一个png图片
我们优先分析png图片,按照图片隐写思路,第一步无果,我们优先打开010editor打开图片查看:
发现了隐藏插入的png图片,我们文件分离提取:
是两张一模一样的图片,我们对提取出的图片进行分析。
按照图片隐写思路,第一步、第二步、第三步无果,使用了zsteg、cloacked-pixel无果后,我们优先查看其中是否存在盲水印
盲水印隐写是一种信息隐藏技术,主要用于在数字媒体(如图像、音频、视频)中嵌入不可见的水印信息。它的关键特性在于,水印信息的提取不需要原始未嵌入水印的文件作为参考,这就是所谓的“盲”水印。以下是其基本原理:
这种技术的核心挑战在于在不影响载体质量的前提下,确保水印信息的鲁棒性和隐蔽性。
python2bwm.pydecode123.png456.pngout.png我们提取出了盲水印的内容:
我们接着分析decode.zip文件,我们发现它存在注释:
我们可以推测((√2524921X85÷5+2)÷15-1794)+NNULLULL,为decode.zip的密码提示,但前面的式子存在未知数X咱们也不知道答案,那么我们可以进行掩码爆破可以得到正确的密码(这里有坑,字符串中的“,”也包含在密码中):
解压decode.zip得到下一个提示:
貌似是解码提示,那么我们继续分析read文件夹,我们先看其中的提示hint.txt:
重点分析其中的11.txt:
我们试着提取前16个字符“HarryPotterandth”我们可以编写脚本进行对照:
#替换映射表mapping={'a':'dIW','b':'sSD','c':'adE','d':'jVf','e':'QW8','f':'SA=','g':'jBt','h':'5RE','i':'tRQ','j':'SPA','k':'8DS','l':'XiE','m':'S8S','n':'MkF','o':'T9p','p':'PS5','q':'E/S','r':'-sd','s':'SQW','t':'obW','u':'/WS','v':'SD9','w':'cw=','x':'ASD','y':'FTa','z':'AE7'}defreplace_string(input_string):result=[]forcharininput_string:#如果字符存在于映射表中,则进行替换ifcharinmapping:result.append(mapping[char])else:result.append(char)#如果字符不在映射表中,保留原字符return''.join(result)#测试input_string=input("请输入要替换的字符串:")output_string=replace_string(input_string)print("替换后的字符串:",output_string)得到“HdIW-sd-sdFTaPT9pobWobWQW8-sddIWMkFjVfobW5RE”,提交发现不是flag
“取前16个字符”到底是什么意思?我们使用puzzlesolver逐一尝试分析前16个字符的含义:
取前16个字符:“etaonrhisdluygw”或者“etaonrhisdluygwm”(若空格不计)
我们可以得到:“QW8obWdIWT9pMkF-sd5REtRQSQWjVfXiE/WSFTajBtcw=”或者“QW8obWdIWT9pMkF-sd5REtRQSQWjVfXiE/WSFTajBtcw=S8S”
二者都不是flag,看了下别人的WP,这道题目出错了:
若按照题目来的话,我们得到的前16位字符应该为“etaonrhsidluygw”,这里顺序出错了
考点:文件分离、理解盲水印、压缩包密码掩码爆破、字频统计
下载文件,一张png格式的图片
我们可以发现插入隐藏的BPG图片
BPG(BetterPortableGraphics)是一种图像格式,旨在取代JPEG,提供更好的图像质量和更高的压缩率。BPG文件基于HEVC(HighEfficiencyVideoCoding)视频编码技术,能够在相同的文件大小下提供更好的细节和颜色表现。其主要优点包括:
由于BPG不是常见的图像格式,默认情况下大多数操作系统或图像查看器无法直接打开它在此我们使用工具Honeyviewer查看图片
Honeyview是一款轻量级、快速的图片查看器,主要用于查看多种格式的图像文件。
我们可以看到其中的密文,我们敲出来进行解码:
考点:文件分离、理解BPG图片
下载文件,是一个APNG格式的文件
APNG(AnimatedPortableNetworkGraphics)是一种增强版的PNG图像格式,支持动画功能。与传统的GIF格式相比,APNG能够提供更高质量的图像和更丰富的颜色深度,且同样支持透明背景(alpha通道)。它在外观上与普通PNG文件相同,未被浏览器支持的情况下,会显示为静态的PNG。
我们可以使用上一题使用的Honeyview来查看图片的内容,我们可以发现这动图有几帧藏着二维码:
我们进行修复并扫码:
考点:理解apng图片、利用工具逐帧查看apng文件图像
我们发现TCP协议占比最高,并且使用了TLS协议加密(TransportLayersecurity)占比的内容很多;协议中使用了FTP协议,优先查看FTP协议发了些什么文件,过滤FTPData:
发现是TLS加密的密钥,我们通过导出分组字节流保存为私钥文件(包的后边也提示了文件名为ssc.key)
这里HTTP协议的内容已被加密:
因此我们需要导入我们获得的私钥文件进行解密:
在edit里面添加私钥文件:
解密后我们直接摸鱼搜索”FLAG“字符串:
得到了flag。
考点:网络流量分析、理解SSL/TLS密码通信框架、学会使用wireshark导入私钥文件
下载文件,内容为5张png格式的图片,我们从1.png开始分析
按照图片隐写思路,第一步我们使用tweakpng发现1.png的crc校验出现错误,因此可能存在PNG宽高隐写:
并且还警告了我们十六进制从8237处出现了无效的chunk类型
我们使用之前的脚本找出了1.png的正确宽高,我们使用010editor进行修改:
我们修改完成后,图片只修复好了一半:
根据之前警告给出的错误,我们观察十六进制从8237处出现的无效的chunk类型:
16进制中,21+200C=202D,转换成十进制刚好为8237
也就是说chunk[2]即是出现无效类型的地方,我们发现chunk[2]没有type,即IDAT标识,我们进行填补:
图片还是只修复了一点点,说明还是有地方出了问题,我们再将图片导入tweakpng中分析问题:
这次警告说16441处出现了无效的chunk类型,我们在010editor中再次运行模板进行修复:
发现这次是chunk[3]出现了问题,我们进行修复即可:
图片修复完成,我们继续分析,第二步无果,我们优先使用stegsolve,发现在图像蓝色通道的第2位平面出现了隐藏的二维码:
得到了第一段经base64编码的flag
我们继续分析2.png,按照图片隐写思路,第一步无果,我们优先使用010editor进行分析:
发现了插入隐藏的7z压缩文件,我们进行文件分离,发现7z文件打不开,我们再进行深入分析,发现7z的文件头为82370304,正确的7z文件头应该为,而题目中的文件头反而很像ZIP的文件头:504B0304,我们将分离的文件中所有的“7z”替换为“PK”
成功打开zip压缩包,打开发现里面有很多txt文件,并且内容都是一样的:
我们对压缩包中所有的txt文件进行大小排序啊,发现了隐藏的第二段经base64编码的flag:
继续分析3.png,按照图片隐写第一步使用tweakpng后发现一堆crc数值报错:
一次性这么多crc的值出错必定是暗藏玄机,我们将IDAT中的crc值进行输出发现了隐藏的第三段经base64编码的flag:
我们继续分析4.png,第一步即在图片的exif信息中的艺术家那一栏发现了隐藏的第四段经base64编码的flag:
我们继续分析5.png,第一步无果,第二步我们优先使用010editor进行分析,发现了第五段经base64编码的flag:
我们将所有经base64编码的flag进行排列组合:
ZmxhZ3s0X3 解码为flag{4_,应放在第一个1RVcmVfc 解不开3RlZ30= 解不开,但结尾包含“=”,应放在最后一个cExlX1BsY 解码为pLe_PlYzcllfc0lN 解不开有三个无法确定顺序,但经历一次次排列组合总能得到flag:
考点:利用tweakpng、010editor、exiftool对图片进行分析
下载文件,打开是一个没有后缀的文件(使用010editor分析出应该为pyc文件)和一个提示的hint压缩文件,解压后查看内容:
老朋友颜文字加密了,我们进行解密:
记录下这个字符串,可能是密码
我们再继续分析图片,按照图片隐写思路在图片属性中发现了密钥:
有密钥说明图片可能经过了需要密码的加密方式,我们优先使用steghide进行解密:
steghideextract-sfhh.jpg解密成功,使用的解密密码为welcom3!
提取出secret.txt:
密钥为“@#$%^&%%$)”长度为10位,并且密文以“U2FsdGVkX1”开头,我们尝试使用DES解密成功(这里使用了离线工具enigmator):
得到了线索stegosaurus
接下来我们分析pyc文件,首先使用工具将其进行反编译:
但最后我们还是没有看出其中有什么,那么根据提示的stegosaurus,我们先得理解这是什么东西
经过搜索我们明白了这是什么
Stegosaurus是一种隐写工具,允许在Python字节码(pyc或pyo)中隐藏文件
也就是说其实题目名称在一开始就提醒我们使用这个工具了
那么我们下载工具后执行命令:
考点:使用steghide工具、会AES解密、使用stegosaurus工具
可以看出邮件头MAILFROM:xsser@live.cn
下载文件,是一个img文件
IMG文件是一种磁盘映像文件格式,用于保存整个磁盘(如硬盘、CD/DVD、软盘、U盘等)的完整副本。磁盘映像文件可以包含磁盘的所有数据,包括文件、文件夹、引导扇区、分区表等。
至今我们已经遇到了三种磁盘映像文件格式,在此我做一个总结
我们尝试使用7z打开img文件,但是失败了,并且也无法挂载,说明该IMG文件可能是内存转储。
在某些情况下,IMG文件不是硬盘的镜像,而是计算机的物理内存(RAM)的转储。内存转储包含系统在运行时的实时数据,包括运行的进程、打开的网络连接、加密密钥、密码、以及可能的恶意软件等。
我们要进行内存取证,那么我们需要使用Volatility工具
Volatility是一款强大的内存取证分析工具,专门用于从内存转储中提取重要信息。使用Volatility可以分析内存中的活跃进程、注册表、内核模块、网络连接等信息,并帮助识别系统是否被入侵、恶意软件的活动轨迹等。
python2vol.py-fmemory.imgimageinfo-f用于指定你想要分析的内存转储文件
imageinfo是Volatility的一个插件,它可以用于确定内存镜像的操作系统类型、版本、架构等信息,以及确定应该使用哪个插件进行内存分析
在此我们逐行分析:
不同的操作系统版本和构建在内存中使用不同的内核数据结构和布局。这些差异使得解析内存映像的过程变得复杂。为了正确地解码内存映像中的信息,Volatility使用Profile来匹配内存映像的具体结构。
根据上述内容我们可以猜测操作系统为Win2003SP0x86
接下来我们将探索img文件中的物理内存(RAM)转储中的内容,也就是我们可以查看到在映像捕获时操作系统中运行的进程
我们使用以下命令:
python2vol.py-fmemory.img--profile=Win2003SP0x86pslist--profile参数用于指定内存映像所属的操作系统版本
pslist是Volatility的一个插件,通过遍历Windows操作系统的内核数据结构(如EPROCESS结构)来提取内存中的进程列表
我们发现操作失败,可能是profile设定出错,那么我们猜测操作系统为Win2003SP1x86:
在此给出输出字段的详细说明:
那么我们就优先查看在终端里执行过的命令,输入以下命令:
我们对输出内容进行逐行分析:
为了能够更全面地了解进程之间的关系或行为,我们提取DumpIt.exe的父进程的内存数据:
python2vol.py-fmemory.img--profile=Win2003SP1x86memdump-p1992--dump-dir=./memdumpVolatility的一个插件,用于从内存镜像中提取某个特定进程的内存数据。该插件会将整个进程空间的内存转储下来,并将其保存为文件。
-p指定要提取的进程的进程ID(PID)
--dump指定保存转储文件的目录
我们发现memdump插件将进程的内存数据以.dmp的格式导出,那么我们就可以继续对.dmp文件进行分析
我们可以使用mimikatz分析.dmp文件:
那么我们想要对其进行分析,实现从内存转储中提取文件(如图片)的功能可以使用文件分离的工具:binwalk和foremost
**Binwalk**主要用于分析和提取嵌入在固件镜像或二进制数据中的文件和数据,特别适用于固件分析和嵌入式系统。**Foremost**主要用于从磁盘镜像、内存转储等数据源中恢复丢失的文件,适用于数字取证和文件恢复。选择工具时,应该根据具体的任务和数据类型来决定使用哪种工具。如果需要分析固件或嵌入式数据,使用Binwalk。如果需要从存储设备或内存转储中恢复文件,使用Foremost。我们首先使用binwalk发现提取出了一大堆7z和zip压缩文件,但都打不开,那么我们再使用foremost看看:
提取出了许多内容,我们查看发现png文件夹中含有线索:
通过扫码我们发现了一串密文,再通过图片中给出的key(密钥)和iv(向量)来看,这应该是对称密码加密,密钥长度为16,符合AES加密的密钥特征
我们尝试解密,得到flag(这里使用了工具CaptfEncoder,由于密钥长度符合16字节所以AES加密解密的填充模式为NoPadding):
考点:使用Volatility进行内存取证、使用foremost从内存转储中恢复文件、理解AES加密方式
下载文件,又一个md文件,还是直接给出了flag
下载文件,是一个gif图片文件
按照图片隐写思路,第一步、第二步无果,我们优先使用stegsolve进行逐帧分析,但还是没看出什么:
此时再次看看题目,已经提示了我们注意“色彩”,那么这其中肯定存在一种隐写术
图片的内容仅仅由不同颜色的黄条组成,黄条颜色的RGB值可能暗藏玄机
我们可以注意到不同黄条的HTML标记仅最后两位发生了变化,这可能是一种16进制的信息:
提交发现即为flag
考点:理解颜色隐写术
下载文件,是一个doc文件,我们打开查看内容:
这一次没有跟背景颜色一样的白色字体的隐藏,我们打开doc的显示隐藏文字选项:
文件->选项->显示->打开显示隐藏文字的功能
为了能够复制隐藏的文字内容,我们再将全文的字体设置中的隐藏选项关闭:
按照题目描述,flag有两截,我们继续寻找,在文件的属性那一栏看到了隐藏的第二段flag内容:
我们分析两段flag,cyberchef解出一大堆字母,字母看上去杂乱无章,我们尝试字频统计:
虽然括号的位置貌似出错了,但我们看到了关键词“actf”,我们推测flag提交:
flag{actfplokmijnuhbygvrdxeszwq}{} 错误flag{actfplokmijnuhbygvrdxeszwq} 错误flag{plokmijnuhbygvrdxeszwq}{} 错误flag{plokmijnuhbygvrdxeszwq} 正确考点:会打开doc显示隐藏内容功能、检查doc属性、字频统计
下载文件,是一张png格式的图片:
按照图片隐写思路,第一步、第二步、第三步无果,我们注意观察图片可以发现最值得注意的地方就是图片左上方不自然的黑白方块
我们仔细分析这些黑白方块,像LSB隐写一样可能存在二进制隐写的信息
001100010011001000110011001101000011010100110110001101110011100000尝试解码上交,还真是flag:
考点:理解二进制隐写术
下载文件,是一个png格式的图片
按照图片隐写思路,第一步无果,我们优先使用010editor进行分析,发现文件结尾插入隐藏了信息:
我们喂给cyberchef得到了flag:
考点:使用十六进制编辑器找到插入隐藏的信息
ICMP协议中的Data行又藏有信息,我们使用tshark全部提取出来进行分析:
tshark-rattachment.pcapng-Y"icmp"-Tfields-edata>data.txt去重:
^(.*)$\s+^(=.*^\1$)再进行转码,得到以下内容:
Woofh1>Woofh1>Woofh1>Woofh1>Woof!!
!!!!!!!!总之重点放在其中的document.write(atob("Q1RGe0p1c3RBUzBuZ0FiMHV0UDFuZ1Awbmd9")),使用了atob()函数来解码base64编码过的数据(我们可以像下图这样处理冗余数据),我们解码得到flag:
考点:流量协议分析、理解ICMP协议、处理冗余数据
下载文件,是一个没有后缀的gflag文件,我们使用010editor打开发现里面的内容,一头雾水:
我们明白了这是3D打印机的G代码,我们应该如何让这些代码跑起来呢?
我们在2D渲染选项中将干扰视图的选项取消,得到了flag:
考点:不会就搜索就问、理解G代码
下载文件,是一个加密的zip文件,发现是伪加密我们进行修改:
解压后,内容是一个doc文件和一个加密的zip文件(不是伪加密)
我们打开doc文件:
有一块很显眼的空白,我们分析发现了隐藏的信息:
“Iloveyou”并不是zip文件的密码
我们观察zip文件中的内容,有一个lastword.txt文件,这可能是存在着已知明文攻击:只要我们推测出了lastword.txt中的内容,我们就可以创建一个与lastword.txt文件CRC值一样的文件进行已知明文攻击
那么按照提示lastwords.txt,我们尝试新建各种文件,尝试构造出与lastword.txt文件CRC值一样的文件
这里失败了,原因是buuctf没有把原题的关键提示给出来:
Oneday,youandyourotakufriendwenttothecomicexpotogetherandhehadacaraccidentrightbesideyou.Beforehedied,hegaveyouaUSBharddiskwhichcontainedthiszip.Pleasefindouthislastwish.提示:ThetxtisGBKencoding.提示要我们对txt进行GBK编码。。。
那么我们就使用GBK编码来构造txt文件:
我们可以看出lastword.txt中的内容应为原文中维奥莱特回想的吉尔伯特对她说的最后一句话(“iloveyou是干扰项”)
我们创建一个zip文件,将生成的data.txt导入,发现它的CRC值与lastword.txt的一样:
我们就此进行已知明文攻击,等待后得到了解压密码:My_waifu
解压文件,得到了flag.png图片
按照图片隐写思路,第一步、第二步无果,我们优先使用stegsolve进行分析:
考点:压缩包伪加密、压缩包已知明文攻击、LSB隐写
下载文件,pdf中的内容是数学题:
我们可以写一个脚本来解出这道题
a=0foriinrange(19260816): a=2*pow(10,i)+aa=a%1000000007print(a)跑了非常非常久。。。
我们可以使用以下更加简单的脚本:
a=2foriinrange(19260816):a=a*10+2a=a%1000000007print(a)得到了flag
考点:脚本编写
下载文件,是一张jpg格式的图片:
我试了,假的flag
按照图片隐写思路,第一步无果,我们优先使用010editor进行分析,发现了插入隐藏的压缩包:
分离文件并打开查看,我们可以看见压缩包中的内容:
这是一个典型的APK(Android应用程序包)文件内容
APK文件是Android应用程序的分发和安装格式,实际上是一个经过压缩的ZIP文件,其中包含了应用程序运行所需的所有资源、代码和元数据。
META-INF
文件夹主要用于存放APK签名信息,确保应用程序在安装时没有被篡改。它通常包含以下内容:
APK文件必须经过签名才能被Android系统安装,因此这些文件对应用程序的验证和安全性至关重要。
res
文件夹包含应用程序的资源文件,比如图像、布局文件、字符串资源等。资源文件根据应用的不同需求,通常分为以下几个子文件夹:
AndroidManifest.xml
是每个Android应用程序的核心配置文件,它定义了应用程序的关键属性。该文件包括:
这个文件对于Android系统来说非常重要,它告诉系统如何加载和执行应用程序。
1.先试着在模拟器中运行apk文件,查看是否存在可以直接给出flag的地方并理解软件布局2.使用工具AXMLPrinter2.jar对资源文件xml进行破解3.使用工具dex2jar将dex文件转换为jar文件4.使用jd-gui、GDA等工具分析java源码5.使用apktool等工具进行反编译修改
首先我们将.zip压缩文件后缀改为了.apk,并使用安卓模拟器运行,发现直接给出了flag
但提交了发现并不是flag,我们多次点击giveyouflag按钮发现flag随机生成
是一款主要用于分析安卓应用(APK文件),特别是分析和反编译.dex文件中的代码的工具(直接导入apk文件即可)。
在此我直接使用GDA进行源码分析(优先分析含有main字样的主函数):
这里不做仔细分析,我们也能看出个大概
MainActivity中有一段:
this.findViewById(2131034174).setOnClickListener(newMainActivity$1(this,this.findViewById(2131034173)));为ID为2131034174的视图设置了一个点击事件,点击事件的逻辑被定义在MainActivity$1(即MainActivity的一个内部类)中MainActivity$1用于处理点击逻辑,点击后生成flag中含有两个参数a、b随机生成,而我们可以看出MainActivity已经给出了正确的值
StringTrue1="flag{25f991b27f";StringTrue2="c";StringTrue3="dc2f7a82a2b34";StringTrue4="3";StringTrue5="86e81c4}";考点:文件分离、Android逆向
下载文件,里面是firefox的记录文件和密钥文件
我们可以对其中的json文件使用cyberchef进行美化方便分析:
2.读取key4.db文件→获取加密密钥(若需要)。
3.使用NSS库进行解密→使用解密密钥解密Base64编码的用户名和密码。
4.显示解密结果→显示明文的用户名和密码。
将logins.json和key4.db放入同路径文件夹中,使用以下命令:
(注:这题不知道为什么不使用flag{}了,使用GKCTF{})
考点:理解浏览器取证原理
下载文件,是一个vmdk文件
我们尝试使用7z提取其中的内容,打开报错了:
但我们还是可以提取其中的0.fat文件,我们可以将其当做一个虚拟硬盘文件进行挂载
FAT(FileAllocationTable,文件分配表)是一种早期广泛使用的文件系统,最初由微软开发,用于管理存储设备上的文件和目录结构。FAT文件系统有多个版本,包括FAT12、FAT16和FAT32,其中FAT32是最常见的一种,尤其用于较大容量的存储设备,如USB闪存盘、SD卡和外部硬盘等。
我们可以使用VeraCrypt,对fat文件进行挂载
VeraCrypt是一个流行的开源磁盘加密工具,它可以加密整个磁盘分区或创建虚拟加密盘。结合FAT文件系统,VeraCrypt可以用于创建加密的FAT文件系统卷,从而为用户提供存储数据的隐私和安全保障。
我们尝试挂载,发现需要密码,一般这种密码猜测与比赛名有关,rctf猜测正确!
挂载成功,出现了一个本地磁盘A,其中有一个图片文件说是useless_file,我们先不要管它,看看password.txt的内容:
在VeraCrypt中,同一个加密卷(如FAT文件系统)能够通过输入不同的密码进入不同的文件系统,这种特性被称为“隐藏卷”功能。这是VeraCrypt的一个高级功能,旨在提高用户数据的安全性和隐私保护。
隐藏卷是VeraCrypt中的一项技术,它允许用户在同一个加密卷中创建两个文件系统:一个是外部卷,另一个是隐藏卷。这两个文件系统共享同一个物理磁盘空间,但只有在输入正确的密码时,才能访问各自的卷内容。具体来说:
1.外部卷:
2.隐藏卷:
VeraCrypt使用密码不仅仅是为了解密文件,它还用于确定加载哪个卷。外部卷和隐藏卷有各自的密码,输入正确的密码时,VeraCrypt会根据密码解密相应的数据区域并挂载相应的卷。
因此我们卸载加密卷后再次尝试挂载[0].fat文件,这次使用密码:RCTF2019
但隐藏卷一打开就提示我们要进行格式化:
这里我们使用十六进制编辑器对磁盘进行分析,但不是010editor,而是winhex
打开后开头都是乱码,但往下看发现了flag后半段:
flag前半段呢?经过这个启发我对vmdk文件进行了16进制编辑分析找到了flag前半段:
考点:理解FAT文件系统、使用VeraCrypt工具挂载加密卷、理解隐藏卷、使用winhex对磁盘进行分析
下载文件,是一个wav格式的音频格式
我们听一下,一听就是SSTV音频,我们使用MMSSTV进行分析得到flag(图片由于环境有些吵出现了坏点):
下载文件,里面是一个.dat格式的文件
DAT格式的文件是一种通用的数据文件格式,通常被用来存储各种应用程序所生成的原始数据。DAT文件的具体内容和结构取决于创建它的应用程序,因此DAT文件本身没有严格定义的格式。
打开DAT文件的方式取决于文件的具体内容以及生成它的应用程序。以下是一些常见的方法来查看或编辑DAT文件:
总之,DAT文件本质上是通用的数据文件,没有统一的格式标准。打开和查看DAT文件的方式通常取决于生成它的应用程序。
我们根据文件名“photo.dat”分析这是一个图片文件,但图片软件打不开,推测.dat文件在存储聊天记录、图片、音频和视频等数据时,可能进行了加密和压缩处理,采取了数据加密策略,使得存储的.dat文件无法直接查看或使用常规工具打开。
我们可以直接使用它对.dat文件进行自动解密,输出了一张图片:
我们也可以拿输出的图片与源文件.dat进行比较,发现加密的方式仅仅是对文件进行了与0x33进行异或:
那么我们继续分析这个图片的内容(这里可能是没有给出足够的提示,以后要记住这种信息的考点了)
最终的flag也是没有给出足够的提示,为基站的地址
flag{桂林电子科技大学花江校区}
考点:理解并分析.dat文件、根据LTE定位基站地址
下载文件,是两张一模一样的图片
按照图片隐写思路,第一步、第二步、第三步无果,使用了zsteg、cloacked-pixel无果后,我们优先查看其中是否存在盲水印(在此我们先使用github开源的BlindWaterMark-master):
看来是不存在普通的盲水印,这里我们再尝试基于频域的盲水印脚本解密
普通盲水印通常指时域的盲水印,这种方式直接在图像、音频或视频的原始数据(如像素值或音频采样点)中嵌入水印信息。
基于频域的盲水印则将水印嵌入到图像或音频的频率域中,而不是直接嵌入到时域中的像素或采样点。
图像的频率域是指将图像从空间域转换到频率域后的表现方式,用于描述图像中像素值的变化频率。不同于空间域中通过像素的空间位置和灰度值来表示图像,频率域则描述图像中不同位置的像素强度如何变化。
我们进行提取:
python2BlindWaterMarkplus.py--originalhuyao.png--imagestillhuyao.png--resultout.png从盲水印中提取出了flag:
考点:理解基于频域的盲水印
跟大流量分析(一)、大流量分析(二)一样的题目,这一次问的是黑客预留的后门的文件名是什么
还是没有明显的交互php文件,但我们进行逆向思维,假如我们是黑客,在上传了后门文件后肯定会对其使用命令进行测试查看能否回显,常用的测试指令便是phpinfo()
我们进行搜索:
没有给出后门文件的地址,我们再分析下一个流量包,再没有就继续找:
最终我们可以得出,黑客预留的后门的文件名为“admin.bak.php”,即为flag
考点:流量分析、后门文件分析
我们使用7z打开解压查看,可以看见其中内容:
仅仅有一堆奇怪的猫猫图片和两个文件夹组成,其中一个还是空文件夹
那么我们要做的可能是将lost+found文件夹中被删除的目录或文件进行恢复
我们首先查看img文件使用的文件系统:
可以发现img文件使用的是ext4文件系统
(以下内容皆为需要学习和理解的内容与题目可能无关)
ext4是第四代扩展文件系统,设计用于提高性能、可扩展性和数据安全性。它最初作为ext3文件系统的改进版本推出,具有许多新的特性。
支持最大1EB(exabyte,1024PB)的大分区,并且支持最大16TB的单个文件。
使用延迟分配策略来提高性能。它不会立即为写入的数据分配磁盘块,而是等待到有足够的信息可用,从而更好地组织磁盘布局,提高写入效率并减少磁盘碎片。
进一步优化了日志的效率,并提供了三种日志模式:writeback、ordered和journal,以便用户根据需求选择不同的平衡点。
能够一次为文件分配多个块,从而提高大文件的写入性能。
通过元数据校验和机制,增加了系统崩溃后文件系统自我修复的能力。
我们要知道之前讲过的FAT32、exFAT和NTFS是Microsoft开发的文件系统,广泛用于Windows操作系统和跨平台存储设备。而ext4是Linux中常用的文件系统。
返回题目,我们使用mount命令对img文件进行挂载:
sudomountattachment.img1 #将img文件中的内容挂载到文件夹1中我们很有可能遇到以下情况:
这个错误提示我们设置挂载环回设备(loopdevice)失败,在此有必要介绍一下linux挂载img文件原理
在Linux系统中,“挂载”是指将一个文件系统(如磁盘分区、外部设备或文件)接入到系统的目录树中,使得用户和程序能够通过路径访问它。Linux是一个基于文件的系统,所有资源(文件、设备等)都可以通过目录路径来访问。
通常,挂载的对象是硬盘分区、光盘等实际的物理设备,但Linux也允许挂载其他类型的对象,比如磁盘映像文件。这就是环回设备的作用所在。
环回设备(loopdevice)是一种虚拟的块设备,它允许你将一个文件当作一个块设备来对待。换句话说,环回设备把一个普通的文件变成可以被Linux当作磁盘来使用的虚拟设备。
环回设备的核心思想是将文件系统中的普通文件(如.img文件)视为一个虚拟的块设备。
通过loop设备,Linux能够把一个文件(例如一个磁盘镜像)作为一个块设备处理,就像处理硬盘或USB一样。
这使得你能够直接挂载磁盘映像文件,将其内容映射到一个目录中,而无需物理设备。
当你挂载一个.img文件时,Linux实际上通过以下步骤操作:
环回设备映射:首先,Linux将.img文件映射到一个环回设备上,类似于将该文件“伪装”成一个虚拟磁盘。例如,你可以使用losetup命令将.img文件绑定到环回设备/dev/loop0:sudolosetup/dev/loop0image.img现在,Linux将/dev/loop0视为一个块设备,尽管它实际上只是磁盘镜像文件的一种映射。识别文件系统:接下来,Linux会像处理物理磁盘一样,试图识别这个环回设备上的文件系统。如果.img文件包含有效的文件系统(例如ext4、FAT32),Linux将识别它并准备挂载。挂载到目录:最后,使用mount命令将这个虚拟设备挂载到某个目录。例如:sudomount/dev/loop0/mnt/img_mount这时,.img文件的内容就可以通过/mnt/img_mount目录访问了。回归题目,我们遇到了设置挂载环回设备失败的问题,在此我们首先查看以下我们空闲的设备:
sudolosetup-flosetup是Linux中用于管理和配置环回设备的命令
-f查找并返回下一个可用的环回设备
说明loop0这个设备空闲,可以使用,我们进行挂载:
sudolosetup/dev/loop0attachment.imgsudomount/dev/loop0/mnt/ #将/dev/loop0设备中的内容挂载到文件夹/mnt/中挂载成功,我们可以在linux系统中看到我们挂载的内容了:
在ext3/ext4文件系统中,删除文件并不意味着文件数据立即从磁盘上清除。
删除操作通常只会将文件的元数据(如inode表中的指针)标记为“已删除”,即将文件从目录结构中移除,释放对应的inode和数据块,但实际存储的数据仍然存在,直到被新的数据覆盖。
简单来说,文件删除只是更新了文件系统的结构(元数据),并未立刻抹去磁盘上存储的文件内容。
现在我们可以尝试恢复文件了,在此我们需要工具extundelete
ext文件系统会为每个文件分配一个inode结构,inode中记录了文件所在的数据块、权限、大小等信息。当文件被删除时,inode表中的指针被清除或标记为可用,但如果数据块未被覆盖,extundelete可以从剩余的inode信息中找到数据块的位置,并尝试恢复。
在ext3/ext4文件系统中,文件系统的日志(Journal)还会记录文件的某些元数据。extundelete可以利用这些日志来恢复最近删除的文件或目录。
回到题目,我们使用以下命令:
extundeleteattachment.img--restore-all--restore-all一个选项,意思是恢复.img文件中的所有已删除文件
此时目录下出现了一个“RECOVERED_FILES”文件夹,里面就是我们恢复出来的文件,我们导出查看:
在该文件的末尾找到了flag
考点:理解ext4文件系统、理解文件恢复原理、会使用extundelete进行文件恢复
打开网址,能看到一篇书评:
我们能从点赞记录中找到出题人的账号:
应该是可以通过出题人豆瓣的主页找到一篇微博找到flag:
考点:社会工程学
下载文件,是一个unity编写的游戏文件:
打开游戏,是一个打飞机的游戏,可能我们达到高分即可得到flag
貌似是逆向大佬玩的题目,尝试使用CheatEngine对游戏数据进行修改
CheatEngine是一个强大的开源工具,主要用于修改和调试计算机游戏的内存和数据。它可以用来改变游戏的变量、解锁游戏功能,或者修复游戏中的问题。除了游戏修改,CheatEngine也可以用于其他需要内存修改的应用场景,比如测试和调试软件。
但在这题中最终我们找不到分数变量而修改失败:
这里可能是使用了Anti-CheatToolkit插件防止我们作弊
但按照网上的WP来看,这道题目的解法为:按住W冲出游戏屏幕即可得到flag
等到我的水平能够做到逆向unity编写的exe文件后再来补充其中的逻辑吧...
考点:(待补充)
下载文件,是一张打不开的png图片,我们丢进010editor进行分析:
以jpg模板解析发现文件尾存在插入隐藏的内容,我们提取出来:
这是什么文件呢?我们一头雾水,我们使用file命令分析也仅仅说是data数据:
ChatGPT给了我们一个完美的答案:
Python的序列化(serialization)是将Python对象转换为可以存储或传输的格式的过程,常用的序列化格式包括JSON、pickle和XML等。
JSON是易读的文本格式,键值对的形式Pickle是二进制格式,内容不可读,保存完整的Python对象XML是标记化的文本格式,具有层级结构既然我们提取出来的是Python代码进行pikle序列化后的不可读文件,在此我们使用pikle库进行反序列化
我们可以发现反序列化的数据是列表,这些列表有什么用呢?
按照题目的提示,linux系统下的好玩的命令“sl”其实是一个系统的小彩蛋,执行后会有一个小火车开过:
也称为ASCII艺术,是一种使用字符和符号来绘制图像的艺术形式。它通常使用ASCII字符集中的字母、数字、符号来在文本环境中创建图形。符号图像画广泛应用于早期的计算机程序、电子邮件签名、聊天平台等场合,因为这些场景往往限制了使用图像的能力。
那么我们可以推测我们反序列化得到的列表数据排列出来应该就是一个ASCII字符画,我们编写以下脚本进行输出:
成功得到flag
考点:理解Python序列化、理解ASCII字符画如何由列表输出
补充:一条指令让你成为黑客——打开linux系统输入“hollywood”
下载文件,是一张jpg格式的图片
按照图片隐写思路,第一步我们查看图片属性发现了如下内容,我们先记录:
我们再优先使用010editor进行分析:
我们发现插入隐藏了数据,但难以手动分离文件,我们使用binwalk:
binwalk-eFS.jpg我们成功提取出了一个zip文件,我们尝试解压需要密码,经尝试后发现密码就是图片属性中藏着的“Pactera”
里面是一个txt文件:
拖到cyberchef中没有反应,那么我们尝试进行字频统计得到了flag:
下载文件,是一个jpg格式的图片文件
文件尾部插入隐藏了一张png格式的图片,我们进行提取:
只有半张二维码,这下怎么修复?
二维码内部使用了Reed-Solomon纠错码,它允许在一定范围内修复丢失或损坏的部分数据。根据二维码的纠错级别,丢失或损坏的数据可以通过剩余的部分被推断出来。
Reed-Solomon纠错码的工作原理是:它为原始数据添加了冗余信息(纠错码),当部分数据丢失或损坏时,算法通过这些冗余信息来还原原始数据。
在此我们可以使用工具QRazyBox进行分析
QRazyBox的功能是利用二维码中的纠错码来修复部分损坏的二维码。它通过识别和分析二维码中完好和丢失的部分,将二维码的完整结构和内容还原。
当半张二维码被提供时,QRazyBox通过分析剩余的部分,利用Reed-Solomon算法以及二维码的固定模式(例如定位图形、格式信息区域等)来推断丢失的数据。
对于受损或不完整的部分,QRazyBox会根据编码规则填补丢失的数据,使二维码可以恢复到足够可以被扫码器识别的程度。
我们打开QRazyBox,创建新的项目,在一旁导入二维码图片按着图片内容一点一点的画图
调整图片大小后,我们通过视频可以明白二维码的FormatInfoPattern(格式信息模式)是一个15位的二进制序列,包含纠错等级和掩模模式,用于帮助解码器正确读取二维码的内容,我们在此设置成和图片一样的格式:
我们尝试画满半张先(建议从右下开始画):
然后再tool工具栏中选择ExtractQRInformation,开始自动分析隐藏的信息:
我们可以看出解析出的数据为
0100:这表示数据是以字节模式(ByteMode)进行编码的。000010111:这表示接下来数据长度为23个字节。0100011001101100011000010110011101111011010011110101000101010111010010010100001101011111001101000100010001010011001100010100000101011111010100110011000000110011001101000101001101111101:二进制后就是flag的值000011101100:可能代表终止符或错误校正码的一部分得到flag
考点:理解二维码修复与分析
下载文件,是一个42.tar.xz文件
这是一种压缩格式,使用了LZMA2压缩算法。它可以将数据压缩得非常小
.tar.xz文件首先是用.tar将文件打包,再使用.xz进行压缩,既可以合并多个文件又能节省空间。
我们用7z打开42.tar.xz,发现里面是一层层的压缩包,我们可以使用鼠标连点器连点层层打开直到找到flag我们可以使用以下命令进行循环解压:
while["`find.-typef-name'*.tar.xz'|wc-l`"-gt0];dofind-typef-name"*.tar.xz"-exectarxf'{}'\;-execrm--'{}'\;;done;这是一个while循环,其条件是找到.tar.xz文件的数量大于0
find.-typef-name'*.tar.xz'查找当前目录及其子目录下所有扩展名为.tar.xz的文件
wc-l是一个用于统计行数的命令。它会统计find命令输出的.tar.xz文件的数量
-gt0
-gt是Bash中的一个运算符,表示"greaterthan"(大于)。它用于比较两个数值。
0表示数字零。条件的意思是:如果找到的.tar.xz文件数量大于0,循环继续执行;否则退出循环。
do
find-typef-name"*.tar.xz"-exectarxf'{}'\;
再次使用find命令,用于在每次循环中查找当前目录及其子目录中的所有.tar.xz文件
-exec是find命令的一个选项,它允许在找到的每个文件上执行指定的命令。
{}是一个占位符,表示当前找到的文件名。
tarxf
x选项表示解压缩文件。
f选项表示指定文件名(即{},找到的.tar.xz文件)
\;是find-exec选项的结束符,告诉find这是执行命令的结束。
-execrm--'{}'\;再次使用-exec选项,在解压缩完成后执行删除操作。删除原始压缩包,可以避免重复处理。
一旦所有.tar.xz文件解压并删除完毕,find命令不会再找到任何.tar.xz文件,此时find.-typef-name'*.tar.xz'|wc-l的结果为0,while条件不再满足,脚本停止执行。
最终我们提取出了许多flag文件:
这些flag文件大小离谱得很,我们使用文本编辑器都难以打开(这里使用了vscode):
可以看出flag文件中藏了许多没用的冗余数据,但我们直接catflag即可得到flag(使用moreflag会更加好)
考点:嵌套压缩包
下载文件,是一个png格式的文件
按照图片隐写的思路,第一步、第二步无果,我们打开stegsolve打开图片查看:
这次三种颜色的通道的各个平面位上方都存在规律的黑白像素点,貌似都隐藏着消息。我们一个个排列组合过于麻烦,这时就可以使用zsteg来进行自动分析:
我们发现了DOS引导扇区文件,可以进行提取
是存储在磁盘(如硬盘、软盘或USB驱动器)的第一个扇区,用来引导操作系统。在DOS和其他基于BIOS的操作系统中,BIOS会从引导设备加载引导扇区到内存并执行它,启动系统或加载一个操作系统(它包含一段小型的汇编代码,用于启动操作系统)。该代码会指示计算机找到并加载操作系统内核,或执行其他必要的启动任务。
引导扇区因为其标准的格式和固定的大小,常常用于隐写术。攻击者可以将数据嵌入到空闲的引导扇区中,或者伪装为引导代码中的一部分,而实际运行的是隐写数据。
是计算机系统中最重要的固件之一,负责在计算机启动时执行初始硬件检查并引导操作系统。
BIOS是计算机主板上存储在非易失性存储器(通常是ROM或Flash存储器)中的固件。当用户打开计算机电源时,BIOS会启动,并执行以下关键功能:
BIOS是计算机启动和操作的基础,它为操作系统的加载提供了环境,同时为系统提供了硬件层的控制。虽然现代计算机大多使用UEFI替代了BIOS,但它仍然是理解计算机引导过程和硬件初始化的重要基础知识。
UEFI(UnifiedExtensibleFirmwareInterface)是一种现代的计算机系统启动固件接口,它替代了传统的BIOS(BasicInput/OutputSystem)。UEFI在设计上克服了BIOS的一些局限性,并为现代计算机硬件和操作系统提供了更灵活和强大的启动管理能力。
UEFI系统启动时会执行以下功能:
我们可以发现:
.<.~mitsumi........@..................)./W~NONAMEFAT12...[|.".t.V.......^..2.......Thisisnotabootabledisk.Pleaseinsertabootablefloppyand..pressanykeytotryagain..... 它提示这并不是一个可引导的软盘或存储设备,并且设备未正确配置为引导。这是一个常见的错误信息。如果用户尝试从一个非引导软盘启动,系统会显示这个错误信息。回到题目,我们对DOS引导扇区进行提取:
我们挂载DOS引导扇区:
sudolosetup/dev/loop0attachment.imgsudomount/dev/loop0/mnt/查看内容发现是一堆ICO图片:
没有找到flag,我们推测是被删除了,我们需要尝试恢复文件
为了能够恢复文件,我们可以使用恢复引导扇区数据的工具TestDisk
是一款免费且开源的数据恢复软件,主要用于恢复丢失的分区以及修复无法启动的磁盘。
扫描磁盘:TestDisk首先会扫描磁盘以识别分区和引导扇区。
识别损坏的引导扇区:如果TestDisk检测到引导扇区受损或不可读,它会通过分析分区的结构和文件系统元数据来判断问题。
与备份引导扇区对比:TestDisk会自动检测分区的备份引导扇区(如果存在,在某些文件系统(如FAT和NTFS)中,会存储一个备份的引导扇区。FAT32文件系统将备份引导扇区存放在卷的第6个扇区,而NTFS会在其卷的末端保存备份。),并与主引导扇区进行比较。
恢复或修复:
我们进行恢复数据:
这个界面提示我们:
有些磁盘在没有以root用户身份运行时可能不会显示。恢复过程中,磁盘容量必须被正确检测到,否则可能会影响恢复的成功率。如果列出的磁盘大小不正确,建议检查硬盘跳线设置、BIOS检测,并安装最新的操作系统补丁和驱动程序。我们可以选择[Proceed]继续操作。如果需要提升权限,可以选择[Sudo]以管理员权限运行
这里我们选择继续操作:
提示未检测到任何分区表类型(Nonepartitiontabletypehasbeendetected)
我们需要手动选择正确的分区表类型,具体选项包括:
[Intel]:适用于大多数使用MBR分区表的Intel/PC分区。[EFIGPT]:适用于使用GPT分区表的现代系统(通常是64位的Mac和一些x86_64架构的设备)。[Humax]:Humax设备的分区表。[Mac]:Apple的旧分区表格式。[None]:用于没有分区表的设备或媒介(例如一些软盘)。[Sun]:用于SunSolaris系统。[XBox]:用于Xbox的分区表。我们按照检测出的选择没有分区表的设备或媒介:
这个界面显示了TestDisk已经识别到磁盘上的一个分区,类型为FAT12文件系统。FAT12通常用于早期的软盘(例如1.44MB的磁盘)
我们可以进行以下操作:
[Boot]:检查或修复分区的启动扇区。如果该分区是可启动的,你可以使用这个选项恢复启动扇区。[Undelete]:恢复被删除的文件。[ImageCreation]:创建磁盘或分区的映像文件,用于备份或进一步分析。[Quit]:退出当前操作。我们选择恢复被删除的文件:
找出标红的被删除的文件,按照下面的提示按下C键复制文件:
按照提示再次按下C键即可恢复出文件,得到flag
我们也可以先进行boot操作后进行重建引导扇区,重新构建一键恢复:
Extrapolatedbootsectorandcurrentbootsectoraredifferent:这意味着推测的引导扇区和当前引导扇区存在差异。通常,这可能意味着引导扇区已损坏或者被修改了,这里是我们已经进行了重建修复了,那么我们可以转储出其中恢复的文件
[Dump]:将数据转储出来,用于进一步调试或分析。[List]:列出分区中的文件和目录。你可以使用这个选项查看能否访问文件。[Write]:将修复的引导扇区或其他信息写入磁盘,但这需要谨慎操作。[Quit]:退出当前操作。补充:磁盘精灵一款功能强大的磁盘管理和数据恢复软件,广泛用于磁盘分区管理、数据恢复、磁盘备份与克隆等任务。它不仅适合专业用户进行复杂的磁盘操作,也适用于普通用户对磁盘进行日常管理。
在此我们也可以使用磁盘精灵(破解版)对数据进行恢复(恢复linux系统的EXT文件系统可能会失效):
考点:LSB隐写、理解DOS引导扇区是什么、使用TestDisk恢复数据
下载文件,是一个png格式的图片和题目介绍的md文件:
按照图片隐写的思路,第一步无果,我们使用010editor打开图片进行分析:
零零散散的模板分析可能藏了东西,我们使用binwalk进行提取:
发现存在jpeg文件,但是提取失败了,我们尝试使用foremost
成功提取flag
下载文件,是一个pcap文件,我们使用wireshark进行分析:
流量包很小,只有54条数据包记录,并且全是使用TCP协议的报文,我们直接追踪流进行分析:
前两个TCP流像是某种交互式命令系统的命令输入和输出,VERS显示版本,PLAY、NEXT和QUIT可能是常见的控制命令
RDBD是远程调试器(RemoteDebugger)的缩写,表明这是一个调试会话的输出内容
Command:0x7ffdff7d2730是一个内存地址,表明可能在调试过程中正在执行某个命令或访问某个内存地址。
client_sd:4这可能是客户端套接字描述符的值,用于网络通信或进程间通信的调试环境。
后边的乱码字符和十六进制格式的数据看起来像是某种内存转储数据,包括一些特殊字符序列,可能代表二进制数据或某些字符串、指令集等。
总而言之最终回显了flag.txt经编码的值,我们放进cyberchef直接进行解码即可得到flag:
考点:流量分析
下载文件,是一张png格式的图片和提示文本:
提示应该是计算出flag.zip的md5值并给了出来方便我们验证
我们从图片开始分析,第一步将图片拖入tweakpng报错:
按照报错内容crc校验值出错,说明这里存在png宽高隐写内容,我们进行宽高爆破并且进行修改:
我们继续分析图片中的内容,发现开头的504B0304是zip文件头,所以说明这张图片就是zip压缩文件的16进制内容,我们要一个一个敲吗?也不是不行
这里我们可以使用Python的OpenCV和Pytesseract库对其中的文字进行自动识别
OpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉和机器学习软件库,用于开发实时图像处理和计算机视觉应用。它由Intel于1999年开发并发布,现由OpenCV社区进行维护。OpenCV广泛应用于工业、研究、机器人、自动驾驶、图像识别等领域,支持多种编程语言(如C++、Python、Java等),并且能够在多个平台上运行(如Windows、Linux、macOS和Android)。
Tesseract是一个开源的光学字符识别(OCR)引擎,它可以将图像中的文本转换为可编辑的文本格式。它最早由惠普开发,现在由Google维护和改进。
下载后使用以下脚本:
所以这里就一个个敲了(麻烦的要死了):
我们可以使用cyberchef校验一下发现MD5值正确:
我们尝试进行解压,发现加密了,发现是伪加密,我们修改后进行解压得到编码后的flag:
brainfuck编码老朋友了:
考点:png宽高隐写、使用机器学习库进行图像识别、理解brainfuck编码
下载文件,是一个pcapng文件,我们使用wireshark打开:
可以发现输出的内容为:
pzeiz我们进行处理(操作会删除前一个输入的字符):
mplrvffczeyoujfjkybxgzvdgqaurkxzolkolvtufblrnjesqitwahxnsijxpnmplshcjbtyhzealogviaaissplfhlfswfehjncrwhtinsmambvexpziz看上去是一串密文,我们应该进行解密,但放进cyberchef没有任何反应,按照题目提示我们应该去探索一下什么是AutoKey
AutoKey是一种基于Vigenère密码的加密方式,它属于多表代换密码。与传统的Vigenère密码不同,AutoKey密码通过使用部分明文作为密钥的一部分,从而避免了重复使用短密钥带来的弱点。
这种方式比Vigenère密码更安全,但仍然容易受到某些现代密码分析技术(如频率分析)的攻击。
总的来说,AutoKey是Vigenère密码的改进版本,但已经被现代的加密标准(如AES)所取代。
运行脚本在其中发现密钥为“FLAGHERE”的明文,得到flag:
考点:USB流量分析、理解AutoKey加密
下载文件,是一个wav格式的音频,听声音是非常奇怪的电磁波声
按照音频隐写的思路,我们使用Audacity分析,在频谱图中发现了一半flag:
第三步无果,我们推测剩下的一半flag使用了特殊工具进行了隐写
按照题目中的“deep”,我们推测使用了deepsound这款音频隐写的工具
DeepSound是一款用于将秘密信息嵌入音频文件中的隐写工具。它可以将文本、图片或其他文件隐藏在音频文件中,而不会显著影响音频质量。
我们将wav音频导入,发现分析隐藏文件需要密码:
DeepSound加密使用的密码哈希是可以被破解的,在此我们使用deepsound2john得到音频文件的hash值:
那么我们就只能尝试使用默认字典了,我们将hash值存入2.txt中,使用命令:
我们可以发现john首先是使用了/usr/share/john/password.lst这默认字典,之后通过生成所有可能的ASCII字符组合逐步尝试密码,直到找到匹配的密码(一般会破解超级久)
我们得到了密码azerty,导入deepsound:
得到了隐藏文件flag2.txt,点击Extractsecretfiles进行文件分离,打开组合得到flag
考点:理解频谱图、理解工具deepsound、会使用john对hash进行破解
下载文件,是一张png格式的图片文件,图片中的内容揭示了keyword:lovekfc
按照图片隐写思路,第一步、第二步、第三步无果,那么就是使用了特殊工具的隐写了
我们使用zsteg进行分析:
并没有分析出什么,接下来我们使用cloacked-pixel进行分析:
提交发现并不是flag,使用了ROT13爆破都没有得到正确的flag
按照提示1将keyword放到了flag前面也不是flag
再按照提示2,一种把关键词提前的置换,也就是说keyword作为关键词提前并且是置换密码
那么可能是将“lovekfcabdghijmnpqrstuwxyz”作为了密钥,这可能是一种多表置换的密码
我们可以确定PVSF对应QCTF(查了发现X-man的flag格式)
P经过密钥l加密成了Q
V经过密钥o加密成了C
S经过密钥v加密成了T
F经过密钥e加密成了F
密钥表:lovekfcabdghijmnpqrstuwxyz P位于17 Q位于18 V位于3 C位于7字母表:abcdefghijklmnopqrstuvwxyz P位于16 Q位于17 V位于22 C位于3可以发现密文在密钥表中的位置对应着明文在字母表中的位置通过上面的发现我们找出了密文的加密方式,接下来我们就可以编写脚本进行解密了:
考点:使用了特定工具进行的图片文件隐写、脑洞大开想出加密方式
下载文件,是一个unk格式的文件和提示文本:
不知道unk是什么格式的文件,我们优先使用010editor进行分析:
看到文件头,原来是jpeg文件,我们修改后缀得到图片,我们继续分析,发现文件尾藏有png图片:
文件分离后得到一张摩斯电码表:
仔细观察发现左下角藏着摩斯电码内容,我们进行解码:
记录下来,说不定是什么密码
我们继续分析png图片,发现文件尾又藏了东西:
这是一种开放容器格式,常用于存储音频数据,如Vorbis编码的音频。OGG文件可以包含多种类型的数据,但最常见的是OggVorbis音频。
听一下发现是摩斯电码的信号声,我们使用Audacity进行分析方便我们输出解码得到flag:
考点:文件分离、理解摩斯电码
使用dtmf2num进行分析:
我们尝试提交,发现并不是flag
我们使用Audacity分析频谱图,发现有很多杂音可能影响了判断:
我们边听边分析,前4个1868应该没有问题,但第5个音明显与第4个音不同,因此“88”这一段可能存在误判,只含有1个8
继续分析,“222”处只出现两个相同的音,因此应该只含有2个2
最后音的数量与输出的数量不一致,应该是被杂音误判了
那么正确输出可能是
18684221609186842216D9186842216D0都不是flag,上网一搜发现要发送给公众号...
考点:理解DTMF拨号音
SonicVisualiser是一款开源的音频分析工具,专为音乐和音频数据的可视化而设计。它允许用户对音频文件进行详细的分析,支持多种分析和可视化方式。
将音频导入,查看频谱图
配置参数方便分析:
根据左边的频率手动分析出所有DTMF信号,就比如第一个音的高频在1209附近、低频在697附近,因此第一个音分析为1,以此类推
同理我们也可使用Audacity分析频谱图,但是不够直观:
下载文件,里面一堆txt解压都解压半天:
发现了start.txt
给了我们数字20555,并且给出了下一个文件的地址,我们按照它说的继续探索:
这一次给了我们772,这些数字都是什么意思?
经过探索,我们发现这些数字经过十六进制转换后得到的内容为ZIP文件的文件头(304要补位补成0304):
这样我们就有了清晰的逻辑:从start.txt开始,提取txt中的数字并进行十六进制转换保存到变量中(十六进制转换的值要保存为4字节内容),再提取末尾提取最后36个字符作为下一个txt文件的名称来读取下一个txt文件再循环以上步骤
可以编写以下脚本:
我们将输出进行十六进制编辑,得到zip文件,发现加密了
没有任何提示也不是伪加密,我们尝试进行数字密码爆破也没有结果,那么就只能尝试字母与数字组合爆破(最多6位,爆了许久才出来):
我们解压得到png图片,图片打不开,我们使用010editor进行分析发现是文件头被修改的jpg格式的图片,我们修复:
图片中得到了flag
考点:脚本编写、压缩包爆破、图片文件头修复
下载文件,是含有密文的txt文件:
eprint.iacr.org是国际应用密码学研究所(IACR)维护的一个在线平台,专门发布密码学领域的预印本(preprints)论文。
关键的是这一段替换表,我们按照替换表编写脚本:
我们得到了字符串,提交发现并不是flag
按照提示二表倒立,看不懂捏,但一定是对字符串“LDVUUCMEXMLQSSFUSXKEOCCG”进行的解密操作
羊城杯的flag为“GWHT”我们再将已有信息进行分析:
密码表:MRKSABLUDCNVHFOWTGPXEIQY密文:LDVUUCMEXMLQSSFUSXKEOCCGL——G L位于7 G位于18——倒数第7位D——W D位于9 W位于16——倒数第9位V——H V位于12 H位于13——倒数第12位U——T U位于8 T位于17——倒数第8位可以发现倒立的意思了,那么我们再写一个替换脚本即可:
考点:信息收集、脑洞大开
把flag贴你脑门上了
下载文件,是一个wav格式的音频,我们尝试听一下好像什么声都没有
我们优先使用Audacity进行分析:
波形图不放大根本看不见,频谱图就有东西藏着
我们尝试一下,发现并不是摩斯电码,我们转换成二进制:
1010101010101000000110 0101010101010101000000110 0101010101010101000000110 0101010101010101000000110(以下省略)可以发现都是重复的频段(第一段和最后一段首尾相接)
0101010101010101000000110根据题目名“信号分析”,又让我想起了被电单车支配的恐惧
在此我们对信号进行分析:
我们可以发现这次的信号排列方式符合PT2262系列
我们可以注意到这次没有开始的同步码,我们分析可以得到:
FFFFFFFF0001 停止码地址码就是flag
下载文件,是一个没有后缀的文件,我们优先使用010editor进行分析:
我们可以发现文件的开头藏有奇怪的看上去像是base64的字符串(尝试使用cyberchef解密失败了),结尾处有一些变量名,可以推测这是pyc文件需要我们反编译
我们尝试使用binwalk和foremost提取其中的pyc文件都失败了,看来只好手动提取了
Python2.7:03F30D0APython3.2:160D0D0APython3.3:330D0D0APython3.4:420D0D0APython3.5:5A0D0D0APython3.6:330D0D0APython3.7:420D0D0APython3.8:500D0D0APython3.9:510D0D0APython3.10:520D0D0A我们在文件中找到了python3.6的文件头:
我们提取文件,并给上后缀.pyc,现在我们使用工具进行反编译:
uncompyle6是一个用于反编译Python字节码(.pyc文件)并还原为可读Python源代码的工具。它支持多种版本的Python,包括2.x和3.x系列。
我们可以看出这串代码中使用了encryt方式使用key对plain进行了加密
代码中给出了加密方式:使用key的ascii值与plain的ascii值进行异或加密
题目中没有给出plain的值,我们可以联想到我们最先发现文件的开头藏有奇怪的字符串,应该就是最后经base64编码的密文。
由于异或加密是可逆的,我们直接进行解密:
最终我们得到了提示:
y0u4r3f00l3dth1515n0tthaty0uwant900ndud3c4tchth3st3g05auru5明文提示我们使用Stegosaurus隐写工具:
考点:文件分离、逆向解密、使用stegosaurus工具
下载文件,发现里面是一个pcap格式的文件,按照数据包分析思路,我们先进行协议分级:
发现HTTP协议发送的data-text-lines占比最多,我们优先过滤查看:
大部分是长度一致的404回显,我们按返回报文的长度排序:
我们可以找到其中使用上传的webshell提取经base64编码的ffffllllllll11111144444GGGGGG文件的回显
我们进行解码即可得到flag
发现TCP协议发送的Data占比最多,我们优先过滤查看:
可以看出发送的Data内容含有交流,我们进行追踪流分析全是英语对话没啥可在意的
按照题目名称“TCP/IP”提示,我们开始分析tcp报文结构:
那么我们接下来开始解析IPv4协议:
标识符隐写(IdentifierSteganography)是一种利用网络协议的标识符字段进行信息隐藏的技术。它属于网络隐写术(NetworkSteganography)的一种,通过将数据嵌入到通信协议中的特定字段或部分,而不影响正常通信流程。这种技术在不被察觉的情况下隐藏信息,因此可以用于隐蔽通信、信息传输等目的。
我们使用tshark提取其中所有ipv4协议的标识符:
tshark-rattachment.pcap-Tfields-eip.id>1.txt提取出的字符进行ascii解码得到:
一串乱码,cyberchef解不开
试了很久,看了别人的WP发型是使用base91解码得到flag
考点:流量分析、理解标识符隐写
下载文件,是一串剧本一样的东西:
我们找到了原版剧本:
我们复制文本创建一个新文件,使用notepad++的compare插件将原文与题目进行对比查看哪里有不同的地方:
可以发现除了复制文本格式上的一些不同外,还有一些单词背偷偷修改了,我们一个个查看并提取其中添加的字母:
watevr{icantspeel_tiny.cc/2qtdez}就是flag
没有这种做题经验正常的思路应该是尝试读一读一些内容,会发现一些单词错误,结合题目名“Unspaellablle”去寻找正确的内容或是使用文本纠错的工具(也许可以我没试过)
考点:文件比较、脑洞大开
输出的flag有些拼写错误,我们修改成{my_favoritte_editor_is_vim}提交失败
发现要转成大写提交
考点:USB流量分析
下载文件,里面有提示文件、日志文件和流量包:
你是公司安全团队的一员,管理员最近在公司过滤代理上启用了拦截。当涉及到域名白名单时,管理员非常自信。他给了你一次捕获让你回顾。是时候证明他错了。我们首先协议分级分析流量包:
我们发现HTTP协议占比最高,并且使用了TLS协议加密(TransportLayersecurity)
没有密钥我们就无法分析HTTP协议的内容,这一次的密钥没有藏在流量包里,这一次我们该如何得到密钥?
在SSL/TLS握手过程中,密钥材料会被生成并使用。将这些密钥写入日志文件后,可以在后续的流量捕获中用来解密TLS流量。也就是说Wireshark可以利用sslkey.log中的密钥来解密TLS流量包。
我们按照导入密钥的步骤来:
我们将这些参数的值提取出来:
ce28456a0fd24ac21ec6f2a8c7e8936667dbf7fe534e490b3295c3d06c2462646464343732627b413465626537303737633234323166636461643033303533313736343263353066393735396536643266333861303164636130f03c0a7d6535396164331eaf89725ab93968fc5226cd07e1f71df3dcee9f9ef773fe97f56554a3b4a12e3efe4b我们尝试进行解码:
貌似一堆乱码,但已经出现flag格式{}的雏形了,考虑到参数kcahsni是倒序的inshack,说不定我们解码也需要逆序(在此尝试了多种情况):
最后能够得到flag的情况是按照参数传入顺序倒序读取,最后再进行逆序
考点:理解wireshark的SSL/TLS调试功能、流量分析
下载文件,里面是三个文件:
从lookatme开始分析,是一串字符串,不知道是密文还是解密用的密码,先记录,并且文件底下存在空格和换行:
进行替换:
尝试摩斯电码:
提示我们这串字符使用了AUTOKEY加密,我们使用脚本进行解密:
"YOUHAVEFOUNDME",CONGRATULATIONSONFINDINGMYSECRETNOWIWILLGIVEYOUTHEPASSWORDITISIAMTHEPASSWD我们得到了密码IAMTHEPASSWD
再继续分析maybehint.txt,发现是零宽字符隐写。我们使用在线网站解密:
出现了乱码,我们先使用vim观察一下原文:
不懂其中的原理(待补充),只好多次尝试修改设置,最后还是成功得到了提示
提示我们这里存在NTFS隐写,我们使用工具进行查看:
我们得到了隐藏的out.txt文件,里面是一堆字符
我们进行分析,字符串只由几种字符组成:
=wZl8WcndjdG我们进行字频统计:
提示为encrypto
我们继续分析secret文件,文件头MPE1正是经encrypto加密后的文件,后缀为.crypto
使用之前得到的密码,等了半年都解不开。。。
看了网上的WP,是secret文件里面藏了一段。使用strings命令可以看出来:
我们使用010editor对这段进行删除,总算解密成功!得到一张png图片:
按照图片隐写思路,第一步无果,我们使用010editor进行分析发现zip压缩包:
又是加密的压缩包(不是伪加密),我们一边爆破一边继续对图片进行分析,使用stegsolve也没有什么发现,想起了之前做过的题目——很好的色彩呃?
这里可能使用了颜色隐写术:
最后得到
成功解压压缩包得到一个docx文件:
分析密文:
大部分都是小写字母epacisj大写字母有ALPHUCKALPHUCKALPHUCK是一种基于简单加密和隐写术的工具,旨在通过使用字符的替代、变换或排列来隐藏信息。它通常用于创建难以被识别的加密文本,以保护敏感信息。该工具的设计可以包括对字符的替换、伪装和嵌入等技术,使得隐藏的信息在表面上看似无意义,从而提高数据的安全性。
使用在线运行代码的工具得到了flag:
考点:隐藏的摩斯电码、零宽字符隐写、理解NTFS隐写、字频统计、隐藏的十六进制干扰字符、encrypto工具的使用、颜色隐写术、文件分离、理解ALPHUCK代码
下载文件,是三个日记的压缩包:
我们从日记1开始分析,里面是一张png格式的图片和日记:
修改宽高得到压缩包密码:
成功解压日记2的压缩包,打开发现三个文件:
我们先从test中寻找求救信号吧,使用010editor进行分析:
brainfuck老朋友了,但我们尝试解密出现了乱码:
这时我们需要知道,brainfuck编程语言中[表示开始一个循环,条件是当前内存单元的值不为0。当内存单元的值为0时,循环会结束并跳到相应的]。而在开头brainfuck当前内存单元的初始值为0,我们一般使用++++++++进行8次加法操作,表示在当前内存单元中将值增加到8。(不信去看看前面的brainfuck题目都是++++++++开头的)
我们添上,又是得到一串字符:
丢进cyberchef得到了elf程序文件:
提取出来,运行看看:
使用IDE看看也没啥玩意,看来求救信号已经被搞走了:
那么开始从音频分析了,听一下是住手你们不要再打了啦的音频
按照音频隐写思路,第一步、第二步、第三步无果,我们使用steghide无果,那么使用silenteye发现了密码:
解压日记3成功,发现这次给的是个源码文件夹:
按照提示肯定是将求救信息隐藏在其中几个源码文件中了(上百个源码文件。。。)
提示说不能直接明文交流,不能很容易被公司审计专员看出来,那么可能又是一堆空行的内容(空格和tab键的组合),我们需要从.c源码文件中寻找到这些组合
我们可以编写脚本来寻找含有“\t”组合的.c文件:
我们从第一个文件开始分析:
我们可以发现所有隐藏的信息都在“}”后边,因此我们可以编写脚本对其进行提取和修改:
defprocess_c_file(file_path):try:withopen(file_path,'r',encoding='utf-8')asf:lines=f.readlines()#遍历每一行forline_num,lineinenumerate(lines,1):if'}'inline:#查找'}'的位置index=line.find('}')#提取'}'后面的内容after_brace=line[index+1:]#将空格替换为'0',将制表符替换为'1'transformed=after_brace.replace('','0').replace('\t','1')#输出行号和转换后的结果print(f"Line{line_num}:{transformed.strip()}")except(UnicodeDecodeError,IOError)ase:print(f"Couldnotreadfile:{file_path},dueto{e}")#指定1.c文件的路径file_path=r'C:\Users\SuperSnowSword\Desktop\组会\attachment\日记3\source_code\elf\rtld.c'#请将此处替换为实际的文件路径process_c_file(file_path)输出不是很好,但我们还是成功提取到了需要的内容
找到求救信号了!我们接下来继续输出剩下文件的内容:
考点:png宽高爆破、理解brainfuck编码、silenteye隐写、多文件分析
下载下来是一个mc地图:
不知道你们玩不玩我的世界,反正我玩。用HMCL启动器打开:
为了防止世界地图出现错误,下载相应版本进行游戏:
这里说要找到灯的开关,但我们先不急,反正是创造模式我们出去看看红石电路:
原理是我们拉下开关后,沙子和龙蛋不断下落,每次都会形成不同的回路:
根据实验可以发现:当红石全灭或全两时,灯泡常亮;当红石只有一边亮时,灯泡闪烁。
沙子使红石亮,龙蛋使红石暗
这样的话就像是做类似于异或操作一样,沙子作为0,龙蛋作为1,不断下落进行计算观察,相同则灯泡常亮记为1;不同则灯泡闪烁记为0
以灯闪烁的结果为准,录制了视频并进行分析得到了结果:
上网查了才知道原来是要进行md5大写后再提交
考点:玩我的世界
下载文件,是一张图片和提示:
条形码被遮挡了,但又没有完全遮挡,这就需要我们去手动修复
条形码算是一种一维码,只要有了一部分的宽度就可以尽情修复:
我们先选中一部分未遮挡的内容
然后进行自由变形拉伸即可
(或者是直接用笔工具进行修复也行吧)
使用工具bctester进行扫描即可得到flag
考点:一维码修复
下载文件,里面是一个无效的zip和secret提示:
我们使用010editor对zip文件进行分析:
没有任何成果,按照压缩包名给出的“flag_in_the_disk”的提示,我们尝试将其作为磁盘进行挂载,由于不知道它使用的文件系统我们先从windows的VeraCrypt开始挂载:
发现需要密码,不输入密码尝试挂载失败,尝试使用secret.txt中的密码进行挂载失败,分析了很久的secret.txt中的密码没有结果,按照txt文件隐藏信息的思路再返回上一层去查看题目给的0.03rar压缩包发现了NTFS隐藏的文件:
又给出一张密码表,数字与表格矩阵形成对应关系:
311——E223——B313——C313——C112——A122——F312——D312——D313——C311——E成功挂载磁盘得到flag:
考点:NTFS隐写、密码解密、理解磁盘挂载
下载文件,是一个.ods表格和提示文档:
打开表格文件发现什么都没有:
我们全部选中,给字体上所有buff(加粗斜体下划线染色),找到了蹊跷(用边框的滑块找不然office会自动扩展):
找到了由空格组成的信息,我们将含有空格的表格进行填充:
修改表格长宽:
考点:理解excel文件隐藏信息的方式
下载文件,解压是一个mp4文件:
是雷军的经典鬼畜视频,由于时长太长了所以难以逐帧分析,在此我们使用010editor进行分析:
Box[3]后边的内容难以解析了,可能存在插入隐藏的信息,我们使用binwalk分析:
解析出了很多图片文件和一个压缩包:
按照图片隐写思路,第一步无果,我们使用010editor进行分析:
模板无法解析,文件头字符为ara!,没有这种文件头,但能让人联想到rar文件
我们尝试改成Rar!作为文件头,打开文件需要密码
题目没有任何有关密码的提示,我们只好开始爆破,但导入ARCHPR失败了:
我们使用file命令调查文件可以发现,题目给出的rar文件使用的是RAR5。RAR5是WinRAR5.0及更高版本使用的一种压缩文件格式,它在安全性和压缩算法方面进行了改进,提供了更强的加密和压缩效率,所以ARCHPR难以破解。
RAR5的加密方式没有找到很好的爆破工具,这里就使用hashcat进行爆破
使用以下命令输出rar文件的hash值:
编号为13000,我们开始爆破(用了先前的纯数字字典和默认字典失败了,网上说原题有提示密码是GWXXXX)
hashcat-m13000-a3-ocracked.txt1.txtGWaaaa-a指定攻击方式,3表示使用掩码攻击
GWaaaa指定掩码,a表示所有可打印字符(大小写字母、数字、特殊字符)
跑了非常非常久猜得到最终的密码:
解压文件,得到一个没有后缀的flag文件,我们使用010editor进行分析:
发现是png图片,我们加上后缀打开即可得到flag:
考点:文件分离、压缩包爆破
下载文件,是一个没有后缀的文件我们使用010editor进行分析:
是一个png图片,我们加上后缀后继续分析
按照图片隐写思路,第一步、第二步、第三步无果,我们使用zsteg也没有东西,使用cloacked-pixel需要密码
上网查了WP发现,密码就是图片中的文字首字母wwjkwywq
原题的话会有提示:
提示我们文件名里面藏了这个密码
有了提示我们就可以进行解密了:
1.txt中留下了一大串代码:
我们使用在线工具解密失败,正常思路是只能根据源码进行逆向解密了(源码地址:):
考点:特殊工具的隐写、理解DES加密
发现TCP协议传输Data数据内容最多,我们直接过滤追踪流观察数据包找到了这个:
除了经base64编码的图片文件,里面还有对话的提示:
yaaaaaaaar,landho!Heywesley,yougotthatflagAyy,Igotyerfilesrighthere,matey!Andherebethemaptothebooty!(注意,这个下面是另一个文件,之前我差点漏掉)Idon'tunderstand,thisisn'tevenama-Yarrrr,thebootybeburiedbythatwhichthemappointsto!(nospacesandnocaps)Ayy,nowIbeoff.Butremember,thefactorofscalesbe1.02,andtheneighborlysortsbelimitedto50!Lastly,ifyesailthesevenseas,youdobeapirate!重点提示是其中的“没有空格和大写字母”,这可能是什么密码的提示
使用010editor发现图片还藏有很多东西,我们使用binwalk自动提取:
这里识别出了很多JPG图片却没有输出,用foremost成功了(在使用binwalk的时候,-e选项会尝试提取嵌入的文件,但如果binwalk识别到的JPG图片没有适当的头尾信息,或者在提取时遇到文件系统的问题,可能就不会输出任何结果。而foremost是基于文件头信息来恢复文件的,它会检查文件中的特征并提取所有符合条件的文件类型,因此能成功恢复JPG图片)
但按照流程,我们应该分析一堆图片:
回到TCP报文,里面还有一个maptothebooty的内容:
这段XML文件是OpenCV中的Haar级联分类器的配置文件,主要用于人脸检测或其他对象检测。
XML文件中的内容提供了对象检测的模型,我们可以提取其中一个分析一下:
结构为:
<_>
内部节点:
叶子值:
通过这种方式,级联分类器能够以较高的效率和准确度在图像中检测到人脸或其他目标。
我们使用以下Python脚本实现对具体图片的处理和检测:
importosimportsysimportcv2#cv2模块需要自行安装#获取所有的图片imgs=os.listdir('jpg')#'jpg'为分离出来的图片文件夹#加载用于检测的级联分类器cascade=cv2.CascadeClassifier('download.xml')#'download.xml'为保存的级联分类器文件#缩放因子和邻居数参数scaling_factor=1.02min_neighbors=65#提高这个值直到只剩下一张图片forimg_nameinimgs:#加载图片并运行级联分类器img=cv2.imread(os.path.join('jpg',img_name))#'jpg'为分离出来的图片文件夹#printimgdetect=cascade.detectMultiScale(img,scaling_factor,min_neighbors)iflen(detect)>0:print('ok')for(x,y,w,h)indetect:#标记检测到的区域cv2.line(img,(x,y),(x+w,y+h),(255,0,0),2)cv2.line(img,(x,y+h),(x+w,y),(255,0,0),2)#保存处理后的新图片cv2.imwrite(os.path.join('123',img_name),img)#'123'为新建的空文件夹能发现输出的图片:
于是我们知道了密码skullandcrossbones(就是海盗帽头上的那个)
解压压缩包得到了flag
考点:流量分析、文件分离、压缩包密码爆破、理解级联分类器和python的联动
下载文件,是一个pcapng文件,我们使用wireshark进行分析:
可以发现假的flag
我们将数据包按照长度大小排序可以发现藏着PNG图片的数据包
我们直接使用foremost进行提取:
现在我们要做的就是找规律了
排序规律15张有字符的图片+10张无字符的图片 总共重复了六次我们再看流量包中是否藏有什么线索:
我们可以看出所有的图片数据包的前方还有隐藏信息,前四位为0000~000e,无字符的图片的隐藏信息可以和有字符的图片的隐藏信息进行对应
我们进行对应:
suctf{My_u可行,我们继续进行对应
suctf{My_usb_pr0toco1_s0_w3ak}@YQE4YJB8考点:流量分析、规律分析
下载文件,是一个图片和pdf文件
原题是有提示的在此放出:
Amanfromthesovietunionhassentyoutwostrangedocuments.Findtheidentityofthemanaswellashislocation.Flagformatis:CFI{Firstname_Lastname_of_City}一个苏联人给你寄了两份奇怪的文件。找出该男子的身份及其所在位置flag格式为:CFI{名字_姓氏_of_城市}需要我们对文件进行电子取证找到文件作者身份信息,这涉及到社会工程学的知识
1.观察文件属性,可能隐藏着经纬度等信息,使用地图工具查询地址
有些数码相机和智能手机在拍摄照片时自动生成经纬度的EXIF数据。这样做的好处是,用户可以轻松地追踪照片的拍摄地点,也可以用于整理和管理照片。
我们从图片入手:
我们我们先将经纬度的度分秒单位转换为度:
我们使用地图工具进行经纬度查询:
我们就得到了城市所在地,Riga
我们再分析PDF,打开文件属性是看不出什么的:
我们需要打开pdf从中查看属性:
发现了作者的姓名KotikKadyrov
则flag为:flag{Kotik_Kadyrov_of_Riga}
下载文件,是RPGMAKERXP制作的一款游戏
在游戏里面随便逛一下发现要打败这个BOSS来拿到flag,这boss防御拉满根本打不动
(使用作弊工具的时候字体可能会出问题,在工具首页更改字体即可)
战斗中直接点击胜利即可过关:
我们进入与蝙蝠对话有:
后面的房间有9个门,我们得找到开门的顺序,我一个个试了,开门顺序是382157(其他的门打不开,开完7号门后会出现隐藏房间的门)
每个宝箱的事件都是显示一个数字(我这边可能是字体原因显示不出来)打开迷你地图功能,查看分析宝箱事件:
按顺序得到数字串371269
进入隐藏房间,说是要将得到的数字组合起来MD5加密上交
进行MD5加密后上交错误,我们再对得到的两串数字进行分析:
开门顺序:382157得到的宝箱数字:371269要上交的绝对是得到的宝箱数字开门顺序从小到大排序:123578宝箱数字排序:213697MD5加密后上交flag成功(碎碎念:小时候我玩RPGMAKER制作的游戏挺多的,自己也用RPGMAKERVX尝试做过类《大雄的生化危机》的ARPG游戏,大伙有兴趣的可以玩玩)
上网搜WP都有游戏源文件(Game.rxproj)...?为什么我没有
考点:脑洞大开、RPG游戏exe文件逆向
扫雷,根本不会玩
这次难以使用CheatEngine了(没有明显的数值分析),所以在此使用DnSpy进行分析
dnSpy是一个用于.NET应用程序的调试和反编译工具,允许用户查看、编辑和调试.NET程序的IL代码和资源。它支持对DLL和EXE文件进行反编译,并提供丰富的功能,如断点设置、单步调试和变量监控。dnSpy还支持C#和VB.NET,适合用于逆向工程、调试以及学习.NET编程。
unity开发的游戏使用的正好是C#语言,我们可以直接进行分析
Assembly-CSharp.dll是unity的程序集,所以我们反汇编这个文件就好了:
我们导入能看到这些东西,都是些啥?
Assembly-CSharp(0.0.0.0):
Assembly-CSharp.dll:
mscorlib(4.0.0.0):
UnityEngine.CoreModule(0.0.0.0):
我们重点分析{}中的内容:
Module:表示一个模块,通常是一个程序集(DLL或EXE文件)中的代码。它包含类、方法、属性等。Caller:通常指的是调用当前方法或函数的上下文或代码位置。可以帮助你了解代码的执行流程。Elements:可能指的是集合或数组中的元素,通常是某种数据结构中的成员。Grids:可能与UI组件有关,特别是在处理表格或网格布局时。它可以包含显示数据的行和列。在Element中找到了这个:
可以发现其中有一段if判断语句,如果踩到地雷那么游戏结束
那么我们将if中的判断内容修改为false,那么if语句中游戏结束的内容永远不会执行,那么我们踩到地雷也不会GAMEOVER!
我们进行修改:
打开游戏,我用了连点器加速了踩雷的过程。
踩完雷给出了二维码:
扫描二维码即可得到flag
考点:unity游戏exe文件逆向、代码审计
下载文件,是.raw文件,010editor难以分析,我们使用以下命令:
WindowsEventTraceLog(ETL)的一种形式,通常用于记录系统和应用程序的事件。这个文件可能包含有关操作系统性能、错误和安全事件的详细信息,通常用于分析和取证。
首先确定内存镜像的操作系统类型、版本、架构等信息:
然后枚举进程:
可疑的进程目测两个notepad.exemspaint.exe,是笔记和绘图的软件,可能会有输出的文件
所以我们再显示文件:
出现了中文肯定是很重要的文件,我们进行分析
python2vol.py-fmem.raw--profile=Win7SP1x86dumpfiles-Q0x000000001efb29f8--dump-dir/home/zxj-Q指定要提取的文件的内存地址
在集成工具中直接指定文件虚拟地址即可:
不是flag,可能是什么文件的密钥,我们先保存下来
IYxfCQ6goYBD6QlYxfCQ6goYBD6Q1YxfCQ6goYBD6QIYxfCQ6yoYBD6QlYxfCQ6yoYBD6Q1YxfCQ6yoYBD6Q没有进展了,接下来我们优先查看在终端里执行过的命令,输入以下命令:
python2vol.py-fmem.raw--profile=Win7SP1x86cmdscan集成工具可以直接查看cmd历史命令:
我们可以发现cmd命令使用记录中包含了DumpIt.exe,那就说明我们应该重点分析这个进程。对此,我们可以提取DumpIt.exe进程的内存数据
python2vol.py-fmem.raw--profile=Win7SP1x86_23418memdump-p1636--dump-dir=./这里用了自定义命令:
导出后使用foremost恢复了文件:
我们找到了加密的zip,使用之前图片中的内容进行解密即可得到flag
考点:使用Volatility进行内存取证、使用Volatility进行文件提取、使用foremost从内存转储中恢复文件
下载文件,是一个swf文件
以下是一些SWF文件的主要特点:
尽管SWF曾经是网页内容的主要格式之一,但由于安全性和性能问题,许多现代浏览器和平台已经逐步停止支持SWF格式,推荐使用HTML5等更安全和高效的技术来替代。
这里我们使用JPEXS对swf文件进行逆向分析
JPEXS(JPEXSFreeFlashDecompiler)是一个开源工具,用于反编译和编辑SWF文件。它允许用户提取SWF文件中的资源,如图像、音频和ActionScript代码。
我们将swf文件导入JPEXS:
我们从形状和图像开始分析:
形状是以图像构造出来的,我们选择其一全部导出,黑白信号让我们想起了二进制信息
我们编写脚本进行识别与输出:
importosfromPILimportImage#设置图片文件夹路径folder_path='./images'#获取文件夹中的所有PNG文件,并按数字顺序排序png_files=sorted([fforfinos.listdir(folder_path)iff.endswith('.png')],key=lambdax:int(os.path.splitext(x)[0])#依据文件名数字排序)#打开输出文件withopen('1.txt','w')asoutput_file:#遍历所有PNG文件forfilenameinpng_files:#构造完整的文件路径file_path=os.path.join(folder_path,filename)#打开图片并转换为黑白模式withImage.open(file_path)asimg:bw_img=img.convert('1')#转换为黑白模式#获取图片的像素数据pixels=bw_img.getdata()#检查第一个像素值first_pixel=next(iter(pixels))iffirst_pixel==0:output_file.write('1\n')#黑色else:output_file.write('0\n')#白色然后发现并不是二进制信息:
总共有882/2=441张图片,刚好能够组成21*21的图像,我们将1和0的输出改为(255,255,255)和(0,0,0)进行拼装看看:
得到一张二维码,扫描得到了半个flag:
我们再导出音频进行分析:
频谱图藏着另一半flag
buuctf交不起,上网搜WP发现要把下划线删去才行flag{halfflag&&_the_rest}
考点:swf文件逆向分析
下载文件,是一个单纯的file
我们优先使用010editor进行分析:
可以发现是一个png格式的图片,我们加上后缀后打开进行分析:
按照图片隐写思路,第一步、第二步无果,我们使用stegsolve进行分析:
好像都藏着点东西,我们使用zsteg进行分析没扫出个什么东西:
既然如此,我们只能在RGB不同的通道分出三张图片继续进行分析,我们先裁剪图片:
可以得到图片大小数据的差异:
R 31*10G 31*11B 31*10我们对三者的黑白组合进行组合输出(黑为1白为0):
结果输出是乱码,这时我们仔细观察Green通道的图片,可以看出四个角落是框框一样的东西:
我们分析三张图片以某种顺序拼接在一起可能会出现类似于二维码的的图片,由于G通道比其他两个通道多了一行像素,我们先以GBR的顺序进行拼接(G一行,B一行,R一行,循环往复)
写出一个合并脚本:
#文件路径file1_path='1.txt'file2_path='2.txt'file3_path='3.txt'output_path='output.txt'#读取文件内容withopen(file1_path,'r')asf1,open(file2_path,'r')asf2,open(file3_path,'r')asf3:lines1=f1.readlines()lines2=f2.readlines()lines3=f3.readlines()#计算最大行数max_lines=max(len(lines1),len(lines2),len(lines3))#合并结果result=[]foriinrange(max_lines):ifi 生成了个疑似汉信码的图片,颜色好像上反了我们进行反色修改: 左下角的定位符出了问题,我们将汉信码的矫正图形弄到该到的位置上(这里有一定愚蠢的设定,要镜像反转加旋转180°使得): 我们可以看出左下角的寻像图形位置不对,并且每个折线的延长线都有一个定位点,我们进行旋转和填涂: 剩下的随便填充可以使用中国编码APP矫正识别出来,识别不出来边扫边就撤回(注意要把汉信码放在白色背景下): 考点:lsb隐写、汉信码修复 下载文件,是我的世界游戏启动器+地图: 进入游戏,箱子里有宝剑和书: 使用指令tp到指定地址 tp255-4171传送到世界外面了,可能书上的坐标是按着小地图的XZY来的: /tp25571-41出门有线索(差点错过) 我们传送击败web狗: /tp29167-95我们传送击败谜语人: /tp32479-190我们传送击败逆向爹: 觉得难打就开指令: 为了回到出生点,我们自杀(misc妈妈的照骗辣眼睛就不放了) 最终得到flag(要用比赛的flag格式) GKCTF{w3lc0me_t0_9kctf_2021_Check_1n}考点:玩我的世界 下载文件,这次给我们的图不同寻常 在红黑相间的像素中仿佛隐藏着文字,我们仔细观察发现每列红色像素条长度都为11个像素点 也就是说当红色的像素条对其时,图片可能会出现新的信息 我们可以使用以下脚本进行 emmm虽然不是很完美但好歹是成功了 fromPILimportImagefromrandomimportrandintf='./attachment.png'img=Image.open(f)print('Width:{}\n'.format(img.size[0]))print('Height:{}\n'.format(img.size[1]))pixels=img.load()forrinrange(img.size[0]):backup_row=[]#将每一列的像素都拷贝到新的列表中forcinrange(img.size[1]):backup_row+=[pixels[r,c]]done=False#爆破每列的偏移量foriinrange(0,img.size[1]):ifdone:break#根据偏移量重新排列每列的像素forcinrange(img.size[1]):pixels[r,(c+i)%img.size[1]]=backup_row[c]#判断红色像素段是否对齐if(pixels[r,2]==(255,0,0,255)andpixels[r,12]==(255,0,0,255)andpixels[r,1]==(255,255,255,255)andpixels[r,50]==(255,255,255,255)):done=Trueprint("Done:{}".format(r))img.show()考点:像素对齐 下载文件,是一个txt文件和wav音频文件 首先打开txt文件,是mathlab的代码,我们进行分析 因此我们推测静静听这么好听的歌.wav就是加了水印的音频,我们现在要做的就是提取水印 要从2.wav文件中提取嵌入的水印图像kkk.bmp,我们可以通过读取音频数据的最低有效位(LSB)来恢复图像数据,但我们并不知道kkk.bmp图像的宽高,不知道它需要读取多少数据 网上的WP说原题的题目得分为不寻常的388分,是一个特殊的数值可以作为宽或高,然后源音频文件名为33.wav我们首先尝试33作为宽或高,写出脚本: 比起33*388,388*33更像是存在拉伸的字符串,我们调整数值不断尝试 在388*50中已经初见端倪,最终在388*100中得到了flag 考点:代码审计、理解音频水印 下载文件,是pcap文件,我们使用wireshark分析 可以发现HTTP协议占比最高,HTTP协议在传送textdata: 我们追踪HTTP流,可以发现攻击机正在尝试爆破出flag内容: 为了找出不同的回显,我们以长度排序报文: 找到了开始隐藏flag的地方,我们将这一部分报文提取即可得到flag 我们使用tshark提取长度大于765的报文内容: 非常容易,我们可以看见TCP协议传输Data数据内容,我们直接过滤观察数据流: 在TCP流结尾藏着base64编码内容: 解码即可得到flag 下载文件,是APK安装包,我们首先用模拟器运行一下看看: 我们丢入GDA看看(重点分析MainActivity): 因此我们主要分析本地库文件 lib文件夹是APK的关键组成部分,允许开发者在Android应用中使用本地代码,以提升性能或访问特定的系统资源。 我们将.apk文件后缀改为.zip文件,打开lib文件夹,使用IDA分析其中的代码 看左边比较吸引人的函数名为:AaaAaaAA我们跳转函数分析: 我们对代码进行分析(V3的值经过了字符的转换): 组合起来即是flag{YouaretheB3ST} 考点:Android逆向、理解lib文件夹、分析lib文件函数 下载文件,是pcapng文件,我们使用wireshark分析 全是USB流量,看前面的都是键盘的数据包我直接使用了键盘流量分析的脚本: 得出了一串没有用的字符串,继续分析流量包,发现其中的端倪: 从第464个数据包开始,Info那一栏的信息就不再是单纯的URB_INTERRUPTin(可以推测是键盘USB设备输入)了,而是GETDESCRIPTORRequestCONFIGURATION了 说明:主机向USB设备发送的请求,目的是获取设备的配置描述符。 说明:USB设备对上述请求的响应。 说明:表示GETDESCRIPTOR请求的状态。 说明:主机向USB设备发送的请求,以设置设备的当前配置。 说明:USB设备对上述请求的状态响应。 说明:主机向USB设备发送请求以获取设备描述符。 说明:USB设备对获取设备描述符请求的响应。 说明:主机向USB设备发送请求以获取字符串描述符。 说明:USB设备对获取字符串描述符请求的响应。 说明:主机向USB设备发送请求以获取设备ID。 说明:USB设备对获取设备ID请求的响应。 说明:通用请求块(URB)的控制状态。 然后经过一系列的键盘输入,终于有了打印机与主机的通信了 说明:主机向USB设备发送数据的批量传输请求。 请求内容:主机向USB设备发送数据,以实现写入操作,通常用于传输大量数据,如文件传输、命令发送等。 我们查看报文内容可以发现 SIZE47.5mm,80.1mm说明:定义了标签的尺寸。解释:标签的宽度为47.5毫米,高度为80.1毫米。GAP3mm,0mm说明:设置标签之间的间隙。解释:垂直方向的间隙为3毫米,水平方向的间隙为0毫米。DIRECTION0,0说明:指定标签打印的方向。解释:通常用来设置标签的旋转或对齐,0,0表示不旋转,保持原始方向。REFERENCE0,0说明:设置标签的参考点。解释:通常用来定义标签的起始打印位置,0,0表示参考点位于标签的左上角。OFFSET0mm说明:设置打印偏移量。解释:0mm表示没有偏移,打印位置与标签的原点一致。SETPEELOFF说明:设置标签撕离功能。解释:启用撕离功能,打印后标签会自动撕离,以便于分发。SETCUTTEROFF说明:设置切割器状态。解释:禁用切割器,打印后不进行标签切割,标签将连续输出。SETPARTIAL_CUTTEROFF说明:设置部分切割功能。解释:禁用部分切割功能,标签将不会被部分切割,保持连续输出。主机向打印机发送了 成功得到半个flag,我们还有BITMAP的位图数据没有分析 成功输出第二部分flag,组合即是正确的flag! 补充:其实以正确的宽高也能看出数据: 贴上能够按照格式排序字符串的脚本: 考点:打印机流量分析、坐标绘图、位图数据绘图 下载文件,是两个二维码图片: 我们先尝试扫一下第一张图片: 出现一串字符先记下 我们尝试修复第二张图片(反色+定位符),失败了 其中四个角落黑色的区域太大,我们进行重叠观察: 可以发现四个定位符都被黑色笼盖,这其中可能包含着两张图片之间的加密,key1是加密后的密文二维码,那么key2极有可能是加密用的密钥 我们尝试使用StegSolve的图像拼接功能进行解密: 可以发现key1经与key2进行异或解密即可得到正确的二维码 考点:两张图片的加密算法 下载文件,是一张二维码图片,我们先扫: 既然没有什么内容那就按照图片隐写思路来了,第一步在属性中看到了内容先记录下: 第二步无果,我们使用stegsolve进行分析: 又在关闭红色通道的左上角发现了隐藏的数据,LSB隐写: 考点:LSB隐写 下载文件: 懂得都懂: 考点:会用cyberchef 下载文件,一大串字符: 仔细一看是数学式子,其中含有未知数x,结尾存在+199的式子: 199经ascii解码得到w,符合watevrCTF的比赛格式,因此我们可以推测,当x=0时前面的式子解得值为0,+119后得到w的开头,那当x=1时应该可以得到a的开头 我们编写脚本(精度一定要够,用分数): fromfractionsimportFraction#读取文件中的数学表达式withopen('attachment.txt','r')asfile:expression=file.read().strip()#读取表达式并去掉空白字符#循环计算x从0到60的值forxinrange(61):#0到60,包括60try:#使用fractions.Fraction计算表达式值value=eval(expression.replace('x',f"Fraction({x})"))#确保将结果转换为整数进行ASCII解码integer_value=int(value)#将结果转换为整数#ASCII解码if0<=integer_value<=127:#只对有效的ASCII范围进行解码ascii_char=chr(integer_value)print(f"{ascii_char}")else:print(f"x={x}:{value},ASCII:'Outofrange'")exceptExceptionase:print(f"Errorevaluatingexpressionforx={x}:{e}")输出得到flag 考点:计算表达式 下载文件,是一个python脚本: 我们进行分析: defcrunchy(n):ifn<2: #如果n小于2,直接返回nreturnn #递归调用crunchy函数,计算当前n的值return6*crunchy(n-1)+crunchy(n-2) #返回数学计算结果g=17665922529512695488143524113273224470194093921285273353477875204196603230641896039854934719468650093602325707751568print("Yourflagis:INSA{%d}"%(crunchy(g)%100000007))我们判断一下,crunchy(g)的回显只可能小于2,并且按照数学计算的表达式g貌似只能取为整数,那么g的返回值只可能为012 n=17665922529512695488143524113273224470194093921285273353477875204196603230641896039854934719468650093602325707751568m=100000007defgetSequencePeriod(m):s=[]s.append(0)s.append(1)foriinrange(2,m*6):s.append((6*s[i-1]+s[i-2])%m)if(s[i]==1ands[i-1]==0):breakreturnsdefgetFibonacciRest(n,m):s=getSequencePeriod(m)period=len(s)-2val=n%periodreturn(s[val])print(getFibonacciRest(n,m)#41322239我的评价是: 考点:斐波那契数列? 下载文件,是一串串数组: 搜寻一番发现了其中的规律: 所有数组中元素的和为120重复最多的数字为1我们可以推测这是一个ascii艺术画,1可以输出为而其他数字输出为数字*空格 给输出的图像进行处理: flag{93ids_sk23a_p1o23}考点:数组列表ASCII艺术画 下载文件,是我的世界地图 打开游戏,是一幅地图,根据题目我们可以知道这是普渡大学的地图 根据提示,flag藏在某栋建筑里: 开启观察者模式和夜视效果更快地寻找flag: /gamemodespectator/effect@pminecraft:night_vision65535上网进行信息收集,发现了普渡大学的CTF战队常到HAAS楼里面开会 flag就在HAAS中,我们按照地图去找那栋楼: 空空如也,但在出生点后面的另一栋MTHW楼中找到了flag: 没有离出生点太远,还是能做的 考点:玩我的世界、社会工程学 下载文件,是一个apk文件 我们尝试运行以下,就是个点击软件,没多少可以交互的点 拖进GDA中分析发现了这两个方法: 分析代码: 我们先看printFirstFlag方法,,它将input中的字符的ASCII值都进行了+i的操作 也就是说我们可以手动解码: 也可以用随波逐流工具一键解密(包含变异凯撒): 考点:安卓逆向、代码审计、变异凯撒 下载文件,是.eml文件 一般可以使用微软自带的outlook软件查看邮件并且很方便分析,但新版的outlook无法预览这个过期的邮件: 所以这里用的软件是FreeEMLViewerTool 可以发现邮件附件中有Matry_Oshka.key和hack.pgp两个文件 先翻译一下邮件内容(机翻): Matry,我有些东西要给你。你知道该怎么做。我将留给你们这样的:让我轻轻躺在绿天鹅绒的田野里在碧蓝如丝的天空下休息在那里我可以凝视白色的棉花云闪烁的蜻蜓飘过在红色缎面花瓣间混合黄色和银色,四周都是金色捕捉到大自然柔和的惊人之美美化天空,点缀大地我将留在那里,平静地奉献呼吸着松香清新的空气感受着阳光洒在我周围的温暖远离所有的烦恼、心痛和烦恼来吧,你愿意和我一起感受这一切的辉煌吗这样的幻想就存在于你的脑海中和我一起跳舞,一起唱歌,然后投降你的每一个牵挂,都被我的魔咒所迷惑参阅附件。Valerie没有特别重要的信息,分析附件前我们先分析以下其他信息: 这里有软件没有显示的发件人头像的内容,我们将内容提取并base64解码得到了一张二维码: 得到字符串h4ck_the_plan3t,我们先记下 我们再分析附件: PGP文件是一种用于加密和签名电子邮件及文件的文件格式,基于PGP(PrettyGoodPrivacy)技术 附件中已经把私钥给出来了,我们使用软件PGPTool进行解密: 首先导入私钥,然后导入pgp加密文件,输入密码后即可解密,得到file.bin文件 使用010editor分析没啥东西,我们使用以下命令分析: 我们再使用binwalk看看有没有插入隐藏的信息 还真有,其中存在lzip文件,我们尝试提取出来但是提取不出来,foremost也提取不出来 可以发现LZIP字样的文件头,正好在第12字节处,我们将文件头修复: 修复后使用以下命令解压: lzip-dfile.bin-d这是一个选项,用于指定解压缩操作 我们得到解压文件file.bin.out,使用010editor进行分析发现是PDF文件: 打开pdf文件,只有一张图片: 按照文件隐写思路,使用stegsolve发现了东西: 扫码得到信息: /Td6WFoAAATm1rRGAgAhARwAAAAQz1jM4ELCAORdABhgwwZfNTLh1bKR4pwkkcJw0DSEZd2BcWATAJkrMgnKT8nBgYQaCPtrzORiOeUVq7DDoe9feCLt9PG-MT9ZCLwmtpdfvW0n17pie8v0h7RS4dO/yb7JHn7sFqYYnDWZere/6BI3AiyraCtQ6qZmYZnHemfLVXmCXHan5fN6IiJL7uJdoJBZC3Rb1hiH1MdlFQ/1uOwaoglBdswAGo99HbOhsSFS5gGqo6WQ2dzK3E7NcYP2YIQxS9BGibr4Qulc6e5CaCHAZ4pAhfLVTYoN5R7l/cWvU3mLOSPUkELK6StPUBd0AABBU17Cf970JQABgALDhQEApzo4PbHEZ/sCAAAAAARZWg==看着像base64,但base64编码中不存在-号,我们尝试将其修改为+、/或=试试: 发现7z文件头,我们进行解压: 最后一步将密码放入cyberchef进行解密即可(二进制->八进制那一段两个数字之间会出现两个空格导致十进制难以转换): 考点:eml文件分析、pgp文件解密、理解lzip文件、寻找密钥解密图片、理解base64编码规则 下载文件一个文件是emoji,一个文件是社会主义核心价值观加密: emoji不能直接解码,这里尝试搜索关键词: 成功解密 下载文件,doc文件中有我们熟悉的佛曰加密: 直接解密: 考点:理解佛曰加解密 我们先使用nc连上靶机看看是怎么回事: 它会让我们迅速给出数学计算式的答案,否则自动断开连接 我们使用IDA分析文件: 我们分析一下: 考点:代码审计、理解pwn 原文件已经404notfound了,只能上网看看wp 题目会给出三个文件,后缀名分别是.E01.E02.E03 EnCase镜像文件(通常以.E01为扩展名)是由EnCaseForensic工具创建的专有磁盘映像格式,广泛应用于数字取证领域。它能够精确地捕捉存储介质(如硬盘、USB驱动器、网络存储等)上的所有数据,包括已删除文件、隐藏文件、元数据等,且确保数据的完整性和不可篡改性。 对此,我们需要使用X-WaysForensics工具进行挂载 看网上的WP用的都是AccessDataFTKImager,当然也是可以的,个人认为X-WaysForensics功能更强大些 然后的步骤是在挂载的磁盘中找到flag文件 考点:磁盘分析 下载文件,没有后缀名使用010editor进行分析: 没有文件头但是含有zip文件头和一串疑似base64编码的内容,我尝试使用foremost和binwalk进行文件分离,然后解码: 提示了我们密码是六位数,我们尝试爆破解密压缩包,但报错了: