网信柏鹭杯WP

  |  

文章导航

研二网信柏鹭杯比赛WP(菜)

网信柏鹭杯WP

BY 飞飞战队

加解密

crypto1 混合编码

题目密码:

1
4d7a637a5a444d794d7a6730597a63344d6a51334e4463794e574d7a5a5463774d6a63304f5452694d6a457a4d44597a4e7a417a4e5449324e445579596a59324d324d304d5451304d7a4133597a4d334d7a51324d6a5a6d4e3251324e4451784d3259794e4463334e4455324f4449794e4755253344

观察密码结构,发现数字为0-9,字母为a-f,猜测是16进制hex编码

解码结果为:

1
MzczZDMyMzg0Yzc4MjQ3NDcyNWMzZTcwMjc0OTRiMjEzMDYzNzAzNTI2NDUyYjY2M2M0MTQ0MzA3YzM3MzQ2MjZmN2Q2NDQxM2YyNDc3NDU2ODIyNGU%3D

结尾出现了%3D,这在url编码中代表=,这让我想起了base64

先用url解码将最后的%3D换成=,再用base64解码:

1
373d32384c782474725c3e7027494b213063703526452b663c4144307c3734626f7d64413f24774568224e

又是16进制hex编码的结构,再次使用hex进行解码:

1
7=28Lx$tr\>p'IK!0cp5&E+f<AD0|74bo}dA?$wEh"N

全过程如下:

这又是一串乱码,观察到7=28的ASCII码值为:55、61、50、56

而flag的标准格式:flag{--内容}前4个字符flag的ASCII码值为:102、108、97、103

不难发现它们相差47,于是进行编码:

1
2
3
4
5
orig = '7=28Lx$tr\\>p\'IK!0cp5&E+f<AD0|74bo}dA?$wEh\"N'
val = ''
for ch in orig:
val += chr((128 + ord(ch) + 47) % 128)
print(val)

结果为:

1
flag{(S$"m VxzP_ dUtZkps_,fc-pnS'tQ}

存在乱码字符,进一步观察发现,所有密文ASCII值+47大于127的字符,转换前的字符ASCII值应当减47,并不是一味地加47,于是修改编码:

1
2
3
4
5
6
7
8
orig = '7=28Lx$tr\\>p\'IK!0cp5&E+f<AD0|74bo}dA?$wEh\"N'
val = ''
for ch in orig:
if ord(ch) + 47 > 127:
val += chr(ord(ch) - 47)
else:
val += chr(ord(ch) + 47)
print(val)

得到falg:

1
flag{ISEC-mAVxzP_4AdUtZ7kps_Mfc3@N5pnSHt9Q}

crypto2 RSA

题目:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from Crypto.Util.number import isPrime, getStrongPrime
from gmpy2 import next_prime
from secret import flag2

p = getStrongPrime(1024)
q = next_prime(p ^ ((1<<1024)-1))
n = p * q
e = 65537

# Encryption
m = int(flag2.encode('hex'),16)
assert m < n
c = pow(m, e, n)

print('n = {}'.format(hex(n)))
#n = 0x31e22a7a2c5ec946692357dc51014a80530afeb46f419831fcbd896aa1d5cee2d0c69123b3017067afdb3d82b2be3535aebdf11da0fa2b4873233bae6af8a1c2a9344b6f64ade1c6c48a2828130c352053e1729b850774589e8947c8c0a472a8dc90caa542da5cec7f5fa7581747dcb558300437c30b016f769d4a85af8584f311dfb2f9e87fa7d16eaccb0303ecba491619ec7dda72e4037d96c607e666eced582d6eb2c232689fce1c08a54b80cf6d39ef1f2b467d970998c6d54d1779979c89a3b301cd1435bde8787d1141c912cf32b56610fba9205c6e86fefc490c8b2e06f5ed9f775f5b0fe945fa9fca3fc217b4c9dcd4b26676f576d0273b79417b81

print('c = {}'.format(hex(c)))
#c = 0x118dd8ab5df8685c5db5b1242896df41e8e9016f5f16276b6d311b29f0e5f9315530574b51c6e7c82d0c88ab92787d639443b921a452c850db580256ccfd55ee52ea9732821525da1d21351acb230a799ecaa1802c6f24487176c9cae537c3188e083552a84a2aebdd55c4014b41846768d7608970c1e52d9a68e550ef8bb6016adb6f8e0672e1c8198a5442799a5b8142e8d0fadb6e6146a062ef906bd58c46f31bf65263b6142b1976773289dee408ae233b6c0c534dd5092bd7f331c3457971278d335923edc044ba88852680ee39d1cc84a66dc81b70039e2435892b11f310b490c872448f7a8dc718759b2052b0911f758102a59c54dea061a8a3ff6879

RSA密码题,直接使用爆破的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from Crypto.Util.number import *
import gmpy2
n = 0x31e22a7a2c5ec946692357dc51014a80530afeb46f419831fcbd896aa1d5cee2d0c69123b3017067afdb3d82b2be3535aebdf11da0fa2b4873233bae6af8a1c2a9344b6f64ade1c6c48a2828130c352053e1729b850774589e8947c8c0a472a8dc90caa542da5cec7f5fa7581747dcb558300437c30b016f769d4a85af8584f311dfb2f9e87fa7d16eaccb0303ecba491619ec7dda72e4037d96c607e666eced582d6eb2c232689fce1c08a54b80cf6d39ef1f2b467d970998c6d54d1779979c89a3b301cd1435bde8787d1141c912cf32b56610fba9205c6e86fefc490c8b2e06f5ed9f775f5b0fe945fa9fca3fc217b4c9dcd4b26676f576d0273b79417b81
c = 0x118dd8ab5df8685c5db5b1242896df41e8e9016f5f16276b6d311b29f0e5f9315530574b51c6e7c82d0c88ab92787d639443b921a452c850db580256ccfd55ee52ea9732821525da1d21351acb230a799ecaa1802c6f24487176c9cae537c3188e083552a84a2aebdd55c4014b41846768d7608970c1e52d9a68e550ef8bb6016adb6f8e0672e1c8198a5442799a5b8142e8d0fadb6e6146a062ef906bd58c46f31bf65263b6142b1976773289dee408ae233b6c0c534dd5092bd7f331c3457971278d335923edc044ba88852680ee39d1cc84a66dc81b70039e2435892b11f310b490c872448f7a8dc718759b2052b0911f758102a59c54dea061a8a3ff6879
e=65537
for r in range(100000):
t1=(1<<1024)-1+r
t2,s=gmpy2.iroot(t1**2-4*n,2)
if s:
p=(t1+t2)//2
q=n//p
d=gmpy2.invert(e,(p-1)*(q-1))
print(long_to_bytes(pow(c,d,n)))
break

得到flag:

1
flag{ISEC-OyGdWk_E3gTcPtWUn_OaqD@d76xHyse1}

杂项

第一题

题目:

1
Ak_TZh+&:.]v)W.*@DSiR5\W#fR,q2G+<,]vin4Q\XX}?<UrJw;aG3^u[|m'AxJ@?Y1ksf0;mN

通过观察发现密码结构比较像base92,于是尝试破解:

结果为:

1
ZmxhZ3tJU0VDLVdlbGM0ODkyM0JES2ZiZjN1M2ptbHZqZjNiMkNVT1gyfQ==

结尾带=,自然而然想到base64编码,尝试求解:

得到flag:

1
flag{ISEC-Welc48923BDKfbf3u3jmlvjf3b2CUOX2}
本站总访问量 您是第位访客