小科普《常见文件类型的文件头尾》

小科普《常见文件类型的文件头尾》

文件头是识别文件类型的核心依据,但其安全性依赖于开发者对输入内容的严格校验。在 CTF 竞赛或渗透测试中,文件头伪造(如将 PHP 文件伪装为 GIF)是常见攻击手法,需结合文件头和内容双重验证。以下是常见文件类型的文件头及文件尾的详细总结,结合技术规范与安全实践,整理自多个权威来源:

一、图片类文件

JPEG/JPG

文件头:FF D8 FF(可能包含扩展如 FF D8 FF E0/E1/E2/E8)文件尾:FF D9特点:以 JFIF 或 Exif 标识符开头,常用于压缩图像。 PNG

文件头:89 50 4E 47 0D 0A 1A 0A(ASCII为 ‰PNG\r\n^Z\n)文件尾:AE 42 60 82特点:包含无损压缩数据,支持透明通道。 GIF

文件头:47 49 46 38 39 61(ASCII为 GIF89a)或 47 49 46 38 37 61(GIF87a)文件尾:00 3B安全风险:GIF89a 允许嵌入脚本或跳转链接,可能用于欺骗攻击(如将恶意代码伪装成图片)。 BMP

文件头:42 4D(ASCII为 BM)特点:无压缩位图格式,文件较大。

二、文档类文件

PDF

文件头:25 50 44 46 2D 31 2E(ASCII为 %PDF-1.)特点:支持富文本与矢量图形,常用于跨平台文档。 Microsoft Office

Word/Excel (DOC/XLS):D0 CF 11 E0Access (MDB):53 74 61 6E 64 61 72 64 20 4A(ASCII为 Standard J)PowerPoint (PPT):与 DOC/XLS 共享相似二进制头。 RTF

文件头:7B 5C 72 74 66(ASCII为 {\rtf)特点:富文本格式,支持跨编辑器兼容。

三、压缩包类文件

ZIP

文件头:50 4B 03 04文件尾:50 4B扩展:支持分卷压缩(如 50 4B 07 08)。 RAR

文件头:52 61 72 21(ASCII为 Rar!)特点:专有压缩格式,支持加密。

四、音频与视频类文件

WAV

文件头:57 41 56 45(ASCII为 WAVE)结构:包含 RIFF 块标识(52 49 46 46)。 MP3

文件头:49 44 33(ASCII为 ID3)或帧同步信号 `FF FB。 AVI

文件头:41 56 49 20(ASCII为 AVI )结构:基于 RIFF 容器格式。

五、安全应用与检测

文件头校验

防御伪造:通过读取文件前几个字节校验类型(如使用 hexdump 或代码检测),防止恶意文件绕过后缀名检查。代码示例(Python): def check_file_type(file_stream):

header = file_stream[0:4].hex().upper()

if header.startswith("FFD8FF"): return "JPEG"

if header.startswith("89504E47"): return "PNG"

if header.startswith("47494638"): return "GIF"

# 其他类型检测...

GIF89a 欺骗案例

攻击者可能插入