Web

Warmup

image-20200314234129826

Crypto

Paillier的考试

查了查Paillier同态加密算法

image-20200316185256150

试了试这个快速生成密钥是错的。。。必须得手动算

好在伟大GOOGLE

直接算lambda和miu就可以得出结果

image-20200316185444504

首先得到pq,然后顺水推舟了

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
26
27
from Crypto.Util.number import *
from gmpy2 import *
n=72156014420789532146586397821551205969075843918167356511004891479703383491187
g=72156014420789532146586397821551205969075843918167356511004891479703383491188
c=64549102062133939817740021344339874022248163187514102002141895015269919972659695585161800619051689227658586595702151422601388244073884578208627050436072
p=243428489274999389995836457481326347391
q=296415652234013614556900345949176018957

def L(a):
return (a - 1) // n

lam = gmpy2.lcm(p-1, q-1)

def findModReverse(a,m):#这个扩展欧几里得算法求模逆
if gmpy2.gcd(a,m)!=1:
return None
u1,u2,u3 = 1,0,a
v1,v2,v3 = 0,1,m
while v3!=0:
q = u3//v3
v1,v2,v3,u1,u2,u3 = (u1-q*v1),(u2-q*v2),(u3-q*v3),v1,v2,v3
return u1%m

miu = findModReverse(L(pow(g, lam, n**2)), n)
m = L(pow(c, lam, n**2))*miu%n
flag = long_to_bytes(m)
print(flag) #b'tjuCTF{th1s_1s_p1ll1er_ex@ms}'

Misc

ASCII&BIN

知识点:二进制ASCII码

image-20200314234426575

二进制ASCII码

image-20200314234402125

根据提示 56/8 = 7

可读的ASCII码都是0开头,补零(如果直接转问题不大)

image-20200315000209827

crc

知识点:png图片crc参数修改

下载后是png的一张图

mac能打开,linux不能打开,判断是参数破坏,010editor打开

参考文档:https://blog.csdn.net/joqian/article/details/8290389

image-20200315001252812

129cb69b就是crc,跑python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/python

# coding: utf-8
import os
import binascii
import struct


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

for i in range(1024):
for j in range(1024):
data = misc[12:16] + struct.pack('>i',i) + struct.pack('>i', j) + misc[24:29]
crc32 = binascii.crc32(data) & 0xffffffff
if crc32 == 0x129cb69b:
print hex(i), hex(j)

得到 i = 0x1c7 j = 0x175

image-20200315001328319

改写后保存即得flag

image-20200315001353583

霍乱时期的CTF

知识点:zip 明文攻击 docx隐写

下载后是一个压缩包

image-20200315001729665

有一个未加密text.txt大小相同,可以利用明文攻击

“已知明文攻击”的概念和原理

我们为zip压缩文件所设定的密码,首先被转换成3个32bit的key,所以可能的key的组合是2^96,这是个天文数字,如果用暴力穷举的方式是不太可能的,除非你的密码比较短或者有个厉害的字典。压缩软件用这3个key加密所有包中的文件,也就是说,所有文件的key是一样的,如果我们能够找到这个key,就能解开所有的文件。如果我们找到加密压缩包中的任意一个文件,这个文件和压缩包里的文件是一样的,我们把这个文件用同样的压缩软件同样的压缩方式进行无密码的压缩,得到的文件就是我们的Known plaintext(已知明文)。用这个无密码的压缩包和有密码的压缩包进行比较,分析两个包中相同的那个文件,抽取出两个文件的不同点,就是那3个key了,如此就能得到key。两个相同文件在压缩包中的字节数应该相差12个byte,就是那3个key了。虽然我们还是无法通过这个key还原出密码,但是我们已经可以用这个key解开所有的文件,所以已经满足我们的要求了,毕竟对我们而言,得到解压后的文件比得到密码本身更重要。

拉出来发现txt里是7z的介绍

image-20200315001946365

那么直接用7z压缩txt(不加密),用AZPR进行明文攻击

image-20200315002134084

image-20200315002059069

几分钟后停止就破解成功了。。。我等了一个小时以为解不完

然后会让你保存一个新的zip,解压那一个就得到了docx文件

image-20200315002252626

打开后发现是霍乱时期的爱情。。。没看到flag,工具选项里勾选上隐藏文字,在文末发现了莫斯密码

image-20200315002358688

image-20200315002410535

Reverse

baby_re

知识点:读代码 动态调试

image-20200315002703216

拖到kali里面,运行,是输入一个什么东西

ida打开ELF

image-20200315002738622

是明文比较,直接动态调试(懒得读代码),网上教程很多~(这可比安卓的简单些)

到断点后在debugger的view里打开locals

image-20200315003223945

base

知识点:字符串查找,base64

法1:动态调试image-20200315003628291

法2:shift + F12打开字符串面板

image-20200315003713751

看到base64密钥和密文,但是密钥是63位的根据规律是qwer4连,前添一个Q,得到flag

image-20200315003858681

maze

知识点:迷宫 读代码

image-20200315004013413

发现一些条件,最后符合条件才能胜利

image-20200315004048396

int ar[] = {11, 13, 14, 15, 21, 23, 25, 26, 27, 28, 31, 32, 33};

v4开始是11最后是28,这算是很简单的迷宫了,而且根据条件,v4不会-1,如果v7等于0就-10,等于1就+1,其他就是+10,直接看出来是“xx110011x111”但是不知道x是什么,在程序里x可以随便输都能过关,去提交了几遍发现就是2

得到flag: tjuCTF{221100112111}