网络安全进阶学习第二十课——CTF之文件操作与隐写


一、文件类型识别

1、File命令

------ 当文件没有文件扩展名,或者具有文件扩展名但无法正常打开时,可以根据识别到的文件类型进行修改文件扩展名,从而使文件能够正常打开。

使用场景:不知道后缀名,无法打开文件。
格式: file myheart
在这里插入图片描述
这里就识别到是一个PCAP的流量包

2、Winhex

------ 通过WinHex程序可以查看文件的文件头类型,并根据文件头类型来判断文件的类型。

使用场景:windows下通过文件头信息判断文件类型。
在这里插入图片描述

3、文件头残缺/错误

------ 一般情况下,文件无法正常打开通常有两种原因:文件头部残缺和文件头部字段错误。

------ 对于文件头部残缺的情况,可以使用 WinHex 程序来添加相应的文件头信息。而对于头部字段错误的情况,可以尝试找到一个同类型的文件,将其作为替换文件来恢复文件的正常打开。

使用场景:文件头部残缺或文件头部字段错误无法打开正常文件
格式:file 文件名
在这里插入图片描述


二、文件分离操作

------ 如果不确定文件是否多个文件组合,可以使用WinHex之类的工具查看,查看里面是否有PK等关键字样,以及其他疑似的文件名。如下图:
在这里插入图片描述

1、Binwalk工具

------ Binwalk是一个在Linux下用于分析和分离文件的工具,它能够快速判断文件是否由多个文件合并而成,并将其进行分离。如果分离成功,会在目标文件所在的目录下生成一个名为"文件名_extracted"的文件夹,里面存放着分离后的文件。

------ Binwalk有个特点就是分离出压缩包会自动给我们解压,加入压缩包有密码就会解压出一个空文档。

  • 普通用户登录命令:
    分析文件:binwalk filename
    分离文件:binwalk -e filename
    在这里插入图片描述

  • Root权限用户登录使用命令:
    分析文件:binwalk filename --run-as=root
    分离文件:binwalk -e filename --run-as=root
    因为在Linux系统中,直接使用root权限用户登录会认为是很危险的行为。

2、Foremost

------ 如果binwalk无法正确分离出文件,可以使用foremost,将目标文件复制到kali中,成功执行后,会在目标文件的文件目录下生成我们设置的目录,目录中会按文件类型分离出文件。

  • 用法:
    foremost 文件名 –o 输出目录名
    在这里插入图片描述

3、dd

------ 当无法使用自动工具正确分离文件时,可以借助 dd 命令手动实现文件分离。
------ Binwalk和Foremost分离只能分离按照顺序块来隐藏的文件,无法分离文件块打乱的文件。

  • 举例:
    ------ 一个文件里面藏有两个文件,分别是文件1和文件2,每个分件都被分为2块,分别是文件1a和文件1b、文件2a和文件2b。
    ------ 假如文件块的排放顺序是:文件1a、文件1b、文件2a、文件2b,这种使用Binwalk和Foremost是可以分离的。但假设排放顺序是:文件1a、文件2a、文件1b、文件2b,这种打乱的状态下的,Binwalk和Foremost是无法分离的,这时候就可以使用dd来分离。

  • 格式:
    dd if=源文件 of=目标文件名 bs=每块多少字节 count=多少块 skip=跳过缩少块

    • 参数说明:
      if=file #输入文件名,缺省为标准输入。
      of=file #输出文件名,缺省为标准输出
      bs=bytes #同时设置每块读取的大小,可代替ibs和obs。
      count #总共要读取块数目
      skip=blocks #从输入文件开头跳过多少个块后再开始复制。
  • 用法展示:
    这里我新建一个文件为123,内容如下:
    在这里插入图片描述
    输入命令:dd if=123 of=aa bs=5 count=1
    在这里插入图片描述
    这时当前目录下就多了一个aa文件,打开文件查看
    在这里插入图片描述

4、Winhex

------ 除了使用 dd 命令之外,还可以通过使用 WinHex 工具来手动分离文件。只需将目标文件拖放到 WinHex 中,然后定位到需要分离的部分,最后点击复制即可完成操作。

使用场景:windows下利用winhex程序对文件进行手动分离。
------ 分离方法就是把需要的部分选中然后复制下来,再新建另一个文件,把复制下来的部分粘贴过去。
在这里插入图片描述


三、文件合并操作

1、Linux下的文件合并

使用场景: linux下,通常对文件名相似的文件要进行批量合并
格式:cat 合并的文件>输出的文件
在这里插入图片描述

------ 完整性检测:linux下计算文件md5:
md5sum 文件名
在这里插入图片描述

2、Windowsa下的文件合并

使用场景: windows下,通常要对文件名相似的文件进行批量合并
格式:copy /B 合并的文件 输出的文件命令
在这里插入图片描述
------ 完整性检测: Windows下计算文件md5:
certutil -hashfile 文件名 md5
在这里插入图片描述


四、文件内容隐写

------ 文件内容隐写,就是直接将KEY以十六进制的形式写在文件中,通常在文件的开头或结尾部分,分析时通常重点观察文件开头和结尾部分。如果在文件中间部分,通常搜索关键字KEY或者flag来查找隐藏内容。

使用场景:windows下,搜索隐写的文件内容

Winhex

------ 通常将要识别的文件拖入winhex中,查找具有关键字或明显与文件内容不和谐的部分通常优先观察文件首部和尾部,搜索flag或key等关键字,最后拖动滚轮寻找。
在这里插入图片描述


五、图片文件隐写

1、图片混合

------ 图片混合也就是把两张图片重叠在一起,由于颜色的重叠或者其他一些因素,我们只能看到其中的一张图片,达到了这种效果就相当于隐藏了另一张图片。

推荐的工具: Stegsolve.jar(可调节图片颜色像素)
原来的图片:
在这里插入图片描述

调节后的图片:
在这里插入图片描述

2、LSB(最低有效位 Least Significant Bit)

------ 通过修改图片灰度、闽值、曝光度、颜色曲线等方式找到人眼识别不到的信息。

推荐的工具: Stegsolve.jar

隐写步骤

  1. 假设我要在一张图片里面隐藏一个字符f,首先把f转换成ASCII码,再转换为二进制
    f:102 对应二进制:01100110

  2. 在图片中选取8位连续的16进制,再把这8位转换位二进制
    在这里插入图片描述

  3. 把转换后的二进制数的最后一位按照上面f的二进制值:01100110来进行一一替换,最后就把替换后的二进制值转换位16进制,用来替换原图片中选出来的8位16进制。
    在这里插入图片描述

工具查找隐藏信息方法

使用的图片是:
在这里插入图片描述

  1. 用 Stegsolve.jar 打开图片,发现 red0,green0,blue0 这三个通道的图片上方有异样:
    在这里插入图片描述

  2. 打开文件>>Analyse>>Data Extract
    在这里插入图片描述

  3. 将Red、Green、Blue三个位置的 0 通道勾选并导出保存为 png 格式的文件:
    在这里插入图片描述

  4. 获得 flag.png 图片,发现是个二维码
    在这里插入图片描述

3、隐写进图片属性中(查看图片属性)

在这里插入图片描述

4、隐写图片大小(图片大小修改)

------ 一般图片都是正常大小可进行查看,但是也会遇到图片损坏或者其他事件。然而图片大小如果存在问题,我们一样是可以对图片进行一个访问的,但是我们只能看到图片的一部分,使用这种方式对图片的其他部分进行一个隐藏。

  • 例:下图就是对图片大小进行了修改 导致我们不能看完整的图片信息
    在这里插入图片描述
  1. 使用WinHex修改图片大小
    ------ 这时候可以使用WinHex来修改图片大小,一般第18、19位是宽,第22、23位是高
    在这里插入图片描述

  2. 在图片属性查看大小,再转换位16进制
    ------ 假如不知道是哪几位是图片大小,可以直接再图片属性中查看大小,再把数值转换位16进制,最后再在WinHex中查找。
    在这里插入图片描述
    在这里插入图片描述

  3. WinHex修改图片属性后就能正常查看
    在这里插入图片描述

5、GIF动图信息隐藏

使用工具:Stegsolve.jar
使用工具Stegsolve.jar逐帧逐帧地去看,具体操作步骤:
在这里插入图片描述
在这里插入图片描述


六、压缩文件分析

1、伪加密

------ 如果压缩文件是加密的,或文件头正常但解压缩错误,首先尝试文件是否为伪加密。zip文件是否加密是通过标识符来显示的,在每个文件的文件目录字段有一位专门标识了文件是否加密,将其设置为00表示该文件未加密,如果成功解压则表示文件为伪加密,如果解压出错说明文件为真加密。
使用场景:伪加密文件

  • 操作方法:
  1. 使用winhex打开文件搜索16进制50 4B 01 02,可以看到每个加密文件的文件头字段。
    在这里插入图片描述

  2. 从50开始计算,第九、第十个字符为加密字段,将其设置为0000即可变成无加密状态。
    在这里插入图片描述

2、暴力破解

------ 通常我们可以使用ARCHPR.exe工具来破解rar文件
使用场景:windows下加密过的rar文件

  1. 攻击类型选择暴力破解,在范围位置根据提示选择暴力破解范围选项设置暴力破解包含的类型开始于和结束于选项具体范围,如果没有定义则全范围暴力破解。点击打开选择要破解的文件,点击开始进行破解。建议使用1~9位的数字密码,以及系统自带的英文字典作为密码字典。

  2. 攻击类型选择掩码可以进行复杂的暴力破解,比如知道密码前3位是abc,后3位为数字,则在攻击类型选择掩码,在掩码处输入acb???,暴力范围选项选择所有数字,打开要破解的点击,点击破解。此时???的部分会被我们选择的暴力破解范围中的字符代替。
    在这里插入图片描述


七、流量包文件分析

Wireshark 过滤器

------ 利用wireshark本身的强大的报文过滤器,帮助我们筛选出想要的报文。

  • 常用的过滤命令:
1)过滤IP,如源IP或者目标 x.x.x.x
ip.src eq x.x.x.x or ip.dst eg x.x.x.x  或者  ip.addr eq x.x.x.x

2)过滤端口
tcp.port eq 80 or udp.port eq 80
tcp.dstport == 80  只显tcp协议的目标端口为80
tcp.srcport == 80  只显tcp协议的源端口为80
tcp.port >= 1 and tcp.port <= 80

3)过滤协议
tcp/udp/arp/icmp/http/ftp/dns/ip.....

4)过滤MAC
eth.dst  ==  A0:00:00:04:c5:84  过滤目标mac

5)包长度过滤
udp.length == 26 这个长度是指udp本身固定长度8加上udp下面那块数据包之和
tcp.len >= 7 指的是ip数据包(tcp下面那块数据),不包括tcp本身
ip.len == 94 除了以太网头固定长度14,其它都算是ip.len,即从ip本身到最后
frame.len == 119 整个数据包长度,从eth开始到最后

6)http模式过滤
http.request .method ==GET”
http.request .method ==POST”
http.request.uri  ==/img/logo-edu.gif”
http contains “GET”
http contains “HTTP/1.”
http.request.method ==GET&& http contain “User-Agent:”
http contains “flag”
http contains “key”
tcp contains “flag”

------ 比赛中,可以在流量包中寻找flag
------ 除了下图外,也可以直接在追踪流中直接查找
在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/p36273/article/details/132918911
今日推荐