签到

没啥技术含量,求助于万能的 百度 Bing

crypto091

小A鼓起勇气向女神索要电话号码,但女神一定要考考他。女神说她最近刚看了一篇发表于安全顶会USENIX Security 2021的论文,论文发现苹果AirDrop隔空投送功能的漏洞,该漏洞可以向陌生人泄露AirDrop发起者或接收者的电话号码和电子邮箱。小A经过一番努力,获得了女神手机在AirDrop时传输的手机号哈希值,但再往下就不会了,你能继续帮助他吗?小A只记得女神手机号是170号段首批放号的联通号码。

Hash:c22a563acc2a587afbfaaaa6d67bc6e628872b00bd7e998873881f7c6fdc62fc

flag格式:flag{13位电话号码(纯数字,含国家代码)}

  • 170号段首批放号的联通号码:1709
  • 限定做法:Hash爆破
  • Hash为64位,因此Hash的计算方法是sha256
1
2
3
4
5
6
7
8
9
10
11
12
import hashlib
prefix = '861709' # 联通首批放号的电话号码头
compare_hash = 'c22a563acc2a587afbfaaaa6d67bc6e628872b00bd7e998873881f7c6fdc62fc'
result = 0
for i in range(0,10000000):
to_hash = prefix+'{:0>7}'.format(str(i)) # 这么写主要是为了构造电话号码的格式
to_compare_hash=hashlib.sha256(to_hash.encode()).hexdigest()
print(to_hash, to_compare_hash)
if to_compare_hash == compare_hash:
result = prefix+str(i)
break
print(result)

Hash爆破脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import hashlib
from itertools import permutations
import string
salt = input('salt: ')
target = input('target: ')
ls = string.ascii_letters + string.digits
res = permutations(ls,4)
result = 'empty'
for _ in res:
XXXX = _[0]+_[1]+_[2]+_[3]
to_hash = XXXX+salt
if hashlib.sha256(to_hash.encode()).hexdigest() == target:
result = XXXX
break
print(result)

用于解决题目提示XXXX + 一串salt == Hash值的开头问题,因为已经很多次遇到这种问题了,所以写了个脚本来爆破,只需要输入对应的salt和hash就可以解出来