CTF解题技能之MISC基础

2024-05-28 18:52
文章标签 基础 ctf 解题 misc 技能

本文主要是介绍CTF解题技能之MISC基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

杂项介绍

Miscellaneous简称MISC,意思是杂项,混杂的意思。

杂项大致有几种类型:

1.隐写

2.压缩包处理

3.流量分析

4.攻击取证

5.其它

本篇主要介绍杂项基础题目的知识点以及解题思路。

0x00 文件类型识别

杂项题目主要是以文件附件作为题目,但是给的文件不一定是有后缀名的,这就需要我们识别这些文件

1. file命令

file命令实际上是一个命令行工具,用来查看文件类型。
使用方法:
将文件复制到kail或者带有file工具的系统中,使用file查看文件。

查看.webp.jpg

将文件后缀名补上即可正常打开。
然后根据实际情况进行初步判断可能是什么类型的题目。

2. 010Editor

010Editor是一款快速且强大的十六进制编辑器。用来编辑二进制文件。有一个友好易于使用的界面,无限次的undo和redo操作。另外还可以打印x十六进制的字节或者以书签的方式标出某些重要的字节。我们可以通过使用010Editor查看文件的头部来判断类型。

以下是常见的文件头:

文件.webp.jpg

PNG文件头中包含IHDR信息。

PNG.webp.jpg

IHDR的作用将在后续的图片类隐写中详细讲解。

当文件类型不确定时就可以尝试查看文件头来判断。

不确定.webp.jpg

既然会出现没有后缀的文件,那当然也会出现缺少头部的情况,可以根据后缀名来选择文件头部进行填充,如果没有后缀名,则查看文件尾部来判断文件类型。


以下是常见的文件尾部:
zip文件的结尾以一串504B0506开始。

506.webp.jpg

rar文件以C43D7B00400700结尾。

700.webp.jpg

JPG文件结尾为FFD9。

D9.webp.jpg

PNG文件 结尾为000049454E44AE426082。

082.webp.jpg

Gif文件结尾为3B。

3B.webp.jpg

0x01 文件分离

介绍了文件类型的识别方法了,接下来来讲一下文件分离
文件分离的原因:
在CTF这个充满脑洞的比赛中,出题人往往会以一些稀奇古怪的出题方式出题,因此你可以常常看见暴打出题人等字眼出现在比赛论坛中。在CTF中一个文件中隐藏着另外其他文件的题目是经常有的。这就需要掌握文件分离的技巧来应对。下面介绍几种姿势

1. Binwalk

1.1 Binwalk工具介绍
Binwalk是一个自动提取文件系统,该工具最大的优点就是可以自动完成指定文件的扫描,智能发掘潜藏在文件中所有可疑的文件类型及文件系统。相比于之前介绍的file命令行工具来说,file只是从文件的第一个字节开始识别,且只能把一个文件识别成一个类型的文件,很难看出是否隐藏着其他的文件,Binwalk就能很好的完成这项任务。

1.2 Binwalk文件扫描和提取
Binwalk分析文件
命令:binwalk +file 通过扫描能够发现目标文件中包含的所有可识别的文件类型。

类型.webp.jpg

通过Binwalk我们可以看到这一张jpg文件中藏着zip文件。
Binwalk提取文件。
命令 binwalk +file -e。

-e.webp.jpg

“-e"和“--extract"用于按照定义的配置文件中的提取方法从固件中提取探测到的文件系统。
若提取成功则会生成一个_文件名_extracted的目录,目录中存放的就是提取出的文件

2. foremost

2.1 foremost工具介绍
foremost是基于文件开始格式,文件结束标志和内部数据结构进行恢复文件的程序。该工具通过分析不同类型文件的头、尾和内部数据结构,同镜像文件的数据进行比对,以还原文件。它默认支持19种类型文件的恢复。用户还可以通过配置文件扩展支持其他文件类型。

2.2 foremost提取文件
有时候binwalk无法正确分离出文件,这时候就可以使用foremost,将目标文件复制到kali中,在终端中使用命令行进入文件所在文件夹,使用如下命令:
Foremost+file –o 输出目录名。

目录名.webp.jpg

执行成功后会在目标文件的文件目录下生成我们设置的目录,目录有中按照文件类型分离出文件。

分离.webp.jpg

3. dd

前面介绍的两种都是自动化分离工具,dd这个工具是一种半自动化工具,有的时候自动化工具不能实现文件的分离,所以需要用这个工具来进行分离。
使用dd命令分离文件格式如下:

dd if=源文件名 bs=1 skip=开始分离的字节数 of=目标文件名
参数说明:
if=file #输入文件名,缺省为标准输入。 
of=file #输出文件名,缺省为标准输出。 
bs=bytes #同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。 
skip=blocks #从输入文件开头跳过 blocks 个块后再开始复制。 
以IDF实验室“抓到一只苍蝇”为例,需要将获得的文件去除前364个字节:
dd if=s1 bs=1 skip=364 of=d1使用dd命令分离文件格式如下:
dd if=源文件名 bs=1 skip=开始分离的字节数 of=目标文件名参数说明:
if=file #输入文件名,缺省为标准输入。 
of=file #输出文件名,缺省为标准输出。 
bs=bytes #同时设置读写块的大小为 bytes ,可代替 ibs 和 obs。 
skip=blocks #从输入文件开头跳过 blocks 个块后再开始复制。 
若需要将获得的文件去除前364个字节:
dd if=s1 bs=1 skip=364 of=d1

dd.webp.jpg

4. 010Editor

在之前文件识别中提到这个工具,手动分离文件也可以使用这个工具
拖动想要分离的部分。

r  1.webp.jpg

r  2.webp.jpg

右键->选择->保存选择。

然后根据需要分离的文件类型选择后缀名。

后缀.webp.jpg

在介绍了文件分离后,还需要提到的是文件合并。
天下之事分久必合合久必分,既然CTF有文件分离的题目,那自然也少不了文件合成的了,但是文件合成还是有技巧的。

1. linux环境文件合并

cat 是linux系统下的一个能提取文件的内容的命令,使用cat命令将文件内容提取出来再导入目标文件。使用方式如下:
将chapter01、chapter02、chapter03三个文件按从左到右顺序合并,输出到book文件中。
所使用的命令:cat chapter01 chapter02 chapter03 > book
将所有以chapter开头的文件按文件名从小到大的顺序合并,输出到book文件中。
所使用的命令:cat  chapter* > book 

book.webp.jpg

但是要注意的一点是,cat是需要遵循顺序来获取文件内容的,所以在cat之前需要判断一下文件的先后顺序。

2. windows环境文件合并

linux中有cat等命令,windows环境下也有类似的命令copy,使用方式如下:
将chapter01、chapter02、chapter03三个文件按从左到右顺序合并,输出到book文件中。
所使用的命令:copy /B chapter01+chapter02+chapter03 book
将所有以chapter开头的文件按文件名从小到大的顺序合并,输出到book1文件中。
所使用的命令:copy /B  chapter* book1 

copy.webp.jpg

3. Python文件合并

python环境适用于linux也适用于windows,它是通过编写脚本来实现的文件合并,以之前的例子来。

# -*- coding: utf8 -*-
def foo():
path=r".\chapter%d"
s=""
for i in xrange(1,4):
f=open(path % i).read()
s+=f
print s
pass
if __name__ == '__main__':
foo()
print 'ok'

0x03 总结

介绍了这么多关于CTF基础类型的文件处理方法,为了方便大家梳理,提供一个思维导图给大家来参考。

总成.webp.jpg

用来处理文件的方法和工具不仅仅只有这些,这就需要靠大家自己发现和探索。

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取 

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

同时每个成长路线对应的板块都有配套的视频提供: 

大厂面试题

视频配套资料&国内外网安书籍、文档

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~ 

 读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

特别声明:

此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。

这篇关于CTF解题技能之MISC基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1011405

相关文章

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou

c++基础版

c++基础版 Windows环境搭建第一个C++程序c++程序运行原理注释常亮字面常亮符号常亮 变量数据类型整型实型常量类型确定char类型字符串布尔类型 控制台输入随机数产生枚举定义数组数组便利 指针基础野指针空指针指针运算动态内存分配 结构体结构体默认值结构体数组结构体指针结构体指针数组函数无返回值函数和void类型地址传递函数传递数组 引用函数引用传参返回指针的正确写法函数返回数组

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是

【MRI基础】TR 和 TE 时间概念

重复时间 (TR) 磁共振成像 (MRI) 中的 TR(重复时间,repetition time)是施加于同一切片的连续脉冲序列之间的时间间隔。具体而言,TR 是施加一个 RF(射频)脉冲与施加下一个 RF 脉冲之间的持续时间。TR 以毫秒 (ms) 为单位,主要控制后续脉冲之前的纵向弛豫程度(T1 弛豫),使其成为显著影响 MRI 中的图像对比度和信号特性的重要参数。 回声时间 (TE)

生信代码入门:从零开始掌握生物信息学编程技能

少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 介绍 生物信息学是一个高度跨学科的领域,结合了生物学、计算机科学和统计学。随着高通量测序技术的发展,海量的生物数据需要通过编程来进行处理和分析。因此,掌握生信编程技能,成为每一个生物信息学研究者的必备能力。 生信代码入门,旨在帮助初学者从零开始学习生物信息学中的编程基础。通过学习常用

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(