CTF—Misc基础

一:文件操作与隐写

1、文件类型的识别

1、文件头完好情况:
(1)file命令
使用file命令识别:识别出file.doc为jpg类型
image
(2)winhex
通过winhex工具查看文件头类型,根据文件头部内容去判断文件的类型
image
eg:JPG类型
image
(3)notepad++
下载HEXeditor插件,查看文件的头部信息,和010editor,winhex原理相同
image
(4)0101editor
个人推荐使用这个,因为包含好用的模板,不用在记忆宽度、高度、CRC的具体位置
image
2、文件头部损坏情况:
场景:使用file命令无法显示文件类型,只显示data,说明文件头部被破坏,需要修复
(1)使用010editor等工具结合具体情况进行修复
image

2、文件分离操作

1、binwalk命令

分析文件 binwalk filename
分离文件 binwalk -e filename
分离分拣 binwalk filename -T png

2、foremost命令
场景:binwalk无法分离出文件、可以尝试使用foremost进行分离文件

foremost  filename -o 分离后的保存位置

3、dd命令
场景:binwalk和foremost都无法进行分离文件

解释:bs就是块的大小、count就是块的个数、skip就是跳过多少个块
dd if=源文件 of=目标文件名 bs=1 skip=开始分离的字节数

eg1:假设1.txt 内容为1234567890
dd if=1.txt of=2.txt bs=5 count=1
2.txt当中的内容为12345
dd if=1.txt of=3.txt bs=5 count=1 skip=1
3.txt内容为67890,skip就是跳过第一块
eg2:
image
想要分离出AC3zlib文件(zlib文件为图片数据压缩文件),需要输入

dd if=2.png of=3 bs=1 skip=85

image

4、winhex手动分离

结合binwalk;直接将想要的数据复制出来(很简单,和上述dd原理一样)

3、文件合并

1、Linux下的文件合并
考点:题目可能会给出一个md5值,让你合并文件,只有按照一定的次序合并,MD5才能够吻合

cat 1.txt 2.txt 3.txt 4.txt >1.jpg
将1.txt,2.txt,3.txt.4.txt合并为1jpg
校验md5:md5sum1.jpg

2、windows下的文件合并

copy /B 1.txt+2.txt+3.txt 1.jpg
校验md5:certutil -hashfile 1.jpg

二:图片隐写

1、常规隐写

思路:
1、文件头部被破坏;修复文件头部
2、16进制异或(1E)
3、宽高被修改;修复宽高;使用python脚本获取宽高或者使用tweakpng工具获取宽高
4、图片转化成base编码;让你还原图片
5、图片中给出盲文内容;进行解密;通常会给出一个压缩包;解密出来的密码是压缩包的密码;然后进行下一步操作!
思路:文件头部修复;16进制异或(1E);宽度和高度的修复
image

2、内容隐写

思路
1、flag信息直接隐藏在图片内容当中;通过winhex打开查看
2、将其他文件隐藏在图片当中(分离文件)
3、flag信息通过编码或者加密隐藏在内容当中(Base编码;2进制

(1)binwalk -e filename
(2)foremost  filename -o 分离后的保存位置
(3)通过dd命令提取(通用)
(4)通过winhex和010editor工具进行手动分离

3、exif隐写

思路:
1、exif可以记录数码照片的属性信息和拍摄数据;flag可能藏在属性中
2、通过exiftool工具查看详细信息或者右键图片查看详细信息

4、gif隐写

思路:
1、flag信息隐藏在图片中;使用工具stegso;ve工具中的frame browser查看相关的flag信息

5、lsb隐写

思路:
(1)类型1:可以使用zsteg工具直接拿到flag
(2)类型2:zsteg工具拿不到flag信息;需要用Stegsolve工具分析通道;然后在analyse-->data extract中选择存在问题的通道;通道枚举;分析extracr preview中有无flag;或者save bin;判断是否有flag!
image

(3)类型3:通过LSB隐写zip压缩包或者其他文件;查看extracr preview会看到常见的文件头部信息
例题:

步骤1:使用zsteg工具看是否能拿到flag
image

步骤2:

使用stegsolve分析通道;判断哪个通道存在问题;然后在analyse-->data extract中选择存在问题的通道;枚举;分析extracr preview中有无flag;或者save bin;判断是否有flag!
步骤3:
分析是否隐藏的其他文件
image

6、二维码隐写

思路:
1、扫描二维码直接拿到flag;使用QR reserach工具识别二维码当中的内容!
2、扫描二维码给出提示信息
3、二维码就是误导;可能是其他方面的!

7、webshell隐写

思路:
1、查杀后门;一般D盾查杀;根据查杀出来的文件进一步查找flag;一般搜索$pass
image

8、路由隐写

思路:
1、带宽数据文件;用RouterPassView打开文件,搜索password之类是关键词尝试提交flag即可

9、F5隐写

思路:
1、F5是刷新键;一般题目考察F5隐写的话会提示相关信息的
例题:
(1)首先下载/F5-steganography工具;在kali中输入git clone https://github.com/matthewgao/F5-steganography
下载成功之后进入该目录;解密(需要java 1.8.0版本)

//解密 
java Extract xxx.jpg 

image
查看解密内容;在output当中
image

发现是zip文件;提取出来解压拿到flag!

10、盲水印

思路:
(1)数字水印用于保护文件的信息和版权;但是盲水印是看不见的
(2)盲水印提取脚本
blindwatermark下载地址
https://github.com/chishaxie/BlindWaterMark

11.NTFS隐写

思路:
1、提示NTFS数据流(一般就是给一个压缩包;然后里面有很多的txt文档);直接使用NtfsStreamsEditor工具扫描flag文件夹;拿到flag(必须用7.zip 解压文件)
image

12、outguess隐写

(1)outguess工具的下载:输入:git clone https://github.com/crorvick/outguess
image
(2)示例
我对cmd.jpg进行了outguess加密,在里面写入了flag;然后我进行解密
Outguess -k “my secret key” -r out.jpg flag.txt
image
查看得到flag
image

13、特殊算法隐写

(1)**Stegdetect**
场景:主要用于分析JPEG文件的加密方,可以检测到通过JSteg、JPHide、OutGuess、Invisible Secrets、F5、appendX和Camouflage等
常见的加密方式jsteg\jphide\outguess\invisible\f5\appendx
eg:
image
1、java盲水印-jphide
eg:
image

三:压缩文件隐写

思路:

1、伪加密

(1)zip伪加密
考点:winhex打开压缩包;搜索504b0102(注意不是文件头部;zip文件头部伪504b0304);从50开始,往后面数第9,10个字符为加密字符,将其设置为0000即可变为无加密状态
image
(2)rar伪加密
从头开始一般第24个字节为加密位置;将尾数修改为0,即可解除加密

2、暴力破解

(1)设置密码;需要使用ARCHP.exe工具来破解zip/rar文件
image
(2)明文破解

明文攻击指知道加密的ZIP中部分文件的明文内容,利用这些内容推测出密钥并解密ZIP文件的攻击方法

例:假设一个加密的压缩包中有两个文件readme.txt和flag.txt,其中flag txt的内容是我们希望知道的内容,而我们拥有readme.txt的明文文件,使用上述两个文件即可进行明文攻击。
操作:
1、将readme.txt的明文文件进行压缩,变成readme1.zip。
2、打开archpr, 攻击类型选择明文,明文文件路径选择readme1.zip ( 即将明文文件不加密压缩后的文件),加密的文件
选择要破解的文件,点击开始,破解成功后会获得密码。
image

四:流量分析

1、wireshark语法

**1、wireshark过滤语法**
(1)过滤IP地址

ip.src==x.x..x.x 过滤源IP地址
ip.dst==x.x.x.x  过滤目的IP
ip.addr==x.x.x.x 过滤某个IP

(2)过滤端口号

tcp.port==80
tcp.srcport==80 显示TCP的源端口80
tcp.dstport==80 显示TCP的目的端口80

(3)过滤协议

直接输入协议名称 tcp/http/dns

(4)包长度过滤

udp.length==26
tcp.len >=7

(5)http模式的过滤(极其重要,尤其是http contains "关键字")

http.request.method=="GET"
http.request.method=="POST" 筛选请求方式
http.request.uri=="图片的路径"
http cantains "GET"
http contains "HTTP/1."
http contains "flag"
http contains "key"#看一下http协议流量包中有没有flag字段
tcp contains "flag"

**2、wireshark协议分级**

协议分析的目的就是为了对整个流量包有一个大致的分析!

统计 ---> 协议分级
image

image

**3、wireshark 流汇聚**

(1)用于追踪tcp或者http的流量
image
追踪流中直接寻找是否有flag
image

wireshark数据提取
(1)ctf题目当作可能会将flag等信息藏在一些文件当作;比如藏在图片;压缩包;文本文档等;需要我们对流量包进行数据提取;将提取的数据进一步处理!

文件 -----> 导出对象 ------> HTTP

eg:有一个ncc.pcap流量包;打开首先在协议分级当作看一下流量包的比重;输入http contains "ncc";发现了一张.png照片
image
提取!
image
进一步对照片进行处理拿到flag!

(2)使用**networkminer工具**分析流量包直接提取出照片!
image

(3)手动提取!
image

2:流汇聚型

1、考点:
flag等信息直接藏在流量包当中;难度稍微提升提点的就是通过分析流量包看流量包中是否有其他文件;比如jpg;zip;png等等;需要进行数据提取进行下一步分析;这类题目往往和misc方向有关!

http contains "PSOT"
http contains "flag"
tcp contains "flag"
http contains "zip"
http contains "jpg"
http contains "png"
//根据筛选出来的流量包进行分析;看看是否有敏感数据;比如FFD8FF PK等等常见的文件开头;然后提取数据

2、例题:
1、流汇聚(直接流汇聚就能拿到flag)
image

2、提取数据的
(1)藏在压缩包中的(PK为压缩包文件的头部标识)
原始数据显示;然后保存16进制数据;010editor导入16进制数据;另存为即可
image

(2)藏在图片当中的
image

3、TLS流量

1、考点:
题目一般会提示让你导入 key;去解锁加密的流量包(flag一般藏在加密的流量包当中);一般key藏在了给出的流量包中;使用tcp contains “KEY” ftp contains "key"筛选数据包;然后具体分析数据包找到KEY;导入KEY就可看到隐藏的流量包(http数据包如果没有导入KEY;wireshark是看不到的);导入KEY的方法

编辑——>首选项——>协议——>TLS——>exit——>导入key——>应用

2、例题:

  • 例题1:
    (1)题目给出提示信息让我们区寻找KEY;常见的KEY藏在TCP流量包中;使用tcp contains “key”过滤数据包
    image
    追踪流分析数据包;发现了一段base64编码的内容;根据经验判断应该是base64编码转图片
    image
    base64在线解码工具:https://the-x.cn/encodings/Base64.aspx
    解码之后得到一张图片;图片的内容为KEY
    image
    微信识别内容后保存为txt文件(提示文件给出了key的格式)
    image
    导入KEY出现了两个http流量包;追踪流发现了flag!(没有导入key之前没有发现flag)
    image
  • 例题2

题目提示是TSL加密;那就是要找到key导入密钥获取加密的流量包;输入http contains "key"筛选流量包;然后分析流量包;发现一个流量包很奇怪;追踪http流量发现了sslkey.log;另存到桌面;然后导入key;发现http流量包多了几个;分析http流量包拿到flag!
image

4、大流量

1、黑客IP地址

思路:黑客攻击会产生大量的流量;根据流量的大小、包的数量来判定是否为异常流量以及攻击者的IP。可以用统计工具分析一下

统计-会话。发现183.129.152.140与内网IP建立会话的Packets较多
image
统计-端点。同样发现183.129.152.140的包数最多。
image
统计-IPv4 Statistics-ALL Address。统计下IP,183.129.152.140的数量最多。
image
所以,183.129.152.140应该就是黑客的IP。分析其它数据包也印证了这个结果
2、黑客邮箱
发送邮件的协议一般为SMTP;首先尝试第一眼看到的xsser@live.cn,发现flag正确,所以后面看见的邮箱也就不需要试了。

3、后门名称

我们得到了黑客的攻击IP183.129.152.140,首先过滤一下这个IP

ip.addr == 183.129.152.140

后名文件一般是php;所以追踪流找到了后门文件为flag{admin.bak.php}

5、USB流量

1、键盘流量
(1)USB协议键盘数据部分,会出现在 Leftover Capture Data 或者 HID Data 中;长度为16位
image
提取数据:右键HID Data ;作为过滤应用;选中;然后复制
image
使用命令提取数据

//提取键盘流量;其中usbhid.data就是复制的字段内容
tshark -r 键盘.pcapng -T fields -e usbhid.data |sed '/^\s*$/d'  >flag.txt
//使用脚本加上:;注意键盘流量是16位;鼠标是8位
python .\冒号.py
//提取键盘数据
python .\usb_keyborad.py

image
**2、鼠标流量 **
(1)USB协议鼠标数据部分,会出现在 Leftover Capture Data 或者 HID Data 中;长度为8位
(2)例题:打开流量包;根据Leftover Capture Data内容得出为鼠标流量;获得字段值为usb.capdata
image

//提取鼠标流量;其中usb.capdata为数据的字段
tshark -r 鼠标.pcap -T fields -e usb.capdata |sed '/^\s*$/d'  >flag.txt
//加上:;注意键盘流量是8位;注意修改脚本
 python .\usb_mouse.py
 python '.\坐标绘制图形 - 副本.py

image

6、webshel流量

1、例题
打开流量包;首先http contains "flag";发现了结果符合条件的流量包(发现了菜刀webshell工具的流量;解码发现让我下载6666.jpj这个图片;追踪http流量包;一个一个查看)
image
查看完所有的http流量包之后;发现了 1.php 6666.jpg flag.txt hello.zip 几个文件;尝试提取出来;根据流量包;只找到6666.jpg和zip的数据内容
(1)提取666.jpg(JPG的头部数据为FFD8FF)
显示原始数据;保存16进制数据到txt文档中;然后010editor导入16进制数据;另存为1.jpg
image
image
我以为是flag;发现不是;那可能是zip的密码
(2)提取zip
分析数据包发现了zip的头部内容PK;提取压缩包(和提取图片的步骤一样)
image
然后发现解压需要密码;使用照片中的密码解密拿到flag!

7、wifi流量

1、例题
打开流量包出现现wireless LAN协议802.11无线协议Tp-Link,;判定为wifi流量包;使用airrcrack-ng工具进行破解

//获得BSSID地址BC:F6:85:9E:4E:A3
aircrack-ng xxx.cap

image

//生成字典解密
aircrack-ng -a2 -b BC:F6:85:9E:4E:A3 -w pass.txt wifi.cap

image

8、思路总结

首先打开流量包;分别看一下不同协议的info;看看有没有什么特别奇怪或者很长的解释;一般flag就在里面(有可能是base64编码的;注意二次编码);然后就是利用过滤语法看看有没有什么明显的流量包;进一步分析;看看有没有什么压缩包,图片;文件等等的;提取出来看看是否有flag等信息;还有注意几种特别的流量包;目前就遇到这这些!

五、内存取证隐写

1、工具安装

Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。Volatility2.6需要python2,pip安装模块也需要2版本
安装pip2
Volatility2.6需要python2,pip安装模块也需要2版本,所以首先安装pip2
(1)检查python2(已安装)
image
(2)下载pip2

curl  https://bootstrap.pypa.io/pip/2.7/get-pip.py  -o get-pip.py

image
(3)安装pip2

sudo python2 get-pip.py

image
(4)检查安装情况

pip2 -h

image
安装依赖环境
(1)安装pycryptodome(我这里已经安装)

pip2 install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple

image
(2)安装distorm3

git clone https://github.com/vext01/distorm3.git
cd distorm3
sudo python2 setup.py install

image
image
安装volatility
(1)退出distorm3文件夹,下载volatility2

git clone https://github.com/volatilityfoundation/volatility.git

image
(2)进volatility,判断是否安装成功
如果缺少插件的话,会出现好多行报错的
image

2、例题解析

(1)CTF金砖技能大赛的一道题目
1、分析镜像
python2 vol.py -f /home/kali/桌面/worldskills3.vmem imageinfo

image

2、从内存中获取到用户admin的密码并且破解密码,以flag{admin,password}形式提交(密码为6位)
(1)查看系统用户
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 printkey -K "SAM\Domains\Account\Users\Names"
image
(2)转储内存中的Windows帐户密码哈希
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 hashdump
image
发现没有解密成功;使用mimikatz插件获得密码(自行下载插件)
则Flag{admin:.dfsddew}
3、获取当前系统IP地址以及主机名,以Flag{ip:主机名}形式提交
(1)获取主机名
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 hivelist
image

(2)查看注册表信息
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 -o 0xfffff8a000024010 printke y
image

image

答案为:WIN-9FBAEH4UV8C
(3)获取IP地址
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 netscan
image
IP地址为:192.168.85.129
Flag{WIN-9FBAEH4UV8C.192.168.85.129}
(4)获取当前系统浏览器搜索过的关键词,作为Flag提交
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 iehi story
image

Flag{admin@file:///C:/Users/admin/Desktop/flag.txt}
(5)当前系统中存在挖矿进程,请获取指定的矿池地址,以Flag{}提交
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 pslist
image

flag{54.36.109.161:2222}
(6)恶意进程在系统中注册了服务,请将服务名称以Flag{服务名}提交
上题已知恶意进程号为2588,找到process ID为3036
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 pslist -p 2588
image

根据process ID为3036,查找服务
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 svcscan|grep 3036
image
flag{VMnetDHCP}

六、音频隐写

1、MP3隐写

(1)题解:下载附件之后是一个mp3的音频文件;并且题目提示key=syclovergeek;所以直接使用MP3stego对音频文件进行解密;mp3stego工具是音频数据分析与隐写工具
(2)mp3stego工具的使用:
-E 进行加密
-P 输入密码
-X 进行提取
./encode -E 123.txt -P pass 456.wav 789.mp3 #加密
./decode -X -P 123 flag.mp3 #解密
eg:
image
目录出现了sycgeek-mp3.mp3.txt文件;如果密码错误不会出现txt文件;打开拿到flag!

2、音频频谱隐写

(1)CTF题目当中给出的音频文件部分当中会出现刺耳的声音;比如是高低位杂音;这时候可以用Audacity工具(开源音频处理软件,分析音频的频谱、波形)对音频进行频谱分析;有的题目题目当中会将flag直接隐藏在音频频谱中
(2)建材给了一个mp3音频文件;首先判断是否是mp3stego隐写;发现缺少key值;通过对音频的分析;其中有刺耳的声音;使用工具对建材文件进行频谱分析;拿到flag
image

3、摩斯密码隐写

(1)题解:打开建材文件通过音频的波形发现是摩斯密码;使用离线或者在线工具提取密码;然后解密
image
根据波形得到摩斯密码为..... -... -.-. ----. ..--- ..... -.... ....- ----. -.-. -... ----- .---- ---.. ---.. ..-. ..... ..--- . -.... .---- --... -.. --... ----- ----. ..--- ----. .---- ----. .---- -.-.;解密拿到flag!
image

4、音频波形隐写

(1)题解:打开建材文件;通过Audacity工具分析波形;发现是二进制组成;提取字符串;使用python脚本高位补0;然后进行ACSII解密拿到flag!
image

5、LSB音频隐写

(1)类似于图片隐写中的 LSB 隐写,音频中也有对应的 LSB 隐写。主要可以使用 Silenteye 工具
image

6、SSTV隐写

其声音听起来像刺耳的电波!
kali下载工具

sudo apt-get install qsstv

打开软件;点击options -->sound-->from file
image
移入音频文件;然后保存图片解码拿到flag!
image

7、拨号隐写

解释:其波形图如下所示,其声音听起来像手机播号时的声音,在CTF里面其常常混杂着其它音乐,需要用Audacity删除,留下拨号声音,再使用软件dtmf2num(这个东西识别有时候没有那么准确,最好学会人工复原)来复原拨号的数字

posted @ 2024-08-28 19:15  Gsupl.落浅~  阅读(216)  评论(1编辑  收藏  举报