misk

[Week 1] SignIn

basecrack

0xGame{Welc0me_To_0xGame2023!!}

[Week 1] 重生之我在教学楼打cs

cs 地图 这两个关键词一搜,出来的结果,让我得知:bsp文件是cs的地图文件,可以用bsp viewer查看:image-20231002163547955

[Week 1] least and most

zsteg一下:得到前半部分 0xGame{lsb_com

least让人联想到:Least Significant Bit,即:lsb

lsb试一下:image-20231002160051985

most让人联想到msb

bined_wi th_msb}

image-20231002160318671

连起来:0xGame{lsb_combined_with_msb}

[Week 1] another signin

区块链攻击:教程:https://hak5.com.cn/post/1203.html

[Week 1] shark shark

统计->协议分级->data->查找 看到一串16进制数据和一个字符串:secret

找一个文件,利用010editor,将16进制数据覆盖原文件,发现是个zip文件,改后缀为zip,发现里面存在加密flag.txt文件,尝试使用密码:secret

错误,尝试tcp流里的密码:very_safe_password 正确

0xGame{7a504dab-ada6-4c41-adb3-0d1530098cd4}

[Week 1] hide and seek

提示steghide,即用这个工具来解,但是这个解需要密码,现在的目标是找到密码

[Week 1] signin

f12 查看 main.js

[Week 1] baby_php

  1. 找到一个MD5哈希碰撞的例子,例如’a’和’b’。
  2. 设置’c’为”1024abc”。
  3. 设置Cookie ‘name’为”flag”。
  4. 发送GET请求包含’a’和’b’,发送POST请求包含’c’,并附带上述设置的Cookie。

[Week 1] 找不到且不对劲的flag

1
2
3
4
nc 8.130.35.16 51000
ls -a
cd .secret
cat flag

0xGame{N3t_cA7_M30w_9dn23hcx8}

[Week 1] What’s CBC?

什么是cbc?cbc是AES加密算法的一种最常用的分组模式

下面来分析代码,写注释

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
28
29
30
31
32
33
34
35
36
37
38
39
from Crypto.Util.number import *
from secret import flag,key
#to_bytes()方法将异或运算后的ASCII码转换为一个字节字符串
def bytes_xor(a,b):
a,b=bytes_to_long(a),bytes_to_long(b)
return long_to_bytes(a^b)
#异或运算函数

def pad(text):
if len(text)%8:
return text
else:
pad = 8-(len(text)%8)
text += pad.to_bytes(1,'big')*pad
return text
#填充算法,不足8个字符则填充,目的是将文本变成8的倍数

def Encrypt_CBC(text,iv,key):
result = b''
text = pad(text)
block=[text[_*8:(_+1)*8] for _ in range(len(text)//8)]
for i in block:
tmp = bytes_xor(iv,i)
iv = encrypt(tmp,key)
result += iv
return result
#cbc加密算法

def encrypt(text,key):
result = b''
for i in text:
result += ((i^key)).to_bytes(1,'big')
return result

iv = b'11111111'
enc = (Encrypt_CBC(flag,iv,key))
print(f'enc = {enc}')

#enc = b"\x8e\xc6\xf9\xdf\xd3\xdb\xc5\x8e8q\x10f>7.5\x81\xcc\xae\x8d\x82\x8f\x92\xd9o'D6h8.d\xd6\x9a\xfc\xdb\xd3\xd1\x97\x96Q\x1d{\\TV\x10\x11"

具体分析过程:

text就是flag明文

vi=11111111
加密算法是:encrypt函数
它的实现:

密文与key进行异或text xor key = result

所以一个组的解密过程就很清晰了:


iv xor 明文一 = 加密后的iv

加密后的iv xor key = A

A xor 明文二 = B


B xor key =C

C XOR 明文三 =D


D XOR key=E

E xor 明文四 =F


F XOR key =G

……


其中,A 是密文分组一,C是密文分组二,E是密文分组三,G是密文分组四,……

ps:(enc 这一串我起初以为是16进制字符串,怎么看都看不明白,后来问了一下AI,才知道这玩意是ascii字符串)

现在的目标是得到key。

1
enc = enc[:8]

得到密文分组一,即A

1
\x8e8\x81o\xd6Q

iv xor 明文一 = 加密后的iv

加密后的iv xor key = A

那么

(iv xor 明文一)xor key = A

(iv xor 明文一)xor A = key

(11111111 xor 明文一 )xor \x8e\xc6\xf9\xdf\xd3\xdb\xc5\x8e = key

[Week 1] BabyRSA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
先分解n
然后写脚本:
from Crypto.Util.number import *

factor=[2329990801,2436711469,2732757047,2770441151,2821163021,2864469667,2995527113,3111632101,3162958289,3267547559,3281340371, 3479527847,3561068417,3978177241,4134768233,4160088337]
n = 93099494899964317992000886585964221136368777219322402558083737546844067074234332564205970300159140111778084916162471993849233358306940868232157447540597
c = 54352122428332145724828674757308827564883974087400720449151348825082737474080849774814293027988784740602148317713402758353653028988960687525211635107801
e = 65537
phi = 1
mask = 54257528450885974256117108479579183871895740052660152544049844968621224899247
for p in factor:
phi *= p - 1
d = inverse(e, phi)
m = pow(c, d, n)
flag=m//mask
print(long_to_bytes(flag))
#0xGame{Magic_M@th_Make_Crypt0}

[Week 1] Vigenere

已知flag是0xGame{……}

手算密钥得到密钥是 game

找个在线网站解出来得到

0xGame{79ad4e0522a0a67a6e196be52357e60b}

[Week 1] baby_php

MD5碰撞

[Week 1] another signin

区块链题目: