CTF杂项

CTF杂项:解密、分析与隐写技巧

Wireshark获取加密密文,私钥进行解密

from Crypto.PublicKey import RSA
from Crypto.Util.number import long_to_bytes
import binascii

# 读取私钥
with open('pri.pem', 'r') as f:
    pri_key = RSA.import_key(f.read())

n = pri_key.n  # 模数
d = pri_key.d  # 私钥指数

# 读取密文并转换为整数
with open('key.txt', 'rb') as f:
    ciphertext_bytes = f.read()
    ciphertext_hex = binascii.hexlify(ciphertext_bytes)  # 转十六进制
    c = int(ciphertext_hex, 16)  # 转整数

# RSA 解密:明文 m = c^d mod n
m = pow(c, d, n)

# 将解密后的整数转换为原始字节,再解码为字符串
plaintext = long_to_bytes(m)

# 输出明文(假设是 UTF-8 编码的文本)
print(plaintext.decode('utf-8'))

Tshark工具对wireshark流量进行过滤。

键盘流量分析

USB流量分为键盘流量和鼠标流量

键盘数据长度为8个字节,击键信息在第三个字节。

可以用Tshark命令将capture data进行提取

tshark  -r  流量包  -T  fields  -e  usb.capdata  >usb.tata

mappings = {
    # 字母键 (A-Z)
    0x04: "A", 0x05: "B", 0x06: "C", 0x07: "D", 0x08: "E", 0x09: "F",
    0x0A: "G", 0x0B: "H", 0x0C: "I", 0x0D: "J", 0x0E: "K", 0x0F: "L",
    0x10: "M", 0x11: "N", 0x12: "O", 0x13: "P", 0x14: "Q", 0x15: "R",
    0x16: "S", 0x17: "T", 0x18: "U", 0x19: "V", 0x1A: "W", 0x1B: "X",
    0x1C: "Y", 0x1D: "Z",
    
    # 数字键 (1-0)
    0x1E: "1", 0x1F: "2", 0x20: "3", 0x21: "4", 0x22: "5",
    0x23: "6", 0x24: "7", 0x25: "8", 0x26: "9", 0x27: "0",0x4C: "[DEL]","default": "[UNKNOWN]"}
keyhex =[]
with open('2.txt','r') as f:
    for x in f.readlines():
    keyhex.append(int(x.split(':')[2],16))
passwd = ''
for x in keyhex:
    if x in mappings:
        passwd += mappings[x]
print passwd

使用上面python代码提取密码(只留数字就行)

ZIP相关内容讲解

每个压缩文件都由文件头,文件数据,数据描述符三个部分组成。

ZIP伪加密

(在hex里搜索第二个加密包50 4b 03 04后面的09 00 改为00 00 即可。)

ZIP暴力破解

ARCHPR工具

密码暴力破解

明文攻击

(前提手里有原压缩包文件和压缩包内部分文件,利用明文压缩包的CRC32是否和加密文件的一致,来使用明文攻击)

CRC32爆破

crc32本身是冗余效验码的意思,利用数据块中每一位发生改变都会得到不同的crc32值,利用这个原理爆破加密文件的内容。https://github.com/theonlypwner/crc32

图片隐写

png由固定文件头+数据块组成

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

图片大小显示不全

图片追加内容

介绍两张图片合并,图片尾追加文件,图片尾追加文字。

元数据隐藏

元数据隐藏信息一种常见手法,隐藏一些Hint信息或重要信息如passwd。可以右键属性查看。

IDAT隐藏

在数据存储中,在数据流中可包含多个连续顺序的图像数据块。IDAT块只有当上一个块充满时才会进行下一个块。采用LZ77算法进行压缩,用zlib解压缩。可以使用stegsolve->Format analysis.

对拿到的hex数据进行去除空格,用下面代码转换成二进制数据。

import zlib

a='hex隐藏的数据'.decode(hex)
print zlib.decompress(a)

#拿到二进制数据

将二进制数据转换成二维码。

import Image
img = Image.new('RGB',(25,25))
col = '二进制数据'

i=0
for y in xrange(0,25):
    for x in xrange(0,25):
        if(col[i]=='1'):
            img.putpixel([x,y],(0,0,0))
        else:
            img.putpixel([x,y],(255,255,255))
        i = i+1

img.show()

LSB隐藏

lsb又称最低有效位,利用人眼无法识别所有颜色,每个像素可以携带3bit信息,来隐藏。

第二种最低位隐藏,可以看到是个压缩文件。

GIF隐藏

单张图片中有隐藏信息,也可能是图片播放时间本身携带信息,也可以使用identify命令去拆解GIF。

单张图片隐藏可用PS打开查看。

若文件打不开注意文件头有没有,如果没有可以插入文件头。

时间隐藏

根据提取出的时间,看起来像二进制,替换成二进制,然后解码成16进制出结果。

NTFS流隐写

类似LSB隐藏,利用RGB图片不同排序查看隐藏内容。

其他如pyc或pyo隐藏反编译,识图,社工等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火星9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值