关于CTF的学习.杂项

发布时间:2026/8/22 13:22:08
关于CTF的学习.杂项 1.关于杂项的学习目录1.文件操作和隐写1.查找文件类型根据文件类型确定后缀名1.file命令找后缀名一般用法一准备虚拟机这种题目一般flag会藏在图片里面需要我们去破解也就是需要知道文件是什么类型的。好如果现在我们获得了一个文件并且该文件没有后缀名这个时候我们可以采取file命令file命令然后file命令的话是需要我们在vm虚拟机下实行的首先我们需要准备一个虚拟机二如果没有虚拟机也没关系可以用终端我这里用终端演示我们现在有一个不知道是什么类型的图片这个时候我们需要打开终端在放置图片的那个文件夹里面最上端输入bash即可前提是你的终端安装了Linux子系统这个安装过程主播就不讲解了以我的举例打开之后是这样的。第二步输入file之后回车第三步输入ls就可以查看你的所有图片了主播这里的都是之前拍的照片建议大家把未知后缀名的图片单独放在一个文件夹再启动bash第四步拿这个举例子这三个都没有识别但是flag藏在里面按照步骤来了之后就是这样的file和ls输入上面的图这个时候我们再输入file图片名字这里是filejpg回车之后就会出来图片的类型了。上面的图再拿主播自己的终端bash举例就是这样的可以看到这个ed......是我的图片的名字然后我用file加这个名字就会出现图片的类型了。三拷贝副本就是我们得知文件的后缀名之后在文件的旁边拷贝一个副本在副本里面修改后缀名就会出来图片的样子了简单来说就是如下2.文件头识别针对文件头有但是不知道是什么类型的时候大家可以先了解一下对应的十六进制的文件头一查找十六进制查找十六进制我们需要用到工具像什么wehex不建议会过期还要钱010editorNotepad包括vs code也能看十六进制。主播这里用Notepad举例可以看到右键的时候这里会出现用notepad执行点开之后出现了乱码我了个扫杠这是什么情况这个时候我们点击右上角的插件点击插件的hex-editor就可以查看了二查看头文件对应的十六进制对应表去查大家可以看到这四个ffd8ffe1对应去查那个表就可以了这里注意有可能点hex-editor出来的界面对应的不是最上端的需要用鼠标往上滑一下三找flag用十六进制查找flag的时候往往出题者会把flag藏在开头或者最后大家要自己找一下3.文件头缺失或者错误1.用file文件查看不了这个时候我们用file文件去查看的话就是我第一步讲解的file文件名字会发现查看不了了只会出现他是个data数据类型2.补充文件头这个时候假如我们知道了文件头是啥直接在十六进制编译器前面补上就行了这里用010editor举例假如文件头是01 02 03这个时候我们就可以识别文件是什么类型的了。2.文件分离操作1.binwalkbinwalk是Linux下用来分析和分离文件的工具可以迅速判断文件是否是由多个文件合成如果分离成功会在目标文件下的目录需要我们进行以下操作1.终端打开或者在Ubuntu里面一般操作是在防止需要分析的文件或者图片所在的文件夹的上端输入bash然后回车进入Linux系统页面输入ls就可以查看当前文件夹里面的所有文件了。或者是如果你用的是Ubuntu自带的Linux系统的话上面的方法不行因为进入Ubuntu之后输入ls显示的不是当前文件夹的内容这个时候就需要我们输入cd文件的位置注意是层层递进的比如以下操作就是打开图片picture文件夹里面的内容下面我们用终端的Linux操作不用Ubuntu主要分两种查看是binwalk分离需要加一个-e假如这里我有一个图片是胡巴提醒大家一下我的这个文章里面不仅有我自己的内容也有老师的内容所以说大家在看到图片的时候会发现前面的用户名字不一样比如我的是jared上面的Ubuntu图片可以看到而这个胡巴的就是老师图片因为我需要用老师的图片来举例子不过方法都是一样的这个图片不缺文件尾他的文件名字是完整的这个时候我们就需要用binwalk来分离文件了但是也有可能不是这个操作反正做一下也没错这里的我们就假设需要binwalk2.打开文件这个时候进入终端后我们输入ls查看当前的所有图片或者文件。就是这样的一个情况我的picture文件1里面又有其他文件文件2又有图片。假如说我们的目标图片在文件夹2文件2在文件1里面就是文件1里面还有别的文件里面我们就需要先cd文件夹2在输入ls查看假如目标文件就在我们的文件1里面之后就直接操作就行比如这个胡巴在06-13的文件夹里面我们就需要先cd一下再ls查看它的名字是sim.jpg3.binwalk查看是否有多余内容这个时候我们输入binwalksim.jpg就会出现以下情况我在这里给大家解释一下这个怎么看从0x0开始到596F之前它是JPEG类型的文件从596F到后面它就是Zip类型的文件了。也就是说这个图片是由两个不同类型的文件组成的。4.分离文件操作这个时候我们知道图片的组成就可以直接分离了格式是binwalk -e 文件名。会出现下面的情况。我们可以看到在分离文件完了之后它就会给我们新创立一个文件夹用来专门放置分离之后的文件的我们再次输入ls就可以查看到了有一个新的标黄色的部分我们回到当前文件目录中就可以发现有新的文件夹了这个时候点开这个文件夹会出现这样的情况按道理来说只有一个压缩包的就是596F.zip不过好在binwalk分离文件的时候帮我们自动压缩了所以我们直接查看这个key.txt即可如果大家想要验证的话把那个压缩包解压缩一下也会出现同样的内容。点开之后就可以看到flag了2.其他方法binwalk用不了的时候比如foremost1.提取文件foremost的格式是foremost文件或者图片名字 -o 创建的文件名字。以上一个为例如果sim.jpg的文件利用binwalk打不开的话就可以用foremost格式就是这样的然后那个123是我创建的文件名字打开之后你会得到一个zip文件夹和一个日志。注意这个zip文件夹就是一个普通的文件夹需要自己去解压缩他不像binwalk一样会帮你3.dd怕大家搞不清楚我这里先把dd的用法和图片给大家看一下dd是这三个里面最难用的dd针对于那种流量包里面有一个压缩包然后这个压缩包太大了分了好多片并且这些并不是合并就能用的而dd相当于就是给你自动的排序并且合并了。我说的可能很难懂我这里给大家举个例子就知道了。大家看我这张图片第一个正方形分成1234四个板块12板块是jpg类型而34板块是zip类型的第二个正方形是1234分别所储的位置可以看到他不是按顺序的1jpg的一半下面是3zip的一半。这个时候利用foremost和binwalk合并的话比较难我们就需要用到dd来帮我们自动合并了。1.提取目标内容这里给大家一个图片然后我给大家介绍分别是什么意思1.txt是我的源文件打开之后是1234567890abcdefgdd if1.txt表示我要指定的源文件并且要对他进行更改of2.txt表示我要输出的文件要把源文件改成什么样子比如这里我想把1.txt改成2.txtbs5(表示从123.......往后开始数五个块那么这里就是12345count1表示我只取一份五个块的那么输出之后我们的文件就变成了2.txt里面内容是12345同理下面那个我们把文件名字改成3.txt然后count变成了2就是取两份五块的也就是12345678902.删除不必要的内容这个时候如果我们想删掉一些内容比如我要删掉12345后面的不变那么我们就要在后面加一个skip1表示跳过第一个块然后count3表示我只取三块每一块有五个字节67890为第一块abcde为第二块fg为第三块最后输出的结果如下图下面我们来举个例子我这里有个1.txt的文件里面有1234567890abcdefg的内容然后先用cat查看一下内容之后进行改动变成2.txt由于这个图片是老师讲课的例子我这里给大家看我自己电脑举的例子可以看到过程是一样的上面那个例子是提取文件也就是保留前面的内容下面这个是删除前面的文件保留后面的可以看到过程和我刚才讲的一样给新文件命名为4.txt然后删掉12345之后就是剩下的内容了。基本的方法大家都知道了下面我们来实操一下首先我们知道我们要用binwalk去判断一下他是由哪些部分组成的由上面我们知道从0x0开始到596F之前它是JPEG类型的文件从596F到后面它就是Zip类型的文件了。而用binwalk -e格式无法分离所以我们就要用到dd了基本方法如下bs1就是我们一个字节一个字节的取然后又count23046是保存23046个skip22895是跳过前面22895个字节可以看到在表格的第一行的那一竖就是对应的十进制22895前是JPEG格式22895到23046就是zip类型的了。分离之后我们就得到了一个新的文件夹了分离之后得到了一个zip的压缩包再给它解压一下就行了。4.010editor和dd功能差不多但是比dd更简单这里我们用dd的时候容易忘记格式而且遇到多的组成还要去计算保存多少和删除多少这里我们用010editor查看16进制会更方便一点具体方法如下1.查找16进制的组成我们可以看到从0x596f往后就是zip文件了我们对应图片发现最左边是5960然后上面是abcd到f我们对应一下第一个往后就是50 4B 03 04刚好这个就是zip对应的十六进制。后面都是zip类型的2.右键保存然后我们呢右键点击selection再点save selection给他保存到一个文件夹里面保存到一个文件夹注意后缀要和我们复制的类型一致比如从后面都是zip类型的那么我们命名的时候后缀也要是zip。再点保存就行了再解压缩一下就出来了是不是比dd要简单一点呢只需要在十六进制表里面对应找前面部分和后面部分就行了。5.已知16进制但是需要自己导入什么意思呢就是我们得到了一个txt的文本文件打开之后里面是一大串密密麻麻的字符但是他是一个十六进制的文字给他全部写在一起了需要我们去自己导入这个时候就需要我们的010editor了具体过程如下在010editor的左上角的file然后import hex再选择那个文本文件就可以了。可以发现他的开头那一串就是一个rar类型的文件后面的都是rar不存在有多个类型组合的我们就只需要把文件从txt形式改成rar类型的就行了。或者是跟上面的方法一样全选之后点selection再新建立一个文件夹并且改成xxxx.rar就可以了那么如果他这一串txt的里面包含了其他组成呢比如是rar和zip的类型。那我们就先用binwalk查看从哪里到哪里是rar从哪里到哪里是zip再分别选中前面的rar的那些内容右键selection在文件名后缀改成rar格式然后再对后面的右键selection把文件名后缀改成zip类型分别得到两个再解压缩一下zip文件flag就藏在其中一个里面了方法和上文讲的雷同3.文件合并操作1.Linux下的文件合并比如说现在我们得到了四个不同的图片文件还有一个md5的一个文本文件一般来说md5是需要我们来校验的就是我们把这四个合并成一个新的文件之后看看是不是等于md5的值1打开Linux下的文件夹这个就是在对应防止文件夹的上面输入bash打开即可然后点击ls可以查看有哪些文件2.文件合并我们采用cat gif01 gif02 gif03 gif04 新的文件名的格式当我们合并完了之后再次查看会发现值和md5文本文档的值是一样的。这里我们再用md5sum 1.gif的格式回车查看1.gif在md5下的值是不是和上文是一样的可以发现确实是一样的。2.Windows下的合并也就是在终端power shell下1.格式要求我们在对应的文件目录下打开就不用再cd 文件路径去找了所以他的格式是copy /B 文件1文件2....文件n 新文件名字回车之后可以看到就是这样的、2.校验新文件的哈希值是否和md5的一样他的格式是certutil -hashfile 新文件名 md5即可查看这里我的新的文件名交叫2.gif可以发现查看之后和md5里面的哈希值是一样的3.发现文件打不开可能是文件头残缺将这些小文件合并之后会发现依旧打不开我们在终端bash的Linux系统下输入file 文件名会发现显示的data数据没有告诉你文件是什么类型的遇到这种情况大概率是文件头残缺了我们知道因为这些都是gif的文本文档所以根据前面的文件头的表可以发现gif的文件头是47494638那么后面我们就看一下是不是残缺了1.找到1.txt的文件所在位置右键在010editor中打开这里我们发现文件头并不是我们需要的2.手动添加保存我们输入后保存我们查看后发现他是一个动图这还是被加密的我们无法看到里面的内容。这里面的字符还是需要我们来拆解一下的逐帧拆解每一张的内容心细的朋友会发现最后面有两个等号基本上他是一个bash64的编码可以把它手动提取出来去解码一下就行了4.文件内容隐写所谓文件隐写就是把key用十六进制写在文件里面具体方法如下一般在开头或者结尾如果在中间的话可以搜索关键字key来查找用010editor举例2.图片隐写涉及的图片隐写的话我们常常有以下方案1.exifexif比较简单需要我们对目标图片右键然后点击属性点击详细信息会发现这里提示了password是。。。。如果题目简单的话会直接出现flag但是这里只给了我们提示2.Stegsolve常用找两个图片不同可以针对两个相似的图片我们要从其他方面进行分析我们在用stegsolve的时候题目中会给我们一个图片然后我们先要对这个图片进行文件隐写就是右键这个图片在notepad中打开翻到最下面有一个链接点进去之后他会让我们下载图片下载之后就得到了两张一模一样的图片1.这里我们先找到对应的图片位置。2.先打开通过链接下载的图片然后去比较之前的那一张3.我们点击直到上面出现SUB的时候发现出现了一个二维码而SUB是减法的英文单词缩写上面还要ADD加法等等一般我们是做减法操作。但是一般来说我们扫描这个二维码是比较困难的他可能给你缺一个角把二维码搞成彩色等等那么还需要我们做一个操作叫做反射处理等下后面会讲3.LSB图片隐写最低有效位1.利用Stegsolve该工具这个工具很繁琐需要点很多次去不断尝试这里我们有一张图片然后在analyse找到data extract之后出现的界面是这样的选择最低有效位0 0 0但是涉及到一个顺序的问题就是你不确定他是rgb还是grb还是等等。所以这个时候就需要我们去尝试然后一个一个找了最后我们发现他是BGR的点击preview就找到了flag哦对了那个row column msb lsb这些都是要尝试的这里只是给了最终答案不过最多也就试个24次而已。2.zsteg这个需要我们在虚拟机中打开才行根据下面步骤安装就行了如果安装失败了可以找ai问一下。这个工具的好处在于我们可以直接找到不用一个一个去尝试然后你也可以跟我一样在bash直接下载就不用跑到虚拟机了sudo zsteg3.wbstego4通常可以找很多图片的最低有效位而且如果你是bmp和pdf类型的话用这个效果不错然后我们一般选择的是decode选择支持的格式对应做题的时候假如现在我们有一个是jpg的格式的图片。我们需要把他转化成pwn格式的。右键-打开方式-画图然后直接转换就行这里是要保存的另外的地方可以看到生成了这个文件再用十六进制编译器打开就行4.tweakpng首先针对的是题目图片打不开出现残缺的时候可以考虑是不是crc校验出现错误。如果是的会出现以下情况然后需要我们去手动修改对应的16进制把CB D6 DF 8A 改成后面那一排这个时候按道理来说我们是可以查看图片了还有一种情况就是他的图片没有问题但是他的高度和宽度出现问题需要我们去修改这个时候就需要我们用到python脚本做一个脚本放到文件夹里面命名xxx.py这里的open后面那个对应的是要打开的文件名字crc32 0x.........对应的是他给你报的原来crc的值比如这里的是cbd......import os import binascii import struct crcbp open(2.png,rb).read() for i in range(1024): for j in range(1024): data crcbp[12:16] struct.pack(i,i) struct.pack(i,j) crcbp[24:29] crc32 binascii.crc32(data) 0xffffffff if crc32 0xcbd6df8a: print(i,j) print(hex,hex(i),hex(j))我这个是对应的python3的脚本如果没有python3可以去下载一个运行的时候直接在终端输入代码即可注意针对的是png类型的文件格式是python3 xxx.py针对Ubuntu的如果是powershell的格式就是python xxx.py这个xxx.py是你自己创建的python脚本里面写猜测crc的代码就是那黑色的图片运行之后就会出现对应正常的长和宽了这个时候我们对应去看宽是对的但是高度不对要把A4改称F4改完之后保存即可之后我们再看图片就可以找到flag了5.Stegdetect针对jpg加密这个其实不是很推荐因为比较老了3.压缩文件1.伪加密1.16进制编译器伪加密一般的格式是这样的就是我们知道504b0304这是zip文件类型的文件头我们需要搜索之后从50开始往后数9到10个应该是0000的形式。下图可以看到第九个是01所以需要改成0000的形式上面那个是zip类型的文件如果是rar类型的一般是再上方数字7对应的下面两个把他改成00即可。通常是第24位字节的只限于基本情况2.暴力破解(针对Windows下加密过的zip文件小技巧如果你直到了密码的开头是abc并且密码的后三位是数字你可以这么做攻击选择掩码的形式然后在掩码处输入abc3.明文攻击我们现在压缩一个文件打开16进制编辑器看旁边我们知道他是一个txt文件里面的内容是noflag那么flag就肯定不会藏在里面。可以发现下面有一个png类型的也就是说我们需要把这个文件十六进制的某个字节改一下然后对png后面的内容进行压缩提取一个图片然后做图片隐写。那为什么我们再解压的时候只解压出来一个txt的文件没有把png的图片解压出来呢是因为文件的格式出错了。我们知道txt的末尾内容是nooooooflag所以说三个感叹号后面就是png的内容对应的十六进制就是EC 11 7A那一块好这里我们需要把7A改成74为什么呢我下面来给大家讲一下一个文件可以分很多类型而0x74就是文件头块也就是我们需要的png的文件头块所以我们这里把7A改成74保存之后再去解压可以发现多了一个文件发现图片是一个半张的二维码这个时候就需要我们去修复他的高度了4.流量取证说到流量取证我们就需要用到必不可少的wireshark软件了建议大家都下载一个wireshark下面主要给大家讲一下wireshark怎么用的过滤器过滤ipip.src eq x.x.x.x表示的是我们的源ip地址src就是source的缩写ip.dst eq x.x.x.x表示的是我们的目的地ip地址dst就是destination的缩写中间用or或者and链接看你需要过滤到哪一个就用哪个过滤端口srcport源端口数据包是谁发出来的发送方的端口dstport目标端口数据包要发给谁接收方的端口tcp.port同时匹配源端口 OR 目标端口其中一个也就是二选一那么第一条表示的意思就是TCP 协议端口是 80或者 UDP 协议端口是 80 的所有数据包不管是发出去还是接收回来只要一端端口是 80 就显示第二条的意思是只显示 TCP 数据包里接收方端口为 80 的包目的地也就是数据包要发给 80 端口客户端向服务器发送请求的包。第三条的意思是只显示 TCP 数据包里发送方端口为 80 的包源头也就是从 80 端口发出来的包服务器回复给客户端的返回包。第四条的意思是大于等于小于等于and并且显示 TCP 包源端口或者目标端口数字在 180 这个范围之内的全部数据包过滤协议常用长度过滤http过滤过滤语句含义通俗解释http.request.method GETHTTP 请求方法等于 GET只看 GET 请求浏览器访问网页、打开图片这种获取资源的请求http.request.method POSTHTTP 请求方法等于 POST只看 POST 请求提交表单、登录、上传数据这类请求http.request.uri /img/logo‑edu.gif请求的 URI访问路径完全等于/img/logo‑edu.gif只筛选访问这个 gif 图片的数据包路径必须完全一模一样http contains GEThttp 协议数据包里面包含字符串GET只要 http 报文里出现 GET 字符就匹配不是只看请求方法报文任意位置有就命中http contains HTTP/1.http 数据包包含HTTP/1.字符串筛选 HTTP1.0、HTTP1.1 版本的流量http.request.method GET http contains xxx代表逻辑与同时满足两个条件既是 GET 请求并且 http 报文还包含指定字符串两个条件必须全部成立http contains flaghttp 报文里面包含flag字符串抓包找 http 流量里出现 flag 关键词的包CTF 经常用http contains keyhttp 报文里面包含key字符串筛选 http 流量中出现 key 关键字的数据包tcp contains flagTCP 原始载荷里包含flag字符串不局限 HTTP只要 TCP 数据包的数据部分有 flag 就匹配不管是什么应用层协议协议分析点击软件上面的分析然后点协议分级一般我们会查看IPV4的一般有UDP的协议和TCP的协议TCP传输控制协议 Transmission Control Protocol相当于打电话拨通才说话说话对方听得清清楚楚顺序不乱丢了会重传。特点面向连接通信前要三次握手建立连接结束四次挥手断开连接可靠传输保证数据一定送到不会丢包、不会乱序丢包自动重传拥塞控制网络卡的时候会放慢发送速度防止炸网有开销头部大握手、重传都要耗时间速度会慢一点适用场景对数据不能错不能丢HTTP/HTTPS 网页浏览文件下载SSH 远程登录邮件UDP用户数据报协议 User Datagram Protocol相当于寄明信片直接往外扔不管对方在不在不管收没收到不确认。特点无连接不用建立连接想发就直接发包不可靠不保证送达可能丢包可能乱序不会重传几乎没有额外开销延迟极低速度快没有拥塞控制发得猛会丢包适用场景可以丢一点点数据但不能卡顿延迟直播、视频通话游戏王者荣耀、吃鸡实时对战DNS 域名解析语音通话可以发现tcp主要占据大半个部分有百分之96.4所以我们优先看多的然后再tcp里面Hypertext那一行缩写是http占81.8所以我们优先看这个数据包具有某种特征可以筛选出来右键作为过滤器应用选中即可流汇聚我们先输入想要查找的流比如http或者是tcp这里用http举例比如说我选择追踪流http流一般看得更清楚一点就会出现下面的情况这里打开就是http流的数据包内容数据提取我们一般是导出http的流量其实就是一个文件分离的操作我拿一个题目来做例子他就是需要导出文件然后去慢慢分析的点击save all保存所有的文件会发现都保存到指定的文件夹里面去了我们找到流量最大的那个打开之后发现了一长串的字符细心的你可以发现89504e47是一个rar文件类型的文件头所以我们需要把这后面的所有的都复制到十六进制编译器当中保存成rar类型的文件然后打开文件之后就可以得到flag了。然后下面个的题目对应的是的流量取证类型可以看一下题目先找到getsheell流再找到flag首先我们要知道我们的电脑终端就用webshell然后shell是可以执行一个命令的接下来我们开始慢慢查找。先输入http的发现没有扩大范围输入tcp的会发现有很多数据流根据前面的过滤器语法我们选择一个效率较高的contains语法可根据自己的需要进行变换详情请见wireshark的过滤器板块好那么现在我们发现找到了一个含有flag关键信息的流但是貌似没有那么简单因为前面提到说要先获得getshell流再找到flag出题人要我们执行命令获得flag那我们就筛选一下输入command命令去查找会发现也有一些数据流可以先左键查看每个流的信息会发现第四个是我们需要的因为仔细点看他有那个C:的那种标志就很像shell里面的格式ls啊之内的我们去追踪他的http流会发现就是一个cmd的界面这个数据包里面的内容是type xxx就是他查看了这个txt的文件会得到一个base64的编码然后shutdown......就是表示他重启了电脑之后去解码一下就可以了