CTF杂项基本题目思路(图片文件隐写-压缩文件-流量取证)

一、文件隐写

1.当遇到文件类型未知的文件时怎么办?

①linux系统可以使用file命令查看文件的类型,格式:file 文件名

②使用winhex或者010editor查看文件头,从而判断文件的类型,①中file命令的本质也是查看文件的文件头。

2.当文件头残缺或错误怎么办?

当打开文件时提示文件打开失败,使用file查看文件类型时,只显示“data”,说明文件头残缺或错误,需要我们用010editor或者winhex手动添加

3.如果一个文件由多个文件合并而成怎么分离?

①可以使用Binwalk工具,它是linux下自带的文件分析和分离工具,可以直接在命令行输入命令.

分析文件命令:binwalk 文件名 

分离文件命令:binwalk -e 文件名

②另一个工具foremost也可以分离文件,同样是linux下自带的工具

用法:foremost 文件名 -o 输出目录名

③当文件自动分离出错或者因为其他原因无法自动分离时,可以使用dd实现文件手动分离

if表示输入文件名,of表示输出文件名,bs表示想要分离的大小,count表示重复次数,skip表示跳过几个bs值

比如下图,将1.txt中前五个数字分离出来,输出到2.txt中,bs=5,重复一次

如果想分离前十个数字,那就让count=2

如果跳过前3个数字,那就使用skip

④也可以使用010editor直接分离文件

4.如果一个文件被分离成好几个文件怎么合并?

在Linux下,使用cat命令合并,合并后查看md5值对比,判断合并后的文件是否正确

格式:cat 文件名1 文件名2 文件名3 > 输出文件名

二、图片文件隐写

1.Exif

windows下图片右键属性,查看ecif或查看详细信息,在相关选项卡中查找flag信息

linux下可以使用exiftool命令查看详细信息,格式:exiftool 图片名

2.stegsolve 

当两张jpg图片外观、大小、像素都基本相同时,可以考虑进行结合分析,即将两个文件的像素RGB值进行XOR、ADD、SUB等操作,看能否得到有用的信息。但是要注意导入stegsolve图片的顺序,顺序不同得到的结果也不同

3.LSB(最低有效位Least)

RGB是由8位二进制显示出的颜色,但是修改最后一位二进制数字并不会改变图片的颜色,那就可以更改最后一位的数值,连起来形成ASCII码,隐写信息,如下图

解决办法有四种

①使用stegsolve查看最后一位,但是因为顺序不同,要多点几下,多去尝试

②zsteg工具,会把各种顺序列出来,比stegsolve好用,但是在Linux下需要安装,安装命令:gem install zsteg

③如果文件类型是bmp,推荐使用westrgo4,或者用画图软件转成png格式并且使用stegslove查看图片

④编写python脚本(小白忽略)

4.当png文件无法打开,或者图片只有一部分时怎么办

当文件无法正常打开时,使用TweakPNG打开文件后,提示crc错误,需要更改。然后需要winhex修改 ,打开winhex搜索原crc,替换成错误信息中的crc

当图片高度或宽度发生了错误,需要根据 正确的CRC计算出正确的高度或者宽度,计算的py脚本如下

(其实作者之前做过某题,没有根据CRC计算出高度,随便填写一个高度,就能让图片中高度变高,flag就出来了,此处根据CRC计算高度和宽度更加严谨)

5.如果图片被加密了怎么办?

使用bftools解密图片信息,格式:

Bftools.exe decode braincopter 要解密的图片名称 -o 输出文件名

Bftools.exe run 上一步输出的文件名

另一款解密工具:SilentEye  如果有文字或者文件隐藏到图片中,就可以用它解密

其他工具:

①针对于JPEG的Stegdetect,可识别多种加密方式

②outguess加密的图片,使用outguess工具

6.针对二维码的操作

①二维码缺失一角,使用ps等图片编辑软件补上即可

②二维码反色,使用画图软件取反即可  

③彩色二维码,使用画图软件取反后,再使用stegslove一帧一帧的看

三、压缩文件处理

1.伪加密

ZIP压缩文件被加密,或者文件头正常但是解压错误,就需要尝试文件是否为伪加密。方法:使用winhex打开压缩文件,搜索16进制504B0102,从50开始计算,第九第十个字符为加密字段,将其设置成0000即可变成无加密状态

RAR压缩文件被加密,使用winhex打开文件后,找到第24个字符,该字节尾数为4表示加密,0表示无加密,将尾部改成0即可破解伪加密

2.真加密:暴力破解

如果已知部分明文信息,可使用ARCHPR工具进行暴力破解

3.压缩包损坏

当一个压缩包解压后可能有部分文件没有被解压出来,原因就是解压软件无法识别错误的文件头 

修改没有解压出来的文件的文件头,再次解压即可

四、流量取证技术

想要做流量分析,不可避免的要用到WireShark

1.常见的过滤命令

2.协议分级统计

当数据包很大时,可以通过协议分级统计找最大占比的传输,可能就是在传输某个压缩包

3.WireShark流汇聚

在关注的http数据包或者tcp数据包中选择追踪流,可以将HTTP或者TCP流汇聚或还原成数据,在弹出的框中可以看到数据内容。

常见的HTTTP流关键内容:
①HTML中直接包含重要信息

②上传或下载文件内容,通常包含文件名, hash值等关键信息,常用POST请求上传

③一句话木马,POST请求,内容包含eval,内容使用base64加密

4.WireShark数据提取

①使用wireshark可以自动提取通过http传输的文件内容

②如果找到最大占比的字段名, 就可以导出分组字节流,缩小导出范围

5.无线wifi流量包

无线wifi流量包的Source不是IP地址,而是MAC地址。无线协议是802.11

遇到无线wifi流量包,如果要解出wifi密码,剋使用linux下的aircrack-ng工具破解

命令格式:aircrack -ng 流量包名 -w 字典

6.USB流量包文件分析

①键盘流量抓取分析,键盘流量会存放在LCD这个字段中,这个字段的数据长度为8个字节,击键信息集中在第三个字节。这个字节的十六进制与键盘上的值一一对应,部分对照如下

下图是USB流量包中LCD字段的示例

再使用linux自带的tshark工具,将流量包中这个字段的数据提取出来

命令格式为:tshark -r 流量包名 -T fields -e  usb.capdata >导出的文件名.txt

最后使用python脚本,将第三个字节转换后数据,脚本代码如下

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

②鼠标流量分析。鼠标数据包的数据长度为4个字节

  1. 第一个字节代表按键,当取0x00时,代表没有按键;为0x01时,代表按左键;为0x02时,代表当前按键为右键
  2. 第二个字节代表左右偏移,当值为正时,代表右移多少像素;当值为负时,代表左移多少像素
  3. 第三个字节代表上下偏移

前面分析方法与键盘流量相同,使用tshark得到数据包的txt文档后,再使用python脚本得到鼠标的移动轨迹坐标,再使用kali自带的gnuplot工具,根据坐标画出轨迹得到flag。

使用python脚本得到坐标

nums = []
keys = open('Python\\USBread\\mouse\\out.txt','r',encoding="utf_16")
f = open('Python\\USBread\\mouse\\xy.txt','w',encoding="utf_16")
posx = 0
posy = 0
for line in keys:
    # if len(line) != 11:
    #     continue
    x=int(line[3:5],16)
    y=int(line[6:8],16)
    if x>127:
        print ("aaa")
        x-=256
    if y>127:
        print ("bbb")
        y-=256
    posx += x
    posy += y
    btn_flag = int(line[0:2],16) #1 for left,2 for right , 0 for nothing
    if btn_flag == 0:#此处的0可以修改为0(未按按键)、1(左键)、2(右键),将单独输出相应坐标文件。
        print (posx,posy)
        f.write(str(posx))
        f.write(' ')
        f.write(str(posy))
        f.write('\n')
f.close()

根据坐标,使用gnuplot得到图形得到结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怀后同学.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值