CTF——杂项题的基本解题思路

一、文件操作与隐写

1、文件类型识别:

(1)file命令:

当文件没有后缀名或有后缀名而无法正常打开文件时,根据识别出的文件类型,通过修改文件后缀名来打开文件。

使用场景:适用于不知道后缀名,无法打开文件的情景

格式:file + 文件名 /*kali系统下使用*/

(2)winhex

通过winhex程序中可以查看文件头类型,根据文件头类型判断出文件类型

使用场景:通过文件头信息判断文件类型

(3) 文件头残缺/错误

文件无法正常打开的情况有两种,一种是文件头部残缺,另一种是文件头部字段错误。针对文件头部残缺的情况,使用winhex程序添加相应的文件头,针对头部字段错误,可以找一个相同文件进行替换。

使用场景:适用于文件头部残缺或者文件头部字段错误无法打开正常文件。

出现这种情况时,在kali虚拟机下使用file命令,无法显示数据。

示例:某.jpg图片文件的文件头

正确文件头

错误文件头

对文件进行修复:使用winhex程序打开文件,对文件头进行修改。

对图片中标注的位置进行修改,可以改变文件头部参数。

2、文件分离操作

(1) Binwalk工具:

Binwalk是Linux下用来分析和分离文件的工具,可以快速分辨文件是否由多个文件合并而成,并将文件进行分离。如果成功分离会在目标文件的同目录下生成一个形如_文件名_extracted的文件目录,目录中有分离后的文件。用法如下:

分析文件:binwalk filename
分离文件:binwalk -e  filename

示例:

(2) foremost:

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

foremost 文件名 -o 输出文件名

示例:

(3) dd命令(相当难用,操作复杂,适用于解决难题):

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

格式:
dd if=源文件 of=目标文件名 bs=1 skip=开始分离的字节数
参数说明:
if=file        /*输入文件名,缺省为标准输入*/
of=file        /*输出文件名,缺省为标准输出*/
bs=bytes       /*同时设置读写块的大小为bytes,可以代替ibs和obs*/
skip=blocks    /*从输入文件开头跳过blocks个块后再开始复制*/

示例1:

源文件:1.txt

源文件内容:12345678952101545

如下图命令dd if=1.txt of=2.txt bs=5 count=1,输入文件为1.txt,输出文件为2.txt,将bs=5 count=1,将1.txt的前5位取出来形成2.txt文件:

bs:"block size”,用于指定在数据块操作(如dd命令)中的块大小。

bs=5 count=1:块的大小为5,取1块

示例2:

下图命令dd if=1.txt of=3.txt bs=5 count=3 skip=1,输入文件为1.txt,输出文件为3.txt,一个块5个字符,共计3个块,skip=1跳过第一个块。输出文件为后3个块的内容:

使用binwalk查看文件的组成部分,使用dd命令对文件进行分离,从图中可以看到0-22895是jpeg格式,22896-23046是zip格式,则dd命令格式为:dd if=输入文件 of=输出文件 bs=1 count=23046 skip=22859,即每一块大小为1,跳过前22895块。(一共取23046块,所以count=23046)

(4)Winhex

除了使用dd外,还可以使用winhex程序实现文件手动分离,将目标文件拖入winhex工具,找到要分离的部分,点击复制即可。

使用场景:适用于windows下,利用winhex工具对程序进行手动分离。

步骤如下:选择要分离的部分,选中,右键选择>保存选择,保存成指定格式即可。这样就能将文件中的flag提取出来。

(5)010Editor

将16进制字符文件导入保存操作方法:

01.将16进制字符文件保存在一个文件

02.打开010Editor import Hex

3、文件合并操作

(1) Linux下的文件合并:

使用场景:Linux下,通常对文件名相似的文件进行批量合并。格式如下:

cat 文件1 文件2>输出文件

完整性检测:Linux下计算文件md5:

md5sum 文件名

(2) Windows下的文件合并:

使用场景:windows下,通常要对文件名相似的文件进行批量合并,格式为:

copy /B 合并的文件(文件1+文件2+...+文件n) 输出的文件命令

完整性检测:windows下计算md5,格式为:

certutil -hashfile 文件名 md5

4、文件内容隐写

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

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

(1) Winhex程序/010Editor

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

(2) Notepad++工具

使用Notepad++打开文件,查看文件头尾是否具有含有关键字的字符串,搜索flag或key等关键字,最后拖动滚轮寻找。

另外安装插件HEX-Editor后,Notepad++可以实现Winhex的功能。

的功能。

二、图片隐写术

图片隐写的常见隐写方法:

1、细微的颜色差别

2、GIF图多帧隐藏

    • 颜色通道隐藏
    • 不同帧图信息隐藏
    • 不同帧对比隐写

3、Exif信息隐藏

4、图片修复

    • 图片头修复
    • 图片尾修复
    • CRC校验修复
    • 长、宽、高修复

5、最低有效位LSB隐写

6、图片加密

    • Stegdetect
    • Outguess
    • Jphide
    • F5

1、firework

使用Winhex打开文件时,会看到文件头部包含firework 的标识,通过firework可以找到隐藏图片。适用于查看隐写的图片文件。

2、Exif

Exif按照jpeg的规格在jpeg中插入一些图像/数字相机的信息数据以及缩略图像,可以通过与jpeg兼容的互联网浏览器/图片浏览器/图像处理等一些软件查看Exif格式的图像文件,就跟浏览通常的jpeg图像文件一样。

方法:图片右键属性,查看文件的详细信息,查看flag信息。

3、Stegsolve

当两张jpg图片外观、大小、像素都基本相同时,可以考虑进行结合分析,即将两个文件的像素RGB值进行XOR、ADD、SUB等操作,看能否得到有用的信息,StegSolve可以方便的进行这些操作。

使用场景:两张图片信息基本相同

方法:

1.打开第一张图片,点击 analyse->Image combiner

2.在弹出的窗口中点击左右按钮,选择处理方式,点击save保存有价值的结果。

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

LSB替换隐写基本思想是用嵌入的秘密信息取代载体图像的最低比特位,原来的的7个高位平面与替代秘密信息的最低位平面组合成含隐藏信息的新图形。

1.像素三原色(RGB)

2. 通过修改像素中最低位的1bit来达到隐藏的效果

3. 工具:stegsolve、zsteg、wbstego4、python脚本

(1)stegsolve.jar 工具

(2)zsteg 工具

detect stegano-hidden data in PNG & BMP

Installation

root@kali:/# gem install zsteg

检测LSB隐写
zsteg xxx.png

(3)wbstego4 工具

解密通过sb加密的图片(按照提示来就行)

(4)python脚本来处理

将以下脚本放在kali中运行,将目标文件放在脚本同目录下,将脚本中的文件名修改为文件名,运行python即可

5、TweakPNG

TweakPNG是一款简单易用的PNG图像浏览工具,它允许查看和修改一些PNG图像文件的元信息存储。

使用场景:文件头正常却无法打开文件,利用TweakPNG修改CRC

示例:

1.当PNG文件头正常但无法打开文件,可能是CRC校验出错,可以尝试通过TweakPNG打开PNG,会弹出校验错误的提示。

但是…
文件头正常却无法打开文件,利用TweakPNG修改CRC…
有时CRC没有错误,但是图片的高度或者宽度发生了错误,需要通过CRC计算出正确的高度或者宽度。

6、Bftools

bftools用于解密图片信息。
使用场景:在windows的cmd下,对加密过的图片文件进行解密格式:

Bftools.exe decode braincopter` 要解密的图片名称-output 输出文件名Bftools.exe run 上一步输出的文件

7、SilentEye

silenteye是一款可以将文字或者文件隐藏到图片的解密工具。

使用场景:windows下打开silentEye工具,对加密的图片进行解密

示例:

1.使用silentEye程序打开目标图片,点击image->decode,点击decode,可以查看隐藏文件,点击保存即可

2、如果需要密码,勾选encrypted data ,输入密码和确认密码,点击decode再解密

8、JPG图像加密

(1)、Stegdetect 工具探测加密方式

Stegdetect程序主要用于分析JPEG文件。因此用stegdetect可以检测到通过Steg、JPHide、OutGuess、Invisible Secrets、F5、appendx和Camouflage这些隐写工具隐藏的信息。

stegdetect xxx.jpg

stegdetect -s 敏感度xxx.jpgexi

(2)、Jphide

Jphide是基于最低有效位LSB的JPEG格式图像隐写算法.

例:

Stegdetect提示jphide加密时,可以用Jphs工具进行解密,打开jphswin.exe,使用open jpeg打开图片,点击seek,输入密码和确认密码,在弹出文件框中选择要保存的解密文件位置即可,结果保存成txt文件。

(3)、Outguess

outguess一般用于解密文件信息。

使用场景:Stegdetect识别出来或者题目提示是outguess加密的图片该工具需编译使用:./configure & make & make install

格式:outguess-r要解密的文件名输出结果文件名

(4)、F5

F5一般用于解密文件信息。

使用场景:Stegdetect识别出来是F5加密的图片或题目提示是F5加密的图片

进入F5-steganography_F5目录,将图片文件拷贝至该目录下,从CMD进入该目录

格式:Java Exrtact要解密的文件名-p密码 运行结束后我们可以直接在目录下的output.txt中看到

9.二维码处理

1.使用二维码扫描工具CQR.exe打开图片,找到内容字段

2.如果二维码某个定位角被覆盖了,该工具有时候也可以自动识别,如果识别失败,需要使用PS或画图工具将另外几个角的定位符移动到相应的位置,补全二维码。

三、压缩文件处理

1、伪加密

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

使用场景:伪加密文件

操作方法:使用winhex打开压缩文件,找到文件头第九第十个字符,将其修改为0000。

ZIP文件

1.使用winhex打开文件搜索16进制504B0102,可以看到每个加密文件的文件头字段。

2.从50开始计算,第九第十个字符为加密字段,将其设置为0000即可变成无加密状态。

RAR文件

3.RAR文件由于有头部校验,使用伪加密时打开文件会出现报错,使用winhex修改标志位后如报错消失且正常解压缩,说明是伪加密。使用winhex打开RAR文件,找到第24个字节(在winhex中为第二行的7)该字节尾数为4表示加密,0表示无加密,将尾数改为o即可破解伪加密。

2、暴力破解

通常我们可以使用ARCHPR.exe工具来破解zip文件

使用场景:windows下加密过的zip文件

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

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

3、明文攻击

明文攻击指知道加密的ZIP中部分文件的明文内容,利用这些内容推测出密钥并解密ZIP文件的攻击方法,相比于暴力破解,这种方法在破解密码较为复杂的压缩包时效率更高。

使用场景:已知加密的zip部分文件明文内容

例:假设一个加密的压缩包中有两个文件readme.txt和flag.txt,其中flag.txt的内容是我们希望知道的内容,而我们拥有readme.txt的明文文件,使用上述两个文件即可进行明文攻击。

操作:

1、将readme.txt的明文文件进行压缩,变成readme1.zip。

2、打开archpr,攻击类型选择明文,明文文件路径选择readme1.zip(即将明文文件不加密压缩后的文件),加密的文件

选择要破解的文件,点击开始,破解成功后会获得密码。

使用该方法需要注意两个关键点:
1、有一个明文文件,压缩后CRC值与加密压缩包中的文件一致。
2、明文文件的压缩算法需要与加密压缩文件的压缩算法一致。

有时不一定能破解出文件口令,但是能够找到加密密钥等信息,可以直接将文件解密,点击确定保存解密后的文件即可。

RAR文件格式
有时候给出的RAR文件的头部各个字块会故意给错导致无法识别

四、流量取证技术

1、流量包文件分析

CTF比赛中,流量包的取证分析是另一项重要的考察方向。

通常比赛中会提供一个包含流量数据的PCAP文件,有时候也会需要选手们先进行修复或重构传输文件后,再进行分析。

总体把握

协议分级

端点统计

过滤筛选

过滤语法

Host,Protocol,contains,特征值·

发现异常

特殊字符串

协议某字段

flag位于服务器中

数据提取

字符串取

文件提取

总的来说比赛中的流量分析可以概括为以下三个方向:

流量包修复

协议分析

数据提取

WireShark工具的基本使用

wirkshark的过滤器和过滤规则,能够帮助我们迅速定位到要分析的报文。

(1)、常用的过滤命令:

1.过滤IP,如源IP或者目标 x.x.x.x

ip.src eq x.x.x.x or ip.dst eq 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

http contains "flag"

http contains "key"

tcp contains "flag"

(2)、WireShark协议分析

英文版:Statistics->Protocol Hierarchy

中文版:统计->协议分级

根据数据包特征进行筛选
比如查看数据包的时候,有的数据包有某种特征,比如有http(80),就可以筛选出这种特征出来。
右键→作为过滤器应用>选中

(3)、WireShark流汇聚

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

常见的HTTP流关键内容:
1、HTML中直接包含重要信息。
2、上传或下载文件内容,通常包含文件名、hash值等关键信息,常用POST请求上传。
3、一句话木马,POST请求,内容包含eval,内容使用base64加密

(4)、WireShark数据提取

1.使用wireshark可以自动提取通过http传输的文件内容。
文件 -----> 导出对象 ------> HTTP
2.wireshark可以手动提取文件内容。
点击想要的数据包,选定media type的位置
右键→导出分组字节流 或者 点击菜单栏文件→导出分组字节流,快捷方式Ctrl+H在弹出的框中将文件保存成二进制文件

2、无线流量包跑密码

802.11是无线的协议

协议分析发现只有wireless LAN协议,很有可能是WPA或者WEP加密的无线数据包。

用aircrack-ng工具进行wifi密码破解
1.用aircrack-ng检查cap包:aircrack-ng xxx.cap

2.用aircrack-ng跑字典进行握手包破解:aircrack-ng xxx.cap -w pass.txt

3、USB流量包文件分析

USB流量

USB流量也是流量分析题的考查点,一般考察的流量涉及键盘击键,鼠标移动与点击,存储设备的明文传输通信,USB无线网卡网络传输内容等。

USB协议的数据部分在Leftover Capture Data域之中。

右键leftover capture data ->应用为列。

USB键盘流量抓取分析
Leftover Capture Data中值与具体键位的对应关系

使用wireshark提供的命令行工具 tshark,可以将Leftover Capture
Data数据单独复制出来。修改流量包的名字和导出txt的名字

USB鼠标流量抓取分析
鼠标流量与键盘流量不同,鼠标移动时表现为连续性,与键盘的离散性不一样。但是实际鼠标产生的数据是离散的。所以同样可以把数据抓取出来,构成二维坐标画出轨迹。

鼠标数据包的数据长度为4个字节,第一个字节代表按键,当取oxoo时,代表没有按键;为oxo1时,代表按左键,为oxo2时,代表当前按键为右键。

第二个字节代表左右偏移;

当值为正时,代表右移多少像素;

当值为负时,代表左移多少像素;

同理,第三个字节代表上下偏移。

工具:https://github.com/WangYihang/UsbMiceDataHacker 或

https://github.com/WangYihang/UsbKeyboardDataHacker

HTTPS
HTTPS流量是经过TLS协议加密过的,需要导入key才能看到原始的HTTP流量。

英文版:Preferences->Protocols->SSL->Edit RSA keys list

中文版:编辑->首选项->Protocols->SSL->Edit RSA keys list

4、HTTPS流量包文件分析

导入key后出现原始的HTTP流量包

右键->追踪流->SSL流/HTTP流

  • 13
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C知道:ctfreverse型是指需要逆向分析的CTF目类型。解题思路可以分为以下几个步骤: 1. 静态分析:首先,将给定的二进制文件进行静态分析,使用反编译工具(如IDA Pro)来查看代码的逻辑结构和函数调用关系。这可以帮助你理解程序的工作原理和逆向逻辑。 2. 动态调试:将程序加载到调试器(如GDB)中,以动态调试的方式执行程序。通过设置断点、查看寄存器和内存状态,以及跟踪程序执行流程,可以帮助你理解程序的运行过程和数据处理方式。 3. 逆向逻辑分析:根据程序的静态分析和动态调试结果,分析程序的逆向逻辑。这包括理解输入数据的处理方式、算法和加密机制等。你可以关注特定的代码块或函数,并尝试弄清楚它们的功能和目的。 4. 寻找漏洞或关键信息:在逆向逻辑分析的过程中,要留意可能存在的漏洞或关键信息。这可能是一些硬编码的密码、密钥或验证条件等。寻找这些信息有助于解决问或绕过验证。 5. 反向运算或解密:根据逆向逻辑和找到的关键信息,尝试进行反向运算或解密。这可能涉及到逆向算法、还原加密操作或破解密码等。使用逆向工具或编写自定义脚本来实现这些操作。 总之,ctfreverse型的解题思路是通过静态分析和动态调试来理解程序的逆向逻辑,寻找漏洞或关键信息,并进行反向运算或解密来获取答案或绕过验证。这需要一定的逆向工程技术和经验,因此平时的学习和实践是非常重要的。希望这个解题思路对你有所帮助!如果有其他问,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值