首页
论坛
课程
招聘
[求助] 第二题 子鼠开天 提交多解
2020-4-16 13:06 1744

[求助] 第二题 子鼠开天 提交多解

2020-4-16 13:06
1744

用户名 KCTF 约有 2**(13*8+24) 个解,随便列一些,以下每行都可以让程序输出 Congratulations! You did it!
由于解空间太大,实在没法猜作者想要的是哪个解。

ef589f333382266883b13d8df4c6c4c2a786c2e7d9538e4a3d98e7b6cfcddce1
76beda196e189d200c898eb5edb6417dbf342d69623265e02ec6870c3715a6c3
640c834396c9fcb2be1200d727a4e5ac1171a81d4c884b1ebd8c1849e1e04c38
df1b107ba1c6b39ba413b28d24266219871200113401584c06153257d697b87b
24dbfbfc5b0b559d3973eadf8cc05b74ce363670b175c9d29954598b62a495ce
4bb7af6023d9255a8767057d70bc3cb8e11e564843f29a6c0f302d0f5d88e745
0c605f715e6501c930959017b32b41d6f760d8baaf82fc15a1c987775ff64453
98daca576ce8825f39beb55b038c2ae1c1fb8be26a96edc7cae6a6121bbc3a7c
7959c2be718cc103c208c810da3d0c6f0bcd1f7324f368c5043cfc5ed91acb61
142955f81297a1126e364b95d31698e1d845a8a866cbb4495bdc7b6f7a580d24
a97daf2bd7dfef66d388131f8a4709feff26ceb29967187720998a3323e41fb0
ef0fb80d33023e4fc69d530dfc473081bc591fb60dec51fa7bc2353832261775
277ee8f1a263ecf6a31592e3fbbb8f510168ad1e4375fbad47f2b9f21b4f1c27
da4e025174486bb6e1fe9a289af4b2cb7cb045f57fb8dfdbb7355cd48b220684
58ad0289c308fad02946642a0146cd2d3c19bcf9afe0cf8e34daf10749d8196b
5c7c1fcfc64dbe86e8761788e49ee1f5f0bfde3ef13cde4bb8be6458845f4ec5
247b5f1ae10184f3b0b842882094e43a3dfd02d99e10a6cbbc67d8440d841f2e
21ee7d98f407b471775326a620e1a07d6de61d9ddf641ef7ef9a233de4d9472b
8289b29b057cd2dbc2a72685a5b0a3791197e016bd2bf3a1ea26f5f77f24d7ed
d1a8fdbd76d6091e0dc3a223aa8964a99bb026aafa557720e38e30cbc5c6a599
5a30d3f8ea2d29ae8dba7c5ec57015eaba12fe4a90ee9e700020659b8a7166c1
cec094ba727a0e8db68e1c2271784c09a00e139dd5734e991dad09e3e6571bfb
3865b08fc8fc504b6eeb332a35568b59a617b19b60e9a9b2081dd9b8d2317c29
6b9b43b8922c0f0bd28f2db5282e955e2cbcfcebbd986af71286013e81241d6e
c69c473fb6e1e150758d9a1b2c5c88479a0c91f99c5ea61f2ca515b2047c5315
3560fd70d45f3ef8e83935291b1337eeddccefcc57d3f0f5d1b16be07b41460d
bea16dd99c6f1daa511341f725515f18bc60a29a73cd4e8969786e2bfe84b632
ed27d879c7d70a24482fc849b5dbf0edae826e74d598711c14ba69eb9de5b59d
ad729fb2f3873c5b0961c5b893a0aee366e07e0476090e958aef468738ad0ebf
8302cbafbeb75dd7e3eb40be8919be9c9d8316269b91d5b8f05f26a0c2df4284
de95da5e9bbc90a6d03325a6594f4a7910844112aaed899279a6fb143b287b26
17b4f47d4c462d52bddee5f6f4e5e75113067d56b30adf41f5a92c84a88795e6
3ced5b11c7fc5d7c1f6919cd87dad9ac9df0c05adebdf19d84834ef148025586
d144c867a059e1636d32b9e6104fd22e4fa52f4b3316611078558646e6e5736c
828e7f52c36deef3c6f35d8d0449d59eb60df8a250b136b46b741d155e093f1a
3ffec09d29e558bffbc5187bf0d1b3a2c03bb9bedb0c46834ffd7d1ada31dbca
0b4dadeacde28d799cc2797f88d5a0f2b2bf9ac43b298db157413477cc935b91
8812098a5b40f48cb46d5e15a3dfe1f6998bc89e0092d1d650fc50974d27f98c
8619ffb7d29b8fa36a0a467a40adba6ee07c7371e5bf51dda1ee8b16e373939b
6977fc296425632f74db520ab6414f23d25a9281650b2a6e2588d38de82124fc
9946b0bd62d5997a19a62f2f547aebcd4a6e189f1aee3ef8c7f185ce55826c65
99da1a5a4be3baffc445a52d32f5f946c112ae185204228d74e1f2966e78565b
853405cfe63386f0a4fed552c85aad773871c1edbaf11e45e576817308514be4
56f1be4630fc830c60516d81775e80c5f26231ffd484836512055f1729826025
1ec73b38066369a4f4f01bc0cd20dfd724f9c15a1ebc4acfb9d8a366ef69f6e4
01dd278eb51e4af0a28dc479ec1d3969bd8a012a420803da760685b2c49f6ec9
656a2115961cdab7f301f07e120fc16a31483c249ef4fb343ede28755ab088be
68b2501f21f04f9e1c6f46c7a53068ed9f50538ce2dfae49e0c4c303546cef15
b20a319733d75a06906f28085da57815c7e62059bef5435cdf27fa15b39661c8
5a2f3d5e8f918cb6f5e4a483c45e01c2fa60d77ff36dacdbb8daa48fc9758fb4
b5bf7cd7781b6bab825f37697ebe1d81b42b6e1e7368054f5de2972c30a720b9
be0e739651d15b68f5ae8d4987f6544fd0fa39c34bc44ddb6e359e036c5f571e
3db47c9fcace865056cd0ae11bd1514ed0761e3021388597624a9ed5f9a5877a
d92f62e33095fd47870b843ff157e808f4bdc2f0e7d92387833a6fa0f2086686
2064b62996c09f0a4dbb96d26299e1485669ec1db9703bea6f0e99d011f897b8
3a7b8a02b97c16a4624bd8dab4c5d053d9146419e9d181c0a113ecb5ff6e6cc7
ad2196a2e2139837b79783ec644539c7a3c605aaaafb64c42cdeb9e8b4c5149b
c5b553a1266bc32f83e32c99f56a7c7840736883799b1d8f9fed92c80a3d3b27
93ac7cf82d3d9bb969e8ffc0f7d535946f170814ae41deb7e21e9729d76afd23
6fe7449bc9366de3991d422519e3c7d3b8aee3d37752dd8f092311fd1d736ef8

【公告】看雪团队招聘安全工程师,将兴趣和工作融合在一起!看雪20年安全圈的口碑,助你快速成长!

收藏
点赞0
打赏
分享
最新回复 (2)
雪    币: 1893
活跃值: 活跃值 (7732)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2020-4-16 13:27
2
0
已联系作者更改题目了。你这边,先提交第一个,即    ef589f333382266883b13d8df4c6c4c2a786c2e7d9538e4a3d98e7b6cfcddce1

4.2.5   多解罚分 = 此题难度分 × 多解罚分系数(20% )。如果防守题被发现多解,则给防守方1次修改机会,并扣多解罚分。若修改后又多解,则下线退赛,攻击方在此题获得的成绩保留不受影响。


雪    币: 6413
活跃值: 活跃值 (103)
能力值: ( LV12,RANK:831 )
在线值:
发帖
回帖
粉丝
Riatre 活跃值 8 2020-4-17 02:22
3
0

a

这个程序的逻辑比较简单易懂。验证逻辑大致如下:

  1. 用户名长度在 [4, 20] 之间。
  2. 序列号长度为 64,为 hex 编码过的 32 字节。
  3. 0x401190 处的函数计算了用户名的 hash,不用看,直接输入 KCTF 跟到这里抠出结果即可。
  4. 跟 SN 有关的是验证 H(username) = RSA_PKCS1_5_unsign(AES_Decrypt(sn, key), e, n)
    其中 AES 的 key 是硬编码的,直接提取出来即可。e = 65537,n 只有 256bit,可以直接丢进 yafu 分解。

多解的地方有两处:

  1. 没有限定 padding 里随机的部分可以填什么。
  2. hex decode 的时候对大小写一视同仁。

s

from Crypto.Cipher import AES
import gmpy

AES_KEY = bytes.fromhex("480B62C3ACD6C8A36B18D9E906CD90D2")
n = 0x69823028577465AB3991DF045146F91D556DEE8870845D8EE1CD3CF77E4A0C39
p = 201522792635114097998567775554303915819
q = 236811285547763449711675622888914229291
assert p * q == n
phi = (p-1)*(q-1)
d = gmpy.invert(65537, phi)

for i in range(256):
  data = bytes.fromhex('14AF58AD4D76D59D8D2171FFB4CA2231')
  assert len(data) == 16
  data = b"\x00\x02" + bytes([i]) * 13 + b"\x00" + data
  assert len(data) == 32
  c = int.from_bytes(data, byteorder='big')
  m = pow(c, d, n)
  mt = int(m).to_bytes(32, 'big')
  print(AES.new(AES_KEY).encrypt(mt).hex())
游客
登录 | 注册 方可回帖
返回