CTF—Misc基础
一:文件操作与隐写
1、文件类型的识别
1、文件头完好情况:
(1)file命令
使用file命令
识别:识别出file.doc为jpg类型
(2)winhex
通过winhex工具查看文件头类型,根据文件头部内容去判断文件的类型
eg:JPG类型
(3)notepad++
下载HEXeditor插件
,查看文件的头部信息,和010editor,winhex原理相同
(4)0101editor
个人推荐使用这个,因为包含好用的模板,不用在记忆宽度、高度、CRC的具体位置
2、文件头部损坏情况:
场景:使用file命令无法显示文件类型,只显示data,说明文件头部被破坏,需要修复
(1)使用010editor等工具结合具体情况进行修复
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:
想要分离出AC3zlib文件(zlib文件为图片数据压缩文件),需要输入
dd if=2.png of=3 bs=1 skip=85
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);宽度和高度的修复
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!
(3)类型3:通过LSB隐写zip压缩包或者其他文件;查看extracr preview
会看到常见的文件头部信息
例题:
步骤1:使用zsteg工具看是否能拿到flag
步骤2:
使用stegsolve分析通道;判断哪个通道存在问题;然后在analyse-->data extract
中选择存在问题的通道;枚举;分析extracr preview
中有无flag;或者save bin
;判断是否有flag!
步骤3:
分析是否隐藏的其他文件
6、二维码隐写
思路:
1、扫描二维码直接拿到flag;使用QR reserach工具识别二维码当中的内容!
2、扫描二维码给出提示信息
3、二维码就是误导;可能是其他方面的!
7、webshell隐写
思路:
1、查杀后门;一般D盾查杀;根据查杀出来的文件进一步查找flag;一般搜索$pass
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
查看解密内容;在output当中
发现是zip文件;提取出来解压拿到flag!
10、盲水印
思路:
(1)数字水印用于保护文件的信息和版权;但是盲水印是看不见的
(2)盲水印提取脚本
blindwatermark下载地址
https://github.com/chishaxie/BlindWaterMark
11.NTFS隐写
思路:
1、提示NTFS数据流(一般就是给一个压缩包;然后里面有很多的txt文档);直接使用NtfsStreamsEditor
工具扫描flag
文件夹;拿到flag(必须用7.zip 解压文件)
12、outguess隐写
(1)outguess工具的下载:输入:git clone https://github.com/crorvick/outguess
;
(2)示例
我对cmd.jpg进行了outguess加密,在里面写入了flag;然后我进行解密
Outguess -k “my secret key” -r out.jpg flag.txt
查看得到flag
13、特殊算法隐写
(1)**Stegdetect**
场景:主要用于分析JPEG文件的加密方,可以检测到通过JSteg、JPHide、OutGuess、Invisible Secrets、F5、appendX和Camouflage等
常见的加密方式jsteg\jphide\outguess\invisible\f5\appendx
eg:
1、java盲水印-jphide
eg:
三:压缩文件隐写
思路:
1、伪加密
(1)zip伪加密
考点:winhex打开压缩包;搜索504b0102(注意不是文件头部;zip文件头部伪504b0304
);从50开始,往后面数第9,10个字符为加密字符,将其设置为0000即可变为无加密状态
(2)rar伪加密
从头开始一般第24个字节为加密位置;将尾数修改为0,即可解除加密
2、暴力破解
(1)设置密码;需要使用ARCHP.exe工具
来破解zip/rar文件
(2)明文破解
明文攻击指知道加密的ZIP中部分文件的明文内容,利用这些内容推测出密钥并解密ZIP文件的攻击方法
例:假设一个加密的压缩包中有两个文件readme.txt和flag.txt,其中flag txt的内容是我们希望知道的内容,而我们拥有readme.txt的明文文件,使用上述两个文件即可进行明文攻击。
操作:
1、将readme.txt的明文文件进行压缩,变成readme1.zip。
2、打开archpr, 攻击类型选择明文,明文文件路径选择readme1.zip ( 即将明文文件不加密压缩后的文件),加密的文件
选择要破解的文件,点击开始,破解成功后会获得密码。
四:流量分析
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协议分级**
协议分析的目的就是为了对整个流量包有一个大致的分析!
统计 ---> 协议分级
**3、wireshark 流汇聚**
(1)用于追踪tcp或者http的流量
追踪流中直接寻找是否有flag
wireshark数据提取
(1)ctf题目当作可能会将flag等信息藏在一些文件当作;比如藏在图片;压缩包;文本文档等;需要我们对流量包进行数据提取;将提取的数据进一步处理!
文件 -----> 导出对象 ------> HTTP
eg:有一个ncc.pcap流量包;打开首先在协议分级当作看一下流量包的比重;输入http contains "ncc"
;发现了一张.png照片
提取!
进一步对照片进行处理拿到flag!
(2)使用**networkminer工具**
分析流量包直接提取出照片!
(3)手动提取!
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)
2、提取数据的
(1)藏在压缩包中的(PK为压缩包文件的头部标识)
原始数据显示;然后保存16进制数据;010editor导入16进制数据;另存为即可
(2)藏在图片当中的
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”过滤数据包
追踪流分析数据包;发现了一段base64编码的内容;根据经验判断应该是base64编码转图片
base64在线解码工具:https://the-x.cn/encodings/Base64.aspx
解码之后得到一张图片;图片的内容为KEY
微信识别内容后保存为txt文件(提示文件给出了key的格式)
导入KEY出现了两个http流量包;追踪流发现了flag!(没有导入key之前没有发现flag)
- 例题2
题目提示是TSL加密;那就是要找到key导入密钥获取加密的流量包;输入http contains "key"
筛选流量包;然后分析流量包;发现一个流量包很奇怪;追踪http流量发现了sslkey.log;另存到桌面;然后导入key;发现http流量包多了几个;分析http流量包拿到flag!
4、大流量
1、黑客IP地址
思路:黑客攻击会产生大量的流量;根据流量的大小、包的数量来判定是否为异常流量以及攻击者的IP。可以用统计工具分析一下
统计-会话。发现183.129.152.140与内网IP建立会话的Packets较多
统计-端点。同样发现183.129.152.140的包数最多。
统计-IPv4 Statistics-ALL Address。统计下IP,183.129.152.140的数量最多。
所以,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位
提取数据:右键HID Data ;作为过滤应用;选中;然后复制
使用命令提取数据
//提取键盘流量;其中usbhid.data就是复制的字段内容
tshark -r 键盘.pcapng -T fields -e usbhid.data |sed '/^\s*$/d' >flag.txt
//使用脚本加上:;注意键盘流量是16位;鼠标是8位
python .\冒号.py
//提取键盘数据
python .\usb_keyborad.py
**2、鼠标流量 **
(1)USB协议鼠标数据部分,会出现在 Leftover Capture Data
或者 HID Data
中;长度为8位
(2)例题:打开流量包;根据Leftover Capture Data内容得出为鼠标流量;获得字段值为usb.capdata
//提取鼠标流量;其中usb.capdata为数据的字段
tshark -r 鼠标.pcap -T fields -e usb.capdata |sed '/^\s*$/d' >flag.txt
//加上:;注意键盘流量是8位;注意修改脚本
python .\usb_mouse.py
python '.\坐标绘制图形 - 副本.py
6、webshel流量
1、例题
打开流量包;首先http contains "flag"
;发现了结果符合条件的流量包(发现了菜刀webshell工具的流量;解码发现让我下载6666.jpj这个图片;追踪http流量包;一个一个查看)
查看完所有的http流量包之后;发现了 1.php 6666.jpg flag.txt hello.zip 几个文件;尝试提取出来;根据流量包;只找到6666.jpg和zip的数据内容
(1)提取666.jpg(JPG的头部数据为FFD8FF)
显示原始数据;保存16进制数据到txt文档中;然后010editor导入16进制数据;另存为1.jpg
我以为是flag;发现不是;那可能是zip的密码
(2)提取zip
分析数据包发现了zip的头部内容PK;提取压缩包(和提取图片的步骤一样)
然后发现解压需要密码;使用照片中的密码解密拿到flag!
7、wifi流量
1、例题
打开流量包出现现wireless LAN协议
和802.11无线协议
和Tp-Link,
;判定为wifi流量包;使用airrcrack-ng工具进行破解
//获得BSSID地址BC:F6:85:9E:4E:A3
aircrack-ng xxx.cap
//生成字典解密
aircrack-ng -a2 -b BC:F6:85:9E:4E:A3 -w pass.txt wifi.cap
8、思路总结
首先打开流量包;分别看一下不同协议的info;看看有没有什么特别奇怪或者很长的解释;一般flag就在里面(有可能是base64编码的;注意二次编码);然后就是利用过滤语法看看有没有什么明显的流量包;进一步分析;看看有没有什么压缩包,图片;文件等等的;提取出来看看是否有flag等信息;还有注意几种特别的流量包;目前就遇到这这些!
五、内存取证隐写
1、工具安装
Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。Volatility2.6需要python2,pip安装模块也需要2版本
安装pip2
Volatility2.6需要python2,pip安装模块也需要2版本,所以首先安装pip2
(1)检查python2(已安装)
(2)下载pip2
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
(3)安装pip2
sudo python2 get-pip.py
(4)检查安装情况
pip2 -h
安装依赖环境
(1)安装pycryptodome(我这里已经安装)
pip2 install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple
(2)安装distorm3
git clone https://github.com/vext01/distorm3.git
cd distorm3
sudo python2 setup.py install
安装volatility
(1)退出distorm3文件夹,下载volatility2
git clone https://github.com/volatilityfoundation/volatility.git
(2)进volatility,判断是否安装成功
如果缺少插件的话,会出现好多行报错的
2、例题解析
(1)CTF金砖技能大赛的一道题目
1、分析镜像
python2 vol.py -f /home/kali/桌面/worldskills3.vmem imageinfo
2、从内存中获取到用户admin的密码并且破解密码,以flag{admin,password}形式提交(密码为6位)
(1)查看系统用户
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 printkey -K "SAM\Domains\Account\Users\Names"
(2)转储内存中的Windows帐户密码哈希
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 hashdump
发现没有解密成功;使用mimikatz插件获得密码(自行下载插件)
则Flag{admin:.dfsddew}
3、获取当前系统IP地址以及主机名,以Flag{ip:主机名}形式提交
(1)获取主机名
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 hivelist
(2)查看注册表信息
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 -o 0xfffff8a000024010 printke y
答案为:WIN-9FBAEH4UV8C
(3)获取IP地址
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 netscan
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
则Flag{admin@file:///C:/Users/admin/Desktop/flag.txt}
(5)当前系统中存在挖矿进程,请获取指定的矿池地址,以Flag{}提交
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 pslist
则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
根据process ID为3036,查找服务
python2 vol.py -f /home/kali/桌面/worldskills3.vmem --profile=Win7SP1x64 svcscan|grep 3036
则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:
目录出现了sycgeek-mp3.mp3.txt文件;如果密码错误不会出现txt文件;打开拿到flag!
2、音频频谱隐写
(1)CTF题目当中给出的音频文件部分当中会出现刺耳的声音;比如是高低位杂音;这时候可以用Audacity工具(开源音频处理软件,分析音频的频谱、波形
)对音频进行频谱分析;有的题目题目当中会将flag直接隐藏在音频频谱中
(2)建材给了一个mp3音频文件;首先判断是否是mp3stego隐写;发现缺少key值;通过对音频的分析;其中有刺耳的声音;使用工具对建材文件进行频谱分析;拿到flag
3、摩斯密码隐写
(1)题解:打开建材文件通过音频的波形发现是摩斯密码;使用离线或者在线工具提取密码;然后解密
根据波形得到摩斯密码为..... -... -.-. ----. ..--- ..... -.... ....- ----. -.-. -... ----- .---- ---.. ---.. ..-. ..... ..--- . -.... .---- --... -.. --... ----- ----. ..--- ----. .---- ----. .---- -.-.
;解密拿到flag!
4、音频波形隐写
(1)题解:打开建材文件;通过Audacity工具分析波形;发现是二进制组成;提取字符串;使用python脚本高位补0;然后进行ACSII解密拿到flag!
5、LSB音频隐写
(1)类似于图片隐写中的 LSB 隐写,音频中也有对应的 LSB 隐写。主要可以使用 Silenteye 工具
6、SSTV隐写
其声音听起来像刺耳的电波!
kali下载工具
sudo apt-get install qsstv
打开软件;点击options -->sound-->from file
移入音频文件;然后保存图片解码拿到flag!
7、拨号隐写
解释:其波形图如下所示,其声音听起来像手机播号时的声音,在CTF里面其常常混杂着其它音乐,需要用Audacity删除,留下拨号声音,再使用软件dtmf2num(这个东西识别有时候没有那么准确,最好学会人工复原)来复原拨号的数字