-
2022-03-27 00:54:44
题目给了一个图片
用010editor分析,发现两个 FF D8(JPG图像起始位置),复制第二段开始的数据另存为JPG图像
将得到的两个图象使用Stegsolve里的"Image Combiner"模式(图片拼接),在SUB(R,G,B)模式下得到flag
对于Stegsolve的使用:
其有
File Format、Data Extract、Steregram Solve、Frame Browser、Image Combiner五种功能
File Format文件格式功能下,可查看图片的格式信息。
Data Extract即通过分析图像的具体帧数值,提取出想要的信息,可以用来破解LSB等隐写方法。
Steregram Solve 可以控制图像的左右移动
更多相关内容 -
CTF MISC安全杂项经典例题讲解
2018-10-22 12:01:17该内容为CTF赛题MISC安全杂项经理例题讲解,包含图片隐写,流量分析,web安全等多种题型讲解,图文结合,适合新手学习。 -
安恒ctf misc crypto 培训资料合集
2020-10-06 03:17:51安恒ctf misc crypto合集 加解密rsa 隐写 图片隐写 现代密码 古典密码 ppt -
bugku ctf misc wp.pdf
2021-07-05 22:49:19bugku ctf misc wp.pdf -
CTF MISC 隐写工具.zip
2021-10-24 14:55:35CTF MISC 隐写工具.zip -
ctf之misc所需要工具
2021-06-05 18:50:17基本包含了所有misc所需要的工具,还有很多在线工具,自行百度即可 (绝对不吃亏,如果还觉得少了请联系我) -
CTF MISC解题思路总结篇
2022-07-04 17:27:11杂项总结本人自己总结,不足勿喷,感谢!!!希望可以帮到你!!
目录
文件操作
判断文件类型
若不知道后缀名,无法打开文件
File 命令(linux)
语法 :
file 文件名
识别为jpeg图片
winhex工具(windows)
一个十六进制编辑器
通过查看文件头判断文件类型(最好记得一些常见的,看到就要反应过来)
文件头残缺/错误
此时无法判断文件类型
需要使用winhex,010ediert,notepadd++对文件头进行修改或者添加
没修改前 使用flie 命令查看会显示data
如
文件分离操作
binwalk工具(Linux)
可以快速分辨文件是否有多个文件组成,并对其进行分离(发现压缩包会自动解压)
语法:
分析文件 binwalk 文件名
分离文件 binwalk -e 文件名
Foremost
当binwalk无法正常分离可以使用foremost将目标文件分解到我们设置的目录下
并按文件类型给分类。
语法
Foremost 文件名 -o 输出目录名
dd
当文件自动分离出错或者因为其他原因无法自动分离
语法
dd if=源文件 of=目标文件名 bs=1 count=读多少块 skip=开始分离的额字节数
参数说明
if=file #输入文件名,缺省为标准输入
of=file #输出文件名,缺省为标准输出
bs=bytes #同时设置读写快大小为bytes,可替代ibs和obs。
skip=blocks #从输入文件开始跳过blocks个块后开始复制
例如
源文件为1234567890abcdefg
winhex
windows下可以利用winhex程序进行分离,找到要分离的部分手动复制分离即可
010Editor
比winhex方便,可以右键直接保存成文件
文件合并操作
linux下文件合并
语法 cat 合并文件名 > 输出的文件
这类题一般会给出md5值来让你验证是否合成正确
完整性检测: Linux下计算文件的md5:
语法:md5sum 文件名windows下文件合并
语法: copy /B 合并的文件(文件间用加号来连接) 输出的文件
完整性检测:
windows下计算文件md5
certutil -hashfile 文件名 md5
文件隐写
直接将key写在文件中,再文件的开头或者结尾部分,若写在文件中间,需要通过搜索查找
windows下查找隐写内容
1 winhex/010Editor
2 Notepad++
图片隐写的常见隐写方法
1 .细微的颜色差别
2 .GIF图多帧隐藏
- 颜色通道隐藏
- 不同帧图信息隐藏
- 不同帧对比隐藏
3. Exif信息隐藏 比如照片中包含地址信息,图片信息中可能包含重要信息
4 .图片修复
- 图片头修复
- 图片尾修复
- crc校验修复
5.最低有效位LSB隐写
LSB(最低有效位)
LSB替换隐写基本思想是用嵌入的秘密信息取代载体图像的最低比特位原来的七个高位平面与代替秘密星系的最低平面合成隐藏信息的新图形。
6 .图片加密(以下为隐写工具)
- Stegdetect
- outguess
- Jphide
- F5
7.二维码处理
图片隐写常用工具
Firework
查看隐写的图片文件,多帧gif啥的
Stegsove
两张图片大小外观像素等基本相同时可以考虑对两个文件进行像素RGB值 XOB ADD SUB等操作,查看是否有有用的信息
数据提取功能
zsteg工具(Linux)
需要下载
语法:
gem install zsteg
再使用
语法:
zsteg 文件名
例如:会将最低有效位的数据显示出来
wbsteg04工具
解密lsp加密的文件,注意他所要求的文件类型,得到解密之后的文件
python脚本处理
此时脚本文件要与目标文件放在同一目录下 运行python即可
TweakPNG工具
使用场景:文件头正常但无法打开文件,可用此工具修改CRC校验值
一款简易用的PNG图像浏览工具,允许查看和修改一些PNG图像文件的元信息储存。
例如:
也有可能是高度和宽度错误,发现改了crc也打不开,此时需要利用crc去计算长和宽并利用16进制编辑器去修改
Bftools (windows)
用于解密图片信息
语法:Bftools.exe decode braincopter 需要解密的文件名称 -output 输出文件名
Bftools.exe run 上一步的输出文件名
SilentEye(Windows)
一款将文字或者文件隐藏到图片中的解密工具
stegdetect工具探测加密方式(jpg文件)
语法:
stegdetect xxx.jpg stegdete -s 敏感度(检测更准确) xxx.jpg
jphide
基于最低有效位LSP的JPEG格式图像隐写算法
Outguess
使用场景:Stegdetect识别出来或题目说是outguess加密的图片
语法:
outguess -r 要解密的文件名 输出的文件名
该工具需要编译后使用
./configure&&make&&make install
F5
使用场景:Stegdetect识别出来或题目说是F5加密的图片
语法:
java Exrtact 要解密的文件 -p 密码
CQR.exe
使用场景:对二维码处理
若某一部分被覆盖,该工具有时候可以自动识别,如果识别失败需要用ps
或者画图等工具补全(其实可以用手机微信)
若二维码颜色反了,中间为白或者颜色不对则需要画图工具取反色(不能是画笔状态,要选择状态),再扫描
压缩文件处理
1.伪加密
使用场景:文件为伪加密文件
操作方法:使用十六进制编辑器打开文件
zip无加密
压缩源文件数据区的全局加密应当为00 00
且压缩源文件目录区的全局方式位标记应当为00 00假加密
压缩源文件数据区的全局加密应当为00 00
且压缩源文件目录区的全局方式位标记应当为09 00
真加密
压缩源文件数据区的全局加密应当为09 00
且压缩源文件目录区的全局方式位标记应当为09 00zip 将从504B0102 后面的九,十位为00 00
rar 将24位改为00
2.暴力破解
通常用ARCHPR.exe来破解zip
使用场景:windows下破解加密过的
zip文件
(1)攻击类型选择暴力破解,暴力破解文件
(2)攻击类型选择掩码可以进行更复杂的暴力破解,比如知道前三位是abc,后三位位数字
则选择攻击类型为掩码,在掩码处输入abs???,破解范围为数字开始破解,???将会被数字代替进行破解
(3)攻击类型 明文攻击
明文攻击指知道加密的zip文件的部分明文内容,利用这些内容推测处密钥并解密zip报文的攻击方法
相比于暴力破解这种方法在破解复杂密码是效率更高。
有时破解不了口令,但能找到加密秘钥,可以直接将文件解密,点击保存解密后的文件
使用明文攻击时注意
1.明文文件压缩后CRC值与加密压缩包中的文件一致
2.明文文件要锁算法要与加密压缩文件的压缩算法一致
3.RAR文件格式错误,导致解压不完全
有时候给出的RAR文件的各个头部会故意给错无法识别出文件
流量取证技术
通常比赛会提供PCAP文件
总体把握:
- 协议分级
- 站点统计
过滤筛选:
- 过滤语法
- Host,Protocol,contains,特征值
发现异常:
- 特殊字符串
- 协议某字段
- flag位于服务器中
数据提取:
- 字符串取
- 文件提取
总的来说比赛中的流量分析可以概括为以下三个方向:
- 流量包修复
- 协议分析
- 数据提取
工具Wireshark的使用
过滤器
常用的过滤命令:
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 ==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/ip等
4.过滤Mac
eth.dst == mac地址
5.包长度过滤
udp.length==26 这个长度是指udp本身长度8加数据包长度之和
tcp.len >=7 指ip数据包,不包括tcp本身
ip,len 除固定长度14
frame.len==119 从eth到最后
6.http模式过滤
http.request.method =="get" 筛选http get请求
http.request.method =="post"筛选http post请求
http.request.url =="/img/logo-edu.gif"筛选访问链接的请求
http contains "get"
http contains "http/1"
http contains "flag" 包内包含flag
tcp contains "flag"
7.协议分级 看数据包主要传什么
8.流汇聚 将http或tcp流汇聚查看其内容(部分题目flag就藏在里面)
9.数据提取 导出传输文件内容
文件->导出对象——>http
无线流量
aircrack-ng 检查cap包
语法:
aircrack-ng xxx.cap
使用 aircrack-ng xxx.cap 字典名 爆破WiFi钥匙
usb键盘流量
原来数据部分在数据包中需要设置为列
leftover capture data中值与具体键位的对应关系
可以参考
csv也为一种表格形式,将数据保存为表格
用写好的Python脚本将数据含义输出
键盘流量脚本
import os os.system("tshark -r test.pcapng -T fields -e usb.capdata > usbdata.txt") normalKeys = {"04":"a", "05":"b", "06":"c", "07":"d", "08":"e", "09":"f", "0a":"g", "0b":"h", "0c":"i", "0d":"j", "0e":"k", "0f":"l", "10":"m", "11":"n", "12":"o", "13":"p", "14":"q", "15":"r", "16":"s", "17":"t", "18":"u", "19":"v", "1a":"w", "1b":"x", "1c":"y", "1d":"z","1e":"1", "1f":"2", "20":"3", "21":"4", "22":"5", "23":"6","24":"7","25":"8","26":"9","27":"0","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\t","2c":"<SPACE>","2d":"-","2e":"=","2f":"[","30":"]","31":"\\","32":"<NON>","33":";","34":"'","35":"<GA>","36":",","37":".","38":"/","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"} shiftKeys = {"04":"A", "05":"B", "06":"C", "07":"D", "08":"E", "09":"F", "0a":"G", "0b":"H", "0c":"I", "0d":"J", "0e":"K", "0f":"L", "10":"M", "11":"N", "12":"O", "13":"P", "14":"Q", "15":"R", "16":"S", "17":"T", "18":"U", "19":"V", "1a":"W", "1b":"X", "1c":"Y", "1d":"Z","1e":"!", "1f":"@", "20":"#", "21":"$", "22":"%", "23":"^","24":"&","25":"*","26":"(","27":")","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\t","2c":"<SPACE>","2d":"_","2e":"+","2f":"{","30":"}","31":"|","32":"<NON>","33":"\"","34":":","35":"<GA>","36":"<","37":">","38":"?","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"} nums = [] keys = open('1.txt')#你的文本文件 for line in keys: #print(line) if len(line)!=17: #首先过滤掉鼠标等其他设备的USB流量 continue nums.append(line[0:2]+line[4:6]) #取一、三字节 #print(nums) keys.close() output = "" for n in nums: if n[2:4] == "00" : continue if n[2:4] in normalKeys: if n[0:2]=="02": #表示按下了shift output += shiftKeys [n[2:4]] else : output += normalKeys [n[2:4]] else: output += '[unknown]' print('output :' + output)
usb鼠标流量分析
鼠标流量表现为连续性,与键盘离散性不同,同样需要吧数据抓出来,在二维坐标内显示轨迹
导出数据方法与键盘流量的方法相同,导出后用python跑出坐标
鼠标流量分析脚本
nums = [] keys = open('data.txt','r') //此处更改数据导出的文件名 posx = 0 posy = 0 for line in keys: if len(line) != 12 : continue x = int(line[3:5],16) y = int(line[6:8],16) if x > 127 : x -= 256 if y > 127 : 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 == 1 : print posx , posy keys.close()
接着用gnuplot工具把图画出来
语法(linux下):
gnuplot 进入工具 plot “上一步导出的坐标文件”
https流量包分析
http=http+TLS
http:80 https:443
https流量经过TLS协议加密,需要导入key(题目会提示)才能看到原始的http流量
导入key后,出现http数据包,就可以进行追踪流等其他操作了
感谢阅读!!!
-
CTF misc图片类总结(入门级)
2021-10-24 12:16:574、4个值转二维码 misc文件头尾 文件隐写和图片隐写步骤 misc思路 MISC文件隐写总结(图片,音频,视频,压缩包等文件) misc图片类总结(新赛题) 使用图片隐写的Python远控恶意样本分析 一、改高宽 打开图片发现下面...文章目录
misc文件头尾
文件隐写和图片隐写步骤
misc思路
MISC文件隐写总结(图片,音频,视频,压缩包等文件)
misc图片类总结(新赛题)一、改高宽
打开图片发现下面好像少了什么。
WinHex打开可以看到PNG的文件头
解析:
(固定)八个字节89 50 4E 47 0D 0A 1A 0A为png的文件头
(固定)四个字节00 00 00 0D(即为十进制的13)代表数据块的长度为13
(固定)四个字节49 48 44 52(即为ASCII码的IHDR)是文件头数据块的标示(IDCH)
(可变)13位数据块(IHDR)
前四个字节代表该图片的宽
后四个字节代表该图片的高
后五个字节依次为:
Bit depth、ColorType、Compression method、Filter method、Interlace method
(可变)剩余四字节为该png的CRC检验码,由从IDCH到IHDR的十七位字节进行crc计算得到。
文件尾:AE 42 60 82图片尺寸为787x500(高x宽)
00 00 00 0D 说明IHDR头块长为13
49 48 44 52 IHDR标识
00 00 03 13 图像的宽,787像素
00 00 01 F4 图像的高,500像素
发现高宽错误
这里需要注意的是,文件宽度不能任意修改,需要根据 IHDR 块的 CRC 值爆破得到宽度,否则图片显示错误不能得到 flagimport os import binascii import struct crcbp = open("D:\\桌面文件\\bingbing.png", "rb").read() #打开图片 for i in range(2000): for j in range(2000): data = crcbp[12:16] + \ struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29] crc32 = binascii.crc32(data) & 0xffffffff if(crc32 == 0xda5a4a50): #图片当前CRC print(i, j) print('hex:', hex(i), hex(j))
把高宽都改成787保存得flag
二、lsb(最低有效位)隐写+base64编码图片
攻防世界Misc高手进阶区 3-11
下载png文件,binwalk,发现zlib文件。
binwalk详解
LSB隐写,save bin,改后缀解压,弹出已损坏,用winrar自带的修复
结尾的=号判断是base64编码,开头iVBORw0K说明是base64编码的图片。
用captfencoder加上头,转为图片:FLAG{LSB_i5_SO_EASY}
CRC32碰撞脚本
Misc中的有一类题目是要求我们知道加密后的rar文件中的内容。但是rar文件密码我们不知道,直接爆破密码也不是很现实。
但是当文件的大小比较小,或者字符数量较少时,就可以根据crc校验码来爆破出rar内部文件的内容。
可以看到最后一列是对应文件的CRC校验码。并且每个文件只有4字节,所以可以看作每个CRC校验码都对应了唯一的文件。Python2爆破如下:import binascii import string dic=string.printable #打印出字符表 crc1=0x7DE0AB32 crc2=0xB1441D53 crc3=0x49BD11F5 crc4=0xB42F1DFA crc5=0x8163F43E crc6=0x1FC8FEE5 for i in dic: for j in dic: for n in dic: for m in dic: s=i+j+n+m if(crc1==(binascii.crc32(s) & 0xffffffff)): text1=s if (crc2 == (binascii.crc32(s) & 0xffffffff)): text2=s if (crc3 == (binascii.crc32(s) & 0xffffffff)): text3=s if (crc4 == (binascii.crc32(s) & 0xffffffff)): text4=s if (crc5 == (binascii.crc32(s) & 0xffffffff)): text5=s if (crc6 == (binascii.crc32(s) & 0xffffffff)): text6=s print text1+text2+text3+text4+text5+text6
三、盲水印+明文攻击
攻防世界Misc的warmup,2017ciscn(全国大学生信息安全竞赛)
下载打开,两个一样的open_forun.png, 明文攻击,将open_forum.png压缩成zip,然后使用ARCHPR的明文攻击
注:两个open_forum.png的crc32的值一样,以及两个文件被压缩之后的大小,满足明文攻击要求。
解压出来是这样:
两个图,试试盲水印:python bwmforpy3.py decode fuli.png fuli2.png flag.png --oldseed
注:如果要让python3兼容python2的random算法请加 --oldseed参数。结果就是flag.png。
傅里叶盲水印
VNCTF021 冰冰好像藏着秘密
傅里叶盲水印原理:
图片经过傅里叶变换后,水印图片直接按像素覆盖到频率域,因为频谱是中心对称的,所以加水印也要对称的加,具体就是图片分上下两部分,左上加了什么,右下也要加同样的内容。之后傅里叶反变换回去。解水印的时候变换到傅里叶变换提取就可以了。import cv2 as cv import numpy as np import matplotlib.pyplot as plt img = cv.imread('D:\\CTF\\FFT.png', 0) #直接读为灰度图像,不过此题已经是灰度图片了 f = np.fft.fft2(img) #做频率变换 fshift = np.fft.fftshift(f) #转移像素做幅度谱 s1 = np.log(np.abs(fshift))#取绝对值:将复数变化成实数取对数的目的为了将数据变化到0-255 plt.subplot(121) plt.imshow(img, 'gray') plt.title('original') plt.subplot(122) plt.imshow(s1,'gray') plt.title('center') plt.show()
四、IDAT块隐写
提数据+zlib解压+625二维码
图像数据块 IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。IDAT 块只有当上一个块充满时,才会继续一个新的块。
pngcheck.exe -v sctf.png
前面的块都是65524,到了0x150008变为45027,再到0x15aff7的138。
很明显最后一个 IDAT 块是有问题的,因为他本来应该并入到倒数第二个未满的块里。
0x150008中的45027位数据是正常的图片信息。0x15aff7的138位数据是人为录入的,且所在的数据块也是人为创建的。
IDAT中的数据采用 LZ77 算法的派生算法进行压缩,所以可以用 zlib 解压缩。
可以用010 editor直接提取出数据,然后扔进zlib解压脚本里解压获得原始数据。查看异常数据块的情况,使用010editor/winhex打开,导出异常数据块:
查找78 9C文件头标志,zlib。
将异常的IDAT数据块斩头去尾之后使用脚本解压,在python2代码如下:import zlib import binascii IDAT = "789C5D91011280400802BF04FFFF5C75294B5537738A21A27D1E49CFD17DB3937A92E7E603880A6D485100901FB0410153350DE83112EA2D51C54CE2E585B15A2FC78E8872F51C6FC1881882F93D372DEF78E665B0C36C529622A0A45588138833A170A2071DDCD18219DB8C0D465D8B6989719645ED9C11C36AE3ABDAEFCFC0ACF023E77C17C7897667".decode('hex') result = binascii.hexlify(zlib.decompress(IDAT)) print (result.decode('hex')) print (len(result.decode('hex')))
得到压缩后的文件:
发现是625,是一个二维码的矩阵,使用python2代码做成二维码:from PIL import Image MAX = 25 pic = Image.new("RGB",(MAX,MAX)) str ="1111111000100001101111111100000101110010110100000110111010100000000010111011011101001000000001011101101110101110110100101110110000010101011011010000011111111010101010101111111000000001011101110000000011010011000001010011101101111010101001000011100000000000101000000001001001101000100111001111011100111100001110111110001100101000110011100001010100011010001111010110000010100010110000011011101100100001110011100100001011111110100000000110101001000111101111111011100001101011011100000100001100110001111010111010001101001111100001011101011000111010011100101110100100111011011000110000010110001101000110001111111011010110111011011" i=0 for y in range(0,MAX): for x in range(0,MAX): if(str[i] == '1'): pic.putpixel([x,y],(0,0,0)) else:pic.putpixel([x,y],(255,255,255)) i = i+1 pic.show() pic.save("flag.png")
运行得到二维码
png末尾藏zip
PNG (png),文件头:89504E47 文件尾:49454E44AE426082
从0304后全部保存,在前面和后面加上504B,后保存为zip
用stegpy得到zip密码:
五、分离与拼接
convert分离gif+montage拼接
攻防世界MISC进阶:glance-50,mma-ctf-2nd-2016
下载拿到一个gif图片,很窄(宽2px)。
(1)用kali的convert命令先把gif分解开:convert glance.gif flag.png
补充:
水平镜像反转图片convert -flop reverse.jpg reversed.jpg
垂直镜像反转图片
convert -flip reverse.jpg reversed.jpg
总共分离出来200个图片。用工具:montage合成,命令:
montage flag*.png -tile x1 -geometry +0+0 flag.png
-tile是拼接时每行和每列的图片数,这里用x1,就是只一行
-geometry是首选每个图和边框尺寸,我们边框为0,图照原始尺寸即可
flag:TWCTF{Bliss by Charles O’Rear}(2)也可以直接用网站。GIF动态图片是由多张静态图片组合而成,按照一定的顺序和时间进行播放。该网站将GIF图片反向分解成一张张静态图。GIF图片有多少帧,就有多少张静态图片。
GIF分解网站(3)也可以写脚本
import os from PIL import Image im = Image.new('RGB', (2*201,600))#new(mode,size) size is long and width PATH = 'E:/ctf/glance.gif' FILE_NAME = [i for i in os.listdir(PATH)] width = 0 for i in FILE_NAME: im.paste(Image.open(PATH+i),(width,0,width+2,600))#box is 左,上,右,下 width += 2 im.show()
六、像素点合成
1、PPM格式+多种文件转换网站
攻防世界 Misc Miscellaneous-200 defkthon-ctf
miscellaneous
adj. 混杂的; 各种各样的;(1)提供的flag.txt文件每行包含由三个逗号分隔的值组成的元组。这看起来像一个给定RGB值的图像。
总共有61366行:
注:Linux wc命令用于计算字数。
-l或–lines 显示行数。
-w或–words 只显示字数。
-c或–bytes或–chars 只显示Bytes数。
flag.txt文件的行数为61366、单词数61366、字节数730988图像的尺寸是这个数字(61366)的等分,所以可能是:1,2,61,122,503,1006,30683,61366。
最可能的图像大小是 122×503px 或 503×112px 。注:px是分辨率的单位,是英语单词pixel的缩写,意为像素(组成屏幕图像的最小独立元素)。
将文本文件转换为图像的最可以将其转换为PPM格式,其标题如下:
P3 122 503 255
注:PPM(Portable PixMap,便携式像素映射)。这些图片格式都相对比较容易处理,跟平台无关,所以称之为portable,简单理解,就是比较直接的图片格式,比如PPM,其实就是把每一个点的RGB分别保存起来。所以,PPM格式的文件是没有压缩的,相对比较大,但是由于图片格式简单,一般作为图片处理的中间文件(不会丢失文件信息),或者作为简单的图片格式保存。
PPM文件
PPM文件格式详解然后是flag.txt的内容,逗号用空格替换。(快捷键ctrl+h 实现替换的功能)
TXT到PPM转换器
这个网站可以转换许多东西!
结果是flag.ppm。用极速看图软件打开(kali中可以直接打开):
转换为PNG,并翻转+旋转它,使它更容易阅读,结果如下图所示:
convert -flip -rotate 90 flag.ppm flag.png
(2)分析文本发现是道画图题,直接编写 python 程序
from ast import literal_eval as make_tuple from PIL import Image f = open('flag.txt', 'r') corl = [make_tuple(line) for line in f.readlines()] f.close() img0 = Image.new('RGB', (270, 270), '#ffffff') k=0 for i in range(246): for j in range(246): img0.putpixel ([i , j], corl[k]) k=k+1 img0.save("result.png")
flag{ youc@n’tseeme }
七、流量类
1、wireshark提取数据流//tcpxtract
攻防世界misc进阶Cephalopod
用wireshark搜索flag字符串,可以看到
PNG头的16进制为89504E47,然后搜索该16进制,找到一条TCP报文,然后追踪TCP流。
可以看到这是一个图片数据流。尾为:文件尾:AE 42 60 82。保留原始数据。
然后复制进去winhex只保留png头尾数据,然后修改文件后缀名为png,就可以得到flag图片
tcpxtract
也可以直接
tcpxtract -f 1.pcap
得到一张png图片 得到flag :HITB{95700d8aefdc1648b90a92f3a8460a2c}
Tcpxtract是用来从网卡抓包并将其还原成文件的一个开源软件,它的基本原理是在抓取的数据包中匹配文件的特征头和特征尾。strings
strings webshell.pcapng | grep {
strings命令在对象文件或二进制文件中查找可打印的字符串。字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束。 strings命令对识别随机对象文件很有用。 grep 命令用于查找文件里符合条件的字符串
strings xxx.png
有时可以出flag2、协议分级+导出HTTP对象
攻防世界-互相伤害!!!
wireshark打开,协议分级,基本都是TCP流量,又以超文本传输协议为主,导出HTTP对象。八、二维码类
1、bmp转二维码
攻防世界 Misc高手low
下来一个bmp文件,用stegsolve分析无果,但是通过观察发现是RGB的通道有问题,利用的是图片中最低位的奇偶性。
实验吧原题直接用画图另存为png格式,用StegSolve打开后,调到RGB红色位置。这里有所变化
转QR Code,即二维码(Quick Response Code)# lsb隐写 import PIL.Image as Image img = Image.open('low.bmp') img_tmp = img.copy() pix = img_tmp.load() width,height = img_tmp.size for w in range(width): for h in range(height): if pix[w,h]&1 == 0: pix[w,h] = 0 else: pix[w,h] = 255 img_tmp.show()
用QR research解码得:
2、16进制转pyc
攻防世界 MISC 适合作为桌面(世安杯)
使用stegsolve发现在绿色的低位通道中有二维码
使用二维码扫描器扫描,并将16进制数字结果在winhex中打开
注:如果错选中间这个(ANSI-ASCII),则再ASCII码转二进制(快捷键Ctrl+R)
03F3开头,pyc文件。保存为.pyc然后反编译,在脚本后加上flag(),运行之后即可得到flag。或者,使用“uncompyle6 文件路径\文件名.pyc > 文件路径\文件名.py”命令
D:\Python385\Lib\site-packages\uncompyle6\bin
pyc隐写Stegosaurus
Stegosaurus 是一款隐写工具,它允许我们在 Python 字节码文件( pyc 或 pyo )中嵌入任意 Payload 。由于编码密度较低,因此我们嵌入 Payload 的过程既不会改变源代码的运行行为,也不会改变源文件的文件大小。 Payload 代码会被分散嵌入到字节码之中,所以类似 strings 这样的代码工具无法查找到实际的 Payload 。 Python 的 dis 模块会返回源文件的字节码,然后我们就可以使用 Stegosaurus 来嵌入 Payload 了。
pyc文件存在无效空间,修改后大小不变,不影响运行,可以隐藏信息。
stegosaurus.py可以隐藏和解密pyc文件中隐藏的信息。
只能利用pyc文件中的无效空间(Python3.6后参数会占1字节,如果没有参数用0x00填充,运行时被忽
略,修改不影响),编码密度较低,嵌入 Payload 后不会改变源代码的正常运行和大小,不容易被发现。
同时 Payload 会被分散嵌入到字节码之中,类似 strings 这样的代码工具无法查找到实际的 Payload 。
通过github下载后(https://github.com/AngelKitty/stegosaurus)运行 python stegosaurus.py -h
可以发现有很多参数,-p 要隐藏的文本,-r 显示最大隐藏字节,-x可以解密。
stegosaurus解密
使用 python stegosaurus.py py_py_py.pyc -x 得到如下结果 Extracted payload: Flag{HiD3_Pal0ad_1n_Python} 。3、二进制作二维码
攻防世界 Misc很普通的数独
下载发现是一堆数独图片,把有数字的记为1,没有数字的记为0,结果保存在txt文本中。也可以调节文件位置后用画图拼接,并将有数字的格涂黑。# -*- coding:utf-8 -*- from PIL import Image x = 45 y = 45 im = Image.new("RGB", (x, y)) # 创建图片 file = open('1.txt', 'r') # 打开rbg值文件 for i in range(0, x): line = file.readline() # 获取一行 for j in range(0, y): if line[j] == '0': im.putpixel((i, j), (255, 255, 255)) # rgb转化为像素 else: im.putpixel((i, j), (0, 0, 0)) # rgb转化为像素 im.show()
扫描得到一串字符串,base64多次解码得到flag:flag{y0ud1any1s1}
4、4个值转二维码
2019西湖论剑网络安全技能大赛(大学生组)–奇怪的TTL字段
发现ttl.txt中的ttl只有4个值63,127,191,255,写出他们的二进制表示后发现只有最高两位不同(高两位比特的数在数据传输中不容易受影响),拿下来,每4个TTL值凑出一个字节的二进制数来
63=00111111
127=01111111
191=10111111
255=11111111
于是考虑做如下转换,发现写出来的16进制数开头是ffd8,应该是jpg,于是写入文件中:fp = open('ttl.txt','r') a = fp.readlines() p = [] for i in a: p.append(int(i[4:])) s = '' for i in p: if i == 63: a = '00' elif i == 127: a = '01' elif i == 191: a = '10' elif i == 255: a = '11' s += a # print(s) import binascii flag = '' for i in range(0,len(s),8): flag += chr(int(s[i:i+8],2)) flag = binascii.unhexlify(flag) wp = open('res.jpg','wb') wp.write(flag) wp.close()
写完之后发现只有二维码的一部分,应该是不止一张图,用foremost直接分开就好了,之后用PPT拼在一块,扫描之后得到如下信息:
key:AutomaticKey cipher:fftu{2028mb39927wn1f96o6e12z03j58002p}
是AutoKey加密,用在线网站解密得flag
autokey解密
自动密钥密码(Autokey Cipher)也是多表替换密码,与维吉尼亚密码密码类似,但使用不同的方法生成密钥。 -
CTF misc题目之htb-misc-misDIRection
2021-10-26 20:46:50看到了0-9 a-z的目录,里面有的是空,有的是有文件 但是文件都是空,只有名字 看文件名都是数字,是不是ascii码对应的字母? (后续证明这里解压的有问题,大小写不一致。。 用unzip解压出来的有的大小写不同,unzip...题目来源:hackthebox
看到了0-9 a-z的目录,里面有的是空,有的是有文件
但是文件都是空,只有名字
看文件名都是数字,是不是ascii码对应的字母?
(后续证明这里解压的有问题,大小写不一致。。
用unzip解压出来的有的大小写不同,unzip解压的那个才是对的)
或者都转成二进制,然后转ascii码?
试一下
先用tree看一下内容,弄成列表,然后用python处理
tree /f
[6,22,30,34,16,36,23,4,13,26,14,5,19,2,27,10,12,8,11,25,31,33,32,3,7,1,24,20,28,9,35,15,17,21,29,18]
a = [6,22,30,34,16,36,23,4,13,26,14,5,19,2,27,10,12,8,11,25,31,33,32,3,7,1,24,20,28,9,35,15,17,21,29,18] tentobin = [] tentobinstring = "" final = "" for i in a: # 十进制转ascii # tentobin.append(chr(i)) # print(i) # 十进制转二进制 bin带有0b前缀,不带前缀呢? # tentobin.append(bin(i)) tentobinstring += bin(i)[2:] print(len(tentobinstring))
转了一下感觉也不太行。。
看wp,冲
ls -lAhR . > dir_file.lst 这个命令可以掌握一下
哦fuck…那些数字是有顺序的啊。。。。
按数字排序字母
手动。。。尝试写个脚本吧
先给它们排序,然后连接起来空格后面的那一部分,就ok了
先把Linux中unzip的结果写下来,用word处理一下,加上双引号和逗号,再用python处理
[“1 S”,
“35 V”,
“2 F”,
“19 F”,
“27 F”,
“23 B”,
“34 2”,
“7 R”,
“3 R”,
“18 z”,
“10 j”,
“12 j”,
“13 d”,
“9 U”,
“32 p”,
“25 N”,
“11 N”,
“31 N”,
“33 N”,
“5 e”,
“30 1”,
“22 1”,
“24 s”,
“26 D”,
“29 X”,
“21 X”,
“17 X”,
“36 9”,
“8 J”,
“4 C”,
“6 0”,
“14 E”,
“16 5”,
“15 x”,
“20 u”,
“28 u”]
脚本(其实觉得还不如手动快。。不过就当练习写脚本了!)
#!/usr/bin/env python # -*- coding:utf-8 -*- # Autor:tangzicheng import base64 a = [] #把上面的复制过来即可 final = "" # 用最简单的排序 for i in range(len(a)-1): min = i # print(min_index) for j in range(i+1,len(a)): if int(a[j][0:2]) < int(a[min][0:2]): min = j a[i],a[min] = a[min],a[i] # print(min) print(a) for i in a: final += i[2:].strip() print(final) print(base64.b64decode(final))
-
bugku ctf misc wp2.pdf
2021-07-05 22:50:09bugku ctf misc wp2.pdf -
CTF MISC解题思路BUUCTF MISC1-8刷题
2022-05-21 13:33:08CTF MISC解题思路BUUCTF MISC1-8解题思路 -
有用的ctf的misc工具
2020-07-16 22:54:31有用的ctf的misc工具 -
CTF MISC(杂项)知识点总结——图片类(一)
2021-08-22 08:50:13CTF MISC(杂项)知识点总结——图片类(一) Misc为英文miscellaneous的前四个字母,杂项、混合体、大杂烩的意思。 主要题目类型包括: 1.图片隐写、修复、分离 2.字符串类、进制转换 3.音频&视频隐写 4.数据包... -
ctf misc 图片题知识点
2021-04-24 09:53:55过几天有比赛了,总结一下自己遇到过的知识点,争取能把签到题做出来 ...例如第四届蓝帽杯决赛的一道misc:MISC隐写 给了一张图片,里面是一条蛇,这个提示的是后面会用到的一种解密方法;然后从图片中提取出一个pdf -
ctf misc 学习总结大合集
2020-10-21 12:27:33有这么多工具不如网上找个工具包,eg:https://ctf-wiki.github.io/ctf-tools/collections/ 先base64解码得到ggQ@gQ1fqh0ohtjpt_sw{gfhgs#} 一看格式,无非是凯撒+栅栏,解题关键是flag格式ssctf{},所以先凯撒得到 ... -
[ctf misc][2021强网杯]BlueTeaming
2021-11-24 21:41:57[2021强网杯]BlueTeaming 解压得BlueTeaming改后缀BlueTeaming.zip,再解压得memory.dmp发现是内存镜像 根据题目提示·Powershell scripts were executed by malicious programs. What is the registry key that ... -
ctf-misc-登机牌.zip
2021-06-01 17:58:15- 由登机牌作为出题点,对png图片进行16进制分析, - 发现暗含加密的rar文件, - 利用登机牌上的PDF417二维条形码得到rar的密码 -
CTF misc常用的图像处理
2021-11-24 13:43:40文章目录一、Pillow二、OpenCV2三、Matplotlib 一、Pillow #基本操作 from PIL import Image #引用Image类 im = Image.new('RGB',(110,80)) #新建图片 im = Image.open('x.jpg') #加载图片 print(im.format,im.size,... -
Buu ctf misc 练习
2022-04-22 15:08:03被刷新的图片 下载该文件,发现该文件为一张图片,判断该题为隐写术 将该图片放入16进制编辑器和StegSolve进行查看,没有获得有效的信息 猜测该题可能为F5隐写,通过kail下载F5隐写...java Extract /位置/Misc.j... -
ctf misc之MP3隐写
2022-04-09 22:23:532022/4/9 第一次写mp3隐写,走了好多坑记录一下 题目得到一个MP3文件和一个压缩包 然后听一遍这个歌发现最后面有一段非常违和的 用Audacity打开这个mp3 ...查找了一下MP3的隐写方法有以下几种: ... -
BugKu CTF Misc easy_nbt
2022-04-24 18:01:081.解压file.zip 将level.dat改为level.zip 2.解压level.zip得到leve,然后用记事本打开level 3.使用记事本的查找功能查找flag得到flag{Do_u_kN0w_nbt?} -
wangdingbei ctf misc
2019-05-01 14:45:11wangdingbei ctf misc,ctf,网鼎杯的ctf题目,我还没有做出来。赚个积分,大家可以一起讨论。 -
CTF misc wireshark初步
2019-09-12 21:49:38wireshark是网络封包分析软件,可以截取各种网络封包,显示网络封包的详细信息。 为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。 ... wireshark是捕获机器上的某一块网卡的网络包,当你... -
ctf MISC disordered_zip
2022-04-05 20:52:37题目: 下载下压缩包后,发现出错无法打开,用010editor查看: 查看文件头发现是压缩包的文件头不完整,压缩包文件头:50 4B 03 04 补全文件头后保存,发现压缩包可以打开: ...补全二维码左右缺口后扫描得到... -
【CTF misc python】加密zip和rar文件的枚举解密工具(python代码)
2022-03-05 20:53:20没有工具的情况下可以自己写一段py脚本来实现。 环境:Windows10,python3.7.6 文章目录仅支持ZIP的版本支持ZIP和RAR的版本安装代码解释参考链接 仅支持ZIP的版本 我稍微改了下参考链接1的代码,可以正确运行。... -
有没有大佬帮看一下,ctf里misc通过这个文件找flag,在线等,急!
2021-08-25 12:41:28有没有大佬帮看一下,ctf里misc通过这个文件找flag,在线等,急! -
CTF MISC解题思路BUUCTF MISC9-16刷题
2022-05-23 15:38:08CTF MISC解题思路BUUCTF MISC9-16刷题 -
2022华为CTF misc gogogo wp
2022-01-25 10:54:47gogogo 预期解 开局两个附件一个raw一个拼图,能想到拼图拼起来是个秘钥之类的,去解密取证出来的内容。 于是开启了拼图之路,利用montage合成一张大图 montage *.png -geometry +0+0 flag.png ... -
收录CTF MISC方向中使用的在线工具网站
2021-01-01 21:59:07收录笔者在做misc题目时使用到的各种工具站或,持续更新.....建议收藏 -
ctf misc 压缩包+音频知识点
2021-07-08 14:40:34关于前面提到的编码问题和加密方式的问题,可以参考这篇博客的 [*CTF2019]otaku rar5.0加密 上面说的两种工具没办法破解rar5.0的加密,不过可以用破解版的Accent RAR Password Recovery进行爆破,这个工具也支持...