假期CTF学习记录

Crypto:

一、模运算

  • 二项式定理
$$ (x+y)^n=(^n_0)x^ny^0+(^n_1)x^{n-1}y^1+...+(^n_{n-1})x^1y^{n-1}+(^n_n)x^0y^n $$

针对RSA:$N=p*q$

$x=(ap+bq)^n=(ap)^n+(bq)^n \mod n$

二、AES

Python中的简单实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#实现AES
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad


key = b'\xc3,\\\xa6\xb5\x80^\x0c\xdb\x8d\xa5z*\xb6\xfe\\'
ciphertext =0x61646d696e3d54727565303030303030#b'\xd1O\x14j\xa4+O\xb6\xa1\xc4\x08B)\x8f\x12\xdd'
iv=0x8b14b5d74ac2c280b443bbbed84ea8c2
#填充
#padded_data = pad(data, AES.block_size)


decipher=AES.new(key,AES.MODE_CBC,iv)
plaintext=decipher.decrypt(ciphertext)

print(plaintext)

""" # 解密需要使用相同的密钥和初始化向量 (IV)
iv = cipher.iv # 加密时生成的IV

# 创建解密器
decipher = AES.new(key, AES.MODE_CBC, iv)

# 解密
decrypted_data = unpad(decipher.decrypt(ciphertext), AES.block_size) """

三、工作模式(CBC,ECB,OFB,CFB,CTR)

  • ECB不需要IV,需要短块处理

  • CBC需要短块处理

  • OFB,CFB,CTR是把明文转成密钥流与明文异或进行加密,因此没有短块问题

MISC:

一、图片题

  • LSB隐写

1、 利用Stegsolve低位通道解决

2、 带密码的LSB隐写: 在kali中使用cloacked-pixel中分离出隐藏信息,命令如下:

1
python2 lsb.py extract xxx.png 1.txt 123456
  • 隐含文件,利用binwalk查看是否存在隐含文件,再利用dd指令或forecast指令来分离出隐藏的文件

  • 另一种图片隐含文件,利用steghide分离隐藏的文件

1
$ steghide extract -sf xx.jpg
  • exif隐写,在kali中使用exiftool工具提取隐藏信息

  • F5隐写,kali环境中使用F5-steganography-master

  • CRC校验(有可能出现zlib),在010Editor中找到CRC,使用脚本计算正确的宽度高度

  • gif动图:

一、47 49 46 38开头

二、放进Stegsolve中提取每帧动画

二、流量分析

  • 利用WireShark分析流量包,再对详细数据进行过滤

http POST/GET 等

  • 分析关于TCP的流量包,使用WireShark中的TCP流量追踪

  • 寻找用户密码,需要找到**.dmp**文件名

(*dmp文件是windows系统中的错误转储文件,当Windows发生错误蓝屏的时候,系统将当前内存【含虚拟内存】中的数据直接写到文件中去,方便定位故障原因。)

(*里面包含主机用户密码信息)

  • 对于USB流量包,使用UsbKeyboardDataHacker脚本提取内容
1
python UsbKeyboardDataHacker.py --input xxx.pcap
  • 宽带数据泄露,使用RoutePassView查找用户名或密码

三、压缩文件

  • 密码爆破

Kali中:使用fcrackzip工具(ZIP压缩文件)

1
fcrackzip -b -c 1 -l 4-5 -u xxx.png  

Windows中:使用ARCHPR工具(ZIP,RAR等压缩文件)

  • CRC爆破:

使用py脚本爆破

  • 伪加密(ZIP):

a.压缩源文件数据区:

50 4B 03 04:这是头文件标记(0x04034b50)
14 00:解压文件所需 pkware 版本
09 00:全局方式位标记 (有无加密
08 00:压缩方式
50 A3:最后修改文件时间
A5 4A:最后修改文件日期
21 38 76 64:CRC-32校验(1480B516)
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
08 00:文件名长度
00 00:扩展记录长度

b.压缩源文件目录区:

50 4B 01 02:目录中文件文件头标记(0x02014b50)
1F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
09 00:全局方式位标记(是否是加密
08 00:压缩方式
50 A3:最后修改文件时间
A5 4A:最后修改文件日期
21 38 76 65:CRC-32校验(1480B516)
19 00 00 00:压缩后尺寸(25)
17 00 00 00:未压缩尺寸(23)
08 00:文件名长度
24 00:扩展字段长度
00 00:文件注释长度
00 00:磁盘开始号
00 00:内部文件属性
20 00 00 00:外部文件属性
00 00 00 00:局部头部偏移量

c.压缩源文件目录结束标志:

50 4B 05 06:目录结束标记
00 00:当前磁盘编号
00 00:目录区开始磁盘编号
01 00:本磁盘上纪录总数
01 00:目录区中纪录总数
5A 00 00 00:目录区尺寸大小
3F 00 00 00:目录区对第一张磁盘的偏移量
00 00 00:ZIP 文件注释长度

  • 伪加密(RAR)

结构如下
RAR 5.0签名由8个字节组成:
0x52 0x61 0x72 0x21 0x1A 0x07 0x01 0x00
比较一下
RAR 4.x 签名由7字节组成:
0x52 0x61 0x72 0x21 0x1A 0x07 0x00

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
D5 56 :HEAD_CRC,2字节,也就是文件头部分的crc校验值
74 :HEAD_TYPE,1字节,块类型,74表示块类型是文件头
20 90 :HEAD_FLAGS,2字节,位标记,这块在资料上没找到对应的数值,不知道20 90代表什么意思。
2D 00 :HEAD_SIZE,2字节,文件头的全部大小(包含文件名和注释)
10 00 00 00 :PACK_SIZE,4字节,已压缩文件大小
10 00 00 00 :UNP_SIZE,4字节,未压缩文件大小
02:HOST_OS,1字节,保存压缩文件使用的操作系统,02代表windows
C7 88 67 36:FILE_CRC,4字节,文件的CRC值
6D BB 4E 4B :FTIME,4字节,MS DOS 标准格式的日期和时间
1D:UNP_VER,1字节,解压文件所需要的最低RAR版本
30:METHOD,1字节,压缩方式,这里是存储压缩
08 00 :NAME_SIZE,2字节,表示文件名大小,这里文件名大小是8字节(flag.txt)
20 00 00 00 :ATTR,4字节,表示文件属性这里是txt文件
66 6C 61 67 2E 74 78 74:FILE_NAME(文件名) ,NAME_SIZE字节大小,这里NAME_SIZE大小为8
再往后是txt文件内容,一直到第六行 65 结束,下面是另一个文件块的开始

这个块中存在两个crc值,一个是文件头块中从块类型到文件名这38个字节的校验,后一个则是压缩包中所包含文件的crc校验,解压时,会计算解压后生成文件的crc值,如果等于这里的crc,则解压完成,如果不同,则报错中断。
  1. 找到第24个字节,该字节尾数为4表

  2. 示加密,0表示无加密,将尾数改为0即可破解伪加密.

四、音频题

  • MAV等音频文件放入Audacity中分析,如摩斯电码

  • MAV等音频文件放入dtmf2num中分析(电话数字号码),代码如下:

1
./dtmf2num.exe girlfriend.wav

五、文档题

  • Txt文档ntfs隐写

1】在隐写文档的目录下打开cmd命令行,输入:

1
notepad 1.txt:flag.txt

2】在ntfsstreamseditor中扫描,尽量使用Winrar解压

出现pyc文件的话:使用uncompyle反汇编

1
uncompyle6 xxx.pyc > main.py

在线工具反编译

  • Docx文档隐写:在文件->选项->显示->选中显示隐藏文字

六、视频题

  • 使用Kinovea打开视频文件(要求视频文件的路径上没有中文),进行每帧分析

七、镜像文件

  • Kali中用Foremost分离

总结

很可惜,寒假里总是有种种不可避免的事,因此学到的内容有限,但我也有很多收获,只能说,2025继续努力!!


假期CTF学习记录
http://ramoor.github.io/2025/01/15/假期CTF学习笔记/
作者
Ramoor
发布于
2025年1月15日
许可协议