MISC1
简介
-
主要分为几个板块:Recon,Forensic,Stego,Crypto(古典密码)…
-
Recon:信息收集
- 主要介绍一些获取信息的渠道和一些利用百度、谷歌等搜索引擎的技巧
-
Encode(编码转换)
- 主要介绍在 CTF 比赛中一些常见的编码形式以及转换的技巧和常见方式
-
Forensic && Stego(数字取证 && 隐写分析)
- 隐写取证是 Misc 中最为重要的一块,包括文件分析、隐写、内存镜像分析和流量抓包分析等等,涉及巧妙的编码、隐藏数据、层层嵌套的文件中的文件,灵活利用搜索引擎获取所需要的信息等等。
-
-
一张概图
信息收集技术
网络收集
-
公开渠道
-
目标 Web 网页、地理位置、相关组织
-
组织结构和人员、个人资料、电话、电子邮件
-
网络配置、安全防护机制的策略和技术细节
-
通过搜索引擎查找特定安全漏洞或私密信息的方法
-
科学上网
-
GoogleHacking
site 指定域名 Intext 正文存在关键字的网页 Intitle 标题存在关键字的网页 Info 一些基本信息 Inurl URL存在关键字的网页 Filetype 搜索指定文件类型 + 强制包含某个字符进行查询 - 忽略某个字符 ""精准匹配某个字符 .匹配单个字符进行查询 *匹配任意字符进行查询 |或者
基本搜索
- Google 基本搜索与挖掘技巧
- 保持简单明了的关键词
- 使用最可能出现在要查找的网页上的字词
- 尽量简明扼要地描述要查找的内容
- 选择独特性的描述字词
- 社会公共信息库查询
- 个人信息:人口统计局
- 企业等实体:YellowPage、企业信用信息网
- 网站、域名、IP:whois 等
地图街景
- 国外:Google Map、Google Earth、Google Street View
- 国内:百度地图、卫星地图、街景
- 从网络世界到物理世界:IP2Location
- whois 数据库
- GeoIP
- 纯真数据库(QQ IP 查询)
编码技术
Morse
参见 摩尔斯编码 - 维基百科
-
特点
- 只有
.
和-
; - 最多 6 位;
- 也可以使用
01
串表示。
- 只有
-
工具
曼彻斯特编码
ASCII
- 变形
- 二进制编码ASCII
- 十六进制
Base编码系列
-
basexx:代表采用多少个字符编码
-
base64
-
每6个bit为一个单元,对应某个打印字符
-
包括26大小写字母/10个数字/±/末尾使用=补齐
-
-
base32
- 大写A-Z加数字234567,结尾可能最多有3个等号
-
base16
- 包括0123456789ABCDEF
XXencoding
-
XXencode 将输入文本以每三个字节为单位进行编码。如果最后剩下的资料少于三个字节,不够的部份用零补齐。这三个字节共有 24 个 Bit,以
6bit 为单位分为 4 个组,每个组以十进制来表示所出现的数值只会落在 0 到 63 之间。以所对应值的位置字符代替。 -
具体信息参见XXencoding
URL编码(Unicode)
-
参见 URL 编码 。
-
特点:大量%
-
表现形式
-
原文本
The
&#x [Hex]: The &# [Decimal]: The \U [Hex]: \U0054\U0068\U0065 \U+ [Hex]: \U+0054\U+0068\U+0065
-
条形码
- 宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符
- 国际标准
- EAN-13 商品标准,13 位数字
- Code-39:39 字符
- Code-128:128 字符
- 条形码在线识别
二维码
- 用某种特定几何图形按一定规律在平面分步的黑白相间的图形记录数据符号信息
- 堆叠式 / 行排式二维码:Code 16 k、Code 49、PDF417
- 矩阵式二维码:QR CODE
取证隐写
- 要求检查一个静态数据文件从而获取隐藏信息
要求
-
了解常见的编码
能够对文件中出现的一些编码进行解码,并且对一些特殊的编码(Base64、十六进制、二进制等)有一定的敏感度,对其进行转换并得到最终的 flag。
-
能够利用脚本语言(Python 等)去操作二进制数据
-
熟知常见文件的文件格式,尤其是各类 文件头、协议、结构等
-
灵活运用常见的工具
Python 操作二进制数据 ¶
struct 模块 ¶
有的时候需要用 Python 处理二进制数据,比如,存取文件,socket 操作时。这时候,可以使用 Python 的 struct 模块来完成。
struct 模块中最重要的三个函数是 pack()
、unpack()
和 calcsize()
pack(fmt, v1, v2, ...)
按照给定的格式(fmt),把数据封装成字符串(实际上是类似于 c 结构体的字节流)unpack(fmt, string)
按照给定的格式(fmt)解析字节流 string,返回解析出来的 tuplecalcsize(fmt)
计算给定的格式(fmt)占用多少字节的内存
这里打包格式 fmt
确定了将变量按照什么方式打包成字节流,其包含了一系列的格式字符串。这里就不再给出不同格式字符串的含义了,详细细节可以参照 Python Doc
>>> import struct
>>> struct.pack('>I',16)
'\x00\x00\x00\x10'
pack
的第一个参数是处理指令,'>I'
的意思是:>
表示字节顺序是 Big-Endian,也就是网络序,I
表示 4 字节无符号整数。
后面的参数个数要和处理指令一致。
读入一个 BMP 文件的前 30 字节,文件头的结构按顺序如下
- 两个字节:
BM
表示 Windows 位图,BA
表示 OS/2 位图 - 一个 4 字节整数:表示位图大小
- 一个 4 字节整数:保留位,始终为 0
- 一个 4 字节整数:实际图像的偏移量
- 一个 4 字节整数:Header 的字节数
- 一个 4 字节整数:图像宽度
- 一个 4 字节整数:图像高度
- 一个 2 字节整数:始终为 1
- 一个 2 字节整数:颜色数
>>> import struct
>>> bmp = '\x42\x4d\x38\x8c\x0a\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\x00\x00\x00\x80\x02\x00\x00\x68\x01\x00\x00\x01\x00\x18\x00'
>>> struct.unpack('<ccIIIIIIHH',bmp)
('B', 'M', 691256, 0, 54, 40, 640, 360, 1, 24)
bytearray 字节数组 ¶
- 将文件以二进制数组形式读取
data = bytearray(open('challenge.png', 'rb').read())
字节数组就是可变版本的字节
data[0] = '\x89'
NTFS隐写
ADS 交换数据流
是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流,就是说除了主文件流之外还可以有许多非主文件流寄宿在主文件流中。它使用资源派生来维持与文件相关的信息,虽然我们无法看到数据流文件,但是它却是真实存在于我们的系统中的。创建一个数据交换流文件的方法很简单,命令为"宿主文件:准备与宿主文件关联的数据流文件"。
图片分析
- 图像文件有多种复杂的格式,可以用于各种涉及到元数据、信息丢失和无损压缩、校验、隐写或可视化数据编码的分析解密
元数据
-
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(Data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
-
元数据中隐藏信息在比赛中是最基本的一种手法,通常用来隐藏一些关键的
Hint
信息或者是一些重要的如password
等信息。这类元数据你可以
右键 --> 属性
去查看, 也可以通过strings
命令去查看,一般来说,一些隐藏的信息(奇怪的字符串)常常出现在头部或者尾部。identify
命令,这个命令是用来获取一个或多个图像文件的格式和特性。-format
用来指定显示的信息,灵活使用它的-format
参数可以给解题带来不少方便。format 各个参数具体意义
PNG
-
文件格式
- 文件头总是由位固定的字节来描述的,剩余部分由3个以上的数据块(Chunk)按照特定的顺序组成
- 文件头
89 50 4E 47 0D 0A 1A 0A
+ 数据块 + 数据块 + 数据块…
-
数据块
- PNG 定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是标准的数据块,另一种叫做辅助数据块(ancillary
chunks),这是可选的数据块。关键数据块定义了 4 个标准数据块,每个 PNG 文件都必须包含它们,PNG
读写软件也都必须要支持这些数据块。
数据块符号 数据块名称 多数据块 可选否 位置限制 IHDR 文件头数据块 否 否 第一块 cHRM 基色和白色点数据块 否 是 在 PLTE 和 IDAT 之前 gAMA 图像γ数据块 否 是 在 PLTE 和 IDAT 之前 sBIT 样本有效位数据块 否 是 在 PLTE 和 IDAT 之前 PLTE 调色板数据块 否 是 在 IDAT 之前 bKGD 背景颜色数据块 否 是 在 PLTE 之后 IDAT 之前 hIST 图像直方图数据块 否 是 在 PLTE 之后 IDAT 之前 tRNS 图像透明数据块 否 是 在 PLTE 之后 IDAT 之前 oFFs (专用公共数据块) 否 是 在 IDAT 之前 pHYs 物理像素尺寸数据块 否 是 在 IDAT 之前 sCAL (专用公共数据块) 否 是 在 IDAT 之前 IDAT 图像数据块 是 否 与其他 IDAT 连续 tIME 图像最后修改时间数据块 否 是 无限制 tEXt 文本信息数据块 是 是 无限制 zTXt 压缩文本数据块 是 是 无限制 fRAc (专用公共数据块) 是 是 无限制 gIFg (专用公共数据块) 是 是 无限制 gIFt (专用公共数据块) 是 是 无限制 gIFx (专用公共数据块) 是 是 无限制 IEND 图像结束数据 否 否 最后一个数据块 -
每个数据块有4个部分构成
名称 字节数 说明 Length(长度) 4 字节 指定数据块中数据域的长度,其长度不超过(231-1)字节 Chunk Type Code(数据块类型码) 4 字节 数据块类型码由 ASCII 字母(A - Z 和 a - z)组成 Chunk Data(数据块数据) 可变长度 存储按照 Chunk Type Code 指定的数据 CRC(循环冗余检测) 4 字节 存储用来检测是否有错误的循环冗余码
- PNG 定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是标准的数据块,另一种叫做辅助数据块(ancillary
-
IHDR(文件头数据块)
-
包含PNG 文件中存储的图像数据的基本信息,由 13 字节组成,并要作为第一个数据块出现在 PNG 数据流中,而且一个 PNG 数据流中只能有一个文件头数据块
-
关注前8字节
域的名称 字节数 说明 Width 4 bytes 图像宽度,以像素为单位 Height 4 bytes 图像高度,以像素为单位
-
-
PLTE
- 调色板数据块 PLTE(palette chunk):它包含有与索引彩色图像(indexed-color image)相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data
chunk)之前。真彩色的 PNG 数据流也可以有调色板数据块,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。
- 调色板数据块 PLTE(palette chunk):它包含有与索引彩色图像(indexed-color image)相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data
-
IDAT
- 图像数据块 IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块
- 储存图像像数数据
- 在数据流中可包含多个连续顺序的图像数据块
- 采用 LZ77 算法的派生算法进行压缩
- 可以用 zlib 解压缩
- 图像数据块 IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块
-
IEND
-
图像结束数据 IEND(image trailer chunk):它用来标记 PNG 文件或者数据流已经结束,并且必须要放在文件的尾部
-
其余辅助模块
- 背景颜色数据块 bKGD(background color)
- 基色和白色度数据块 cHRM(primary chromaticities and white point),所谓白色度是指当
R=G=B=最大值
时在显示器上产生的白色度 - 图像 γ 数据块 gAMA(image gamma)
- 图像直方图数据块 hIST(image histogram)
- 物理像素尺寸数据块 pHYs(physical pixel dimensions)
- 样本有效位数据块 sBIT(significant bits)
- 文本信息数据块 tEXt(textual data)
- 图像最后修改时间数据块 tIME (image last-modification time)
- 图像透明数据块 tRNS (transparency)
- 压缩文本数据块 zTXt (compressed textual data)
-
LSB
- 全称 Least Significant Bit,最低有效位。PNG 文件中的图像像数一般是由 RGB 三原色(红绿蓝)组成,每一种颜色占用 8 位,取值范围为
0x00
至0xFF
,即有 256 种颜色,一共包含了 256 的 3 次方的颜色 - LSB 隐写就是修改 RGB 颜色分量的最低二进制位(LSB),每个颜色会有 8 bit,LSB 隐写就是修改了像数中的最低的 1 bit,而人类的眼睛不会注意到这前后的变化,每个像素可以携带 3 比特的信息。
- 全称 Least Significant Bit,最低有效位。PNG 文件中的图像像数一般是由 RGB 三原色(红绿蓝)组成,每一种颜色占用 8 位,取值范围为
JPG
-
JPEG 是有损压缩格式,将像素信息用 JPEG 保存成文件再读取出来,其中某些像素值会有少许变化。在保存时有个质量参数可在 0 至 100 之间选择,参数越大图片就越保真,但图片的体积也就越大。一般情况下选择 70 或 80 就足够了
-
JPEG 没有透明度信息,文件头为FF D8 FF E1,结尾 03 FF D9
-
JPG 基本数据结构为两大类型:「段」和经过压缩编码的图像数据。
名 称 字节数 数据 说明 段 标识 1 FF 每个新段的开始标识 段类型 1 类型编码(称作标记码) 段长 度 2 包括段内容和段长度本身, 不包括段标识和段类型 段内容 2 ≤65533 字节 -
有些段没有长度描述也没有内容,只有段标识和段类型。文件头和文件尾均属于这种段。
-
段与段之间无论有多少
FF
都是合法的,这些FF
称为「填充字节」,必须被忽略掉 -
常见段,
0xffd8
和0xffd9
为 JPG 文件的开始结束的标志。
-
GIF
-
文件结构
-
文件头
- GIF 文件署名(Signature)
- 版本号(Version)
-
数据流
- 控制标识符
- 图象块(Image Block)
- 其他的一些扩展块
-
文件终结器
-
-
文件头
-
GIF 署名(Signature)和版本号(Version)。GIF 署名用来确认一个文件是否是 GIF 格式的文件,这一部分由三个字符组成:
GIF
;文件版本号也是由三个字节组成,可以为87a
或89a
。 -
逻辑屏幕标识符
-
紧跟在 header 后面。这个块告诉 decoder(解码器)图片需要占用的空间。它的大小固定为 7 个字节,以 canvas width(画布宽度)和 canvas height(画布高度)开始。
-
全局颜色列表
- 或用于针对每个子图片集,提供 local color table。每个 color
table 由一个 RGB列表组成。
- 或用于针对每个子图片集,提供 local color table。每个 color
-
图像标识符
-
一个 GIF 文件一般包含多个图片。之前的图片渲染模式一般是将多个图片绘制到一个大的(virtual canvas)虚拟画布上,而现在一般将这些图片集用于实现动画。
每个 image 都以一个 image descriptor block(图像描述块)作为开头,这个块固定为 10 字节。
-
-
图像数据
-
由一系列的输出编码(output codes)构成,它们告诉 decoder(解码器)需要绘制在画布上的每个颜色信息。这些编码以字节码的形式组织在这个块中。
-
文件终结器
-
该块为一个单字段块,用来指示该数据流的结束。取固定值 0x3b.
-
更多参见 gif 格式图片详细解析
-
空间轴
-
由于 GIF 的动态特性,由一帧帧的图片构成,所以每一帧的图片,多帧图片间的结合,都成了隐藏信息的一种载体。
-
时间轴
- GIF 文件每一帧间的时间间隔也可以作为信息隐藏的载体。
流量包分析
- PCAP文件
- 流量包修复
- 协议分析
- 数据提取
步骤
- 总体把握
- 协议分级
- 端点统计
- 过滤赛选
- 过滤语法
- Host,Protocol,contains,特征值
- 发现异常
- 特殊字符串
- 协议某字段
- flag 位于服务器中
- 数据提取
- 字符串取
- 文件提取
PCAP文件修复
-
一般文件结构
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Block Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Block Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / Block Body / / /* variable length, aligned to 32 bits */ / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Block Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
常见块
-
Section Header BlocK(文件头)
-
文件的开始
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Byte-Order Magic (0x1A2B3C4D) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Major Version(主版本号) | Minor Version(次版本号) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | Section Length | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / / Options (variable) / / / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
Interface Description Block(接口描述)
-
描述接口特性
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | LinkType | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SnapLen(每个数据包最大字节数) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / / Options (variable) / / / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
Packet Block(数据块)
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Interface ID | Drops Count | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Timestamp (High) 标准的Unix格式 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Timestamp (Low) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Captured Len | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Packet Len | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / Packet Data / / /* variable length, aligned to 32 bits */ / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / Options (variable) / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
协议分析
wireshark
需要注意的协议
-
HTTP
HTTP
(Hyper Text Transfer Protocol
,也称为超文本传输协议) 是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP
是万维网的数据通信的基础。
-
HTTPS
HTTPs = HTTP + SSL / TLS
. 服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据
-
FTP
-
FTP
(File Transfer Protocol
,即文件传输协议) 是TCP/IP
协议组中的协议之一。FTP
协议包括两个组成部分,其一为FTP
服务器,其二为FTP
客户端。其中FTP
服务器用来存储文件,用户可以使用FTP
客户端通过FTP
协议访问位于FTP
服务器上的资源。在开发网站的时候,通常利用FTP
协议把网页或程序传到Web
服务器上。此外,由于FTP
传输效率非常高,在网络上传输大的文件时,一般也采用该协议。默认情况下
FTP
协议使用TCP
端口中的20
和21
这两个端口,其中20
用于传输数据,21
用于传输控制信息。但是,是否使用20
作为传输数据的端口与FTP
使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20
;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
-
-
DNS
-
DNS
通常为UDP
协议, 报文格式+-------------------------------+ | 报文头 | +-------------------------------+ | 问题 (向服务器提出的查询部分) | +-------------------------------+ | 回答 (服务器回复的资源记录) | +-------------------------------+ | 授权 (权威的资源记录) | +-------------------------------+ | 格外的 (格外的资源记录) | +-------------------------------+
-
查询包只有头部和问题两个部分,
DNS
收到查询包后,根据查询到的信息追加回答信息、授权机构、额外资源记录,并且修改了包头的相关标识再返回给客户端。每个
question
部分0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | / QNAME / / / +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | QTYPE | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | QCLASS | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
QNAME
:为查询的域名,是可变长的,编码格式为:将域名用. 号划分为多个部分,每个部分前面加上一个字节表示该部分的长度,最后加一个0
字节表示结束QTYPE
:占16
位,表示查询类型,共有16
种,常用值有:1
(A
记录,请求主机IP
地址)、2
(NS
,请求授权DNS
服务器)、5
(CNAME
别名查询)
-
-
WIFI
-
802.11
是现今无线局域网通用的标准, 常见认证方式- 不启用安全
WEP
WPA/WPA2-PSK
(预共享密钥)PA/WPA2 802.1X
(radius
认证)
-
WPA-PSK
- 4 次握手开始于验证器 (AP),它产生一个随机的值(ANonce) 发送给请求者
- 请求者也产生了它自己的随机 SNonce,然后用这两个 Nonces 以及 PMK 生成了 PTK。请求者回复消息 2 给验证器, 还有一个 MIC(message integrity code,消息验证码)作为 PMK 的验证
- 它先要验证请求者在消息 2 中发来的 MIC 等信息,验证成功后,如果需要就生成 GTK。然后发送消息 3
- 请求者收到消息 3,验证 MIC,安装密钥,发送消息 4,一个确认信息。验证器收到消息 4,验证 MIC,安装相同的密钥
-
-
USB
- 鼠标协议
鼠标移动时表现为连续性,与键盘击键的离散性不一样,不过实际上鼠标动作所产生的数据包也是离散的,毕竟计算机表现的连续性信息都是由大量离散信息构成的
每一个数据包的数据区有四个字节,第一个字节代表按键,当取 0x00 时,代表没有按键、为 0x01 时,代表按左键,为 0x02 时,代表当前按键为右键。第二个字节可以看成是一个 signed byte 类型,其最高位为符号位,当这个值为正时,代表鼠标水平右移多少像素,为负时,代表水平左移多少像素。第三个字节与第二字节类似,代表垂直上下移动的偏移。
得到这些点的信息后, 即可恢复出鼠标移动轨迹
- Tools
- UsbMiceDataHacker
- 键盘协议
键盘数据包的数据长度为 8 个字节,击键信息集中在第 3 个字节
一些工具和使用方法
16进制查看
010Editor: 16进制查看分析器
winhex:
解压密码
ARCHPR: 爆破rar文件解压密码
小技巧:假如密码为abc+三位数字,破解时选择掩码类型,掩码为abc???
,再把暴力范围设置为数字即可
ziperello :爆破zip文件解压密码
隐写
Stegsolve: 图片隐写分析
Stegdetect: 识别加密方式,主要是jpeg的隐写查看
pngcheck: png图像隐写查看
TweakPNG :查看和修改PNG文件的元信息(适用于文件头无法正常打开)
zsteg(kali) LSB隐写分析:把所有的最低位信息显示出来
wbstego: bmp,pdf等其他文件解密隐写
MP3Steno: 音频隐写读取
ntfsstreamseditor NTF:数据流检测和提取
加解密
Bftools:
- bftools.exe decode braincopter 要解密的图片名称 -o 要输出的文件名
- bftools.exe run 上一步输出的文件
jphs :jpeg图像的隐写,jphide的加密方式
outguess(kali): jpg 图像的隐写解密
使用格式:outguess -r 需要揭秘的文件名 输出结果文件名
F5 :一般用于解密文件信息
方法是cd到F5-steganography里面,然后调用
java Extract /root/Desktop/123456.jpg -p 123456
找到输出文件cat
即可
其他
Bcompare: 综合对比工具,包括文档,zip等
Cool-edit:音频文件查看编辑
jd-gui jar:文件反编译
Opanda: 图片信息查看器,元数据
Q-research: 二维码查看器,可反色
fireworks :编辑图像,比ps差一点
RouterPassView: 路由文件查看
file命令: 识别文件类型
binwalk :固件扫描分析:自动发掘文件中的隐藏文件
常用的命令
binwalk 文件名(可以用file查看)
提取文件 -e
Foremost: 文件还原工具 :基于文件文件头和尾部信息以及文件的内建数据结构恢复文件的命令行工具
crunch 创建字典
格式
crunch <min-len> <max-len> [<charset string>] [options]
-b 指定输出文件的大小 类型有效值为KB、MB、GB、KIB,MIB,和GIB。前三种类型是基于1000,而最后三种类型是基于1024,注意数字与类型之间没有空格
-c 指定输出文件的行数,即包含密码的个数
-d 限制出现相同元素的个数(至少出现元素个数)(“@”代表小写字母,“,”代表大写字符,“%”代表数字,“^”代表特殊字符)
-e 定义停止生产密码
-f 从某文件指定字符集,调用密码库文件
-i 改变输出格式
-o 输出文件名称
-q 读取某文件
-t 指定模式
aircrack-ng: 无线渗透工具破解wep,wpa-psk等加密
一些常见的套路
文件套路
文件类型不同
文件头错误
文件合并
压缩文件的处理
zip伪加密 :文件里有一位专门标识了文件是否加密
压缩源文件数据区:50 4B 03 04:这是头文件标记
压缩源文件目录区:
50 4B 01 02:目录中文件文件头标记
3F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(有无加密,这个更改这里进行伪加密,改为09 00打开就会提示有密码了)
操作方法就是搜索504B0102,从50开始第九个,奇数表示加密,偶数表示不加密
rar伪加密:由于头部有校验,使用伪加密打开文件会报错,这时可以尝试伪加密,16进制打开找到第24个字节(一般是7下第二个)尾数为4表示加密,0表示未加密
压缩源文件目录结束标志 :50 4B 05 06:目录结束标记
图片隐写
颜色差别
GIF多帧隐藏:颜色通道,对比隐写
Exif信息隐藏
图片修复:图片头,尾,CRC校验,长宽高修复
最低有效位LSB隐写
图片加密
附加式图片隐写
通常是用某种程序或者某种方法在载体文件中直接附加上需要被隐写的目标,然后将载体文件直接传输给接受者或者发布到网站上,然后接受者者根据方法提取出被隐写的消息,大致有两种经典方式,一是直接附加字符串,二是图种的形式出现。
-
附加字符串
大致操作
-
打开图片确认图片是否异常
-
使用strings检查图片
附上strings的使用大致方法
strings命令在对象文件或二进制文件中查找可打印的字符串。字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束。 strings命令对识别随机对象文件很有用。
选项:
-
-a --all:扫描整个文件而不是只扫描目标文件初始化和装载段
-
-f –print-file-name:在显示字符串前先显示文件名
-
-t --radix={o,d,x} :输出字符的位置,基于八进制,十进制或者十六进制
-
-e --encoding={s,S,b,l,B,L} :选择字符大小和排列顺序:s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit
-
-
当然可以直接使用如winhex,010editor直接打开图片查看 ps:这个好像更简单!
-
-
图种
一种采用特殊方式将图片文件(如jpg格式)与rar文件结合起来的文件。该文件一般保存为jpg格式,可以正常显示图片,当有人获取该图片后,可以修改文件的后缀名,将图片改为rar压缩文件,并得到其中的数据。
图种这是一种以图片文件为载体,通常为jpg格式的图片,然后将zip等压缩包文件附加在图片文件后面。因为操作系统识别的过程中是,从文件头标志,到文件的结束标志位,当系统识别到图片的结束标志位后,默认是不再继续识别的,所以我们在通常情况下只能看到它是只是一张图片。方法就是
先用file命令或者binwalk查看一波图片是不是纯图片
然后可以用binwalk -e或者foremost 来分离图种,也可以直接修改后缀
来个可能没怎么用到的方法 winhex
补充一个zip文件头 50 4B 03 04
先用它打开图片,然后找到这个文件头,从它开始到结尾的数据复制下来,到一个新文件,然后命名为zip格式即可!
基于文件结构的隐写
文件结构特指的是图片文件的文件结构,这里特别提一下PNG,尤其要掌握的是文件头数据块即IHDR块:包含宽,高,深度,颜色类型,压缩方法等,还有IDAT数据块,存储实际的数据,转义他可以存在多个,多以个对图片影响不大
-
宽度高度的修改的隐写
修改高度或者宽度
计算crc校验
-
隐写信息以IDAT块加入图片
利用pngcheck检查
pngcheck -v
LSB隐写
LSB,最低有效位,英文是Least Significant Bit
。我们知道图像像素一般是由RGB三原色(即红绿蓝)组成的,每一种颜色占用8位,0x00~0xFF,即一共有256种颜色,一共包含了256的3次方的颜色,颜色太多,而人的肉眼能区分的只有其中一小部分,这导致了当我们修改RGB颜色分量种最低的二进制位的时候,我们的肉眼是区分不出来的。
法宝就是stegsolve,zsteg!!!
简单一点儿的,直接切换通道就可以看到,复杂的需要提取
DCT域的JPG图片隐写
JPEG图像格式使用离散余弦变换(Discrete Cosine
Transform,DCT)函数来压缩图像,而这个图像压缩方法的核心是:通过识别每个8×8像素块中相邻像素中的重复像素来减少显示图像所需的位数,并使用近似估算法降低其冗余度。因此,我们可以把DCT看作一个用于执行压缩的近似计算方法。因为丢失了部分数据,所以DCT是一种有损压缩(Loss
Compression)技术,但一般不会影响图像的视觉效果。
常见的隐写方法有JSteg、JPHide、Outguess、F5
敲黑板!!!重点工具来了
Stegdetect
通过统计分析技术评估JPEG文件的DCT频率系数
-q 仅显示可能包含隐藏内容的图像。
-n 启用检查JPEG文件头功能,以降低误报率。如果启用,所有带有批注区域的文件将被视为没有被嵌入信息。如果JPEG文件的JFIF标识符中的版本号不是1.1,则禁用OutGuess检测。
-s 修改检测算法的敏感度,该值的默认值为1。检测结果的匹配度与检测算法的敏感度成正比,算法敏感度的值越大,检测出的可疑文件包含敏感信息的可能性越大。
-d 打印带行号的调试信息。
-t 设置要检测哪些隐写工具(默认检测jopi),可设置的选项如下:
j 检测图像中的信息是否是用jsteg嵌入的。
o 检测图像中的信息是否是用outguess嵌入的。
p 检测图像中的信息是否是用jphide嵌入的。
i 检测图像中的信息是否是用invisible secrets嵌入的。
-V 显示软件版本号。
如果检测结果显示该文件可能包含隐藏信息,那么Stegdetect会在检测结果后面使用1~3颗星来标识
隐藏信息存在的可能性大小,3颗星表示隐藏信息存在的可能性最大。
数字水印隐写
数字水印(digital watermark)技术,是指在数字化的数据内容中嵌入不明显的记号。
特征是,被嵌入的记号通常是不可见或不可察的,但是可以通过计算操作检测或者提取。
图片容差隐写
压缩方法的核心是:通过识别每个8×8像素块中相邻像素中的重复像素来减少显示图像所需的位数,并使用近似估算法降低其冗余度。因此,我们可以把DCT看作一个用于执行压缩的近似计算方法。因为丢失了部分数据,所以DCT是一种有损压缩(Loss
Compression)技术,但一般不会影响图像的视觉效果。
常见的隐写方法有JSteg、JPHide、Outguess、F5
敲黑板!!!重点工具来了
Stegdetect
通过统计分析技术评估JPEG文件的DCT频率系数
-q 仅显示可能包含隐藏内容的图像。
-n 启用检查JPEG文件头功能,以降低误报率。如果启用,所有带有批注区域的文件将被视为没有被嵌入信息。如果JPEG文件的JFIF标识符中的版本号不是1.1,则禁用OutGuess检测。
-s 修改检测算法的敏感度,该值的默认值为1。检测结果的匹配度与检测算法的敏感度成正比,算法敏感度的值越大,检测出的可疑文件包含敏感信息的可能性越大。
-d 打印带行号的调试信息。
-t 设置要检测哪些隐写工具(默认检测jopi),可设置的选项如下:
j 检测图像中的信息是否是用jsteg嵌入的。
o 检测图像中的信息是否是用outguess嵌入的。
p 检测图像中的信息是否是用jphide嵌入的。
i 检测图像中的信息是否是用invisible secrets嵌入的。
-V 显示软件版本号。
如果检测结果显示该文件可能包含隐藏信息,那么Stegdetect会在检测结果后面使用1~3颗星来标识
隐藏信息存在的可能性大小,3颗星表示隐藏信息存在的可能性最大。
数字水印隐写
数字水印(digital watermark)技术,是指在数字化的数据内容中嵌入不明显的记号。
特征是,被嵌入的记号通常是不可见或不可察的,但是可以通过计算操作检测或者提取。
图片容差隐写
容差,在选取颜色时所设置的选取范围,容差越大,选取的范围也越大,其数值是在0-255之间。