题目描述
小A鼓起勇气向女神索要电话号码,但女神一定要考考他。女神说她最近刚看了一篇发表于安全顶会USENIX Security 2021的论文,论文发现苹果AirDrop隔空投送功能的漏洞,该漏洞可以向陌生人泄露AirDrop发起者或接收者的电话号码和电子邮箱。小A经过一番努力,获得了女神手机在AirDrop时传输的手机号哈希值,但再往下就不会了,你能继续帮助他吗?小A只记得女神手机号是170号段首批放号的联通号码。
Hash:c22a563acc2a587afbfaaaa6d67bc6e628872b00bd7e998873881f7c6fdc62fc
flag格式:flag{13位电话号码(纯数字,含国家代码)}
解题过程
由题,并查阅资料,得以下信息:
- 该hash为sha256
- 根据当时的官方新闻,该号码前6位应为
861709
- 题目为091,可推测号码前7位应为
8617091
代码实现
解法1:
'''
Author: 白银
Date: 2022-08-26 10:13:46
LastEditTime: 2022-08-26 10:22:48
LastEditors: 白银
Description: 将号码分为前七后六,字符串拼接,后六范围为[000000, 999999],由于诸如`000000`的方式会被当成0处理,极大增加耗时,故选择为每一位单独遍历,这也导致低效
'''
import hashlib
# sha256加密
def jiami(byte):
hash = hashlib.sha256()
hash.update(bytes(byte, encoding='utf-8'))
# print(hash.hexdigest())
return hash.hexdigest()
# 枚举爆破
def enum(res, known):
for i3 in range(0, 10):
for i4 in range(0, 10):
for i5 in range(0, 10):
for i6 in range(0, 10):
for i7 in range(0, 10):
for i8 in range(0, 10):
if jiami(known + str(i3) + str(i4) + str(i5) + str(i6) + str(i7) + str(i8)) == res:
key = known + str(i3) + str(i4) + str(i5) + str(i6) + str(i7) + str(i8)
# break
return key
if __name__ == "__main__":
print('flag{' + enum('c22a563acc2a587afbfaaaa6d67bc6e628872b00bd7e998873881f7c6fdc62fc', '8617091') + '}')
解法2:
'''
Author: HSC-spmonkey
Description: 简单粗暴高效,直接按13位整数爆破
'''
import hashlib
sha256 = 'c22a563acc2a587afbfaaaa6d67bc6e628872b00bd7e998873881f7c6fdc62fc'
for i in range(8617091000000, 8617100000000):
hash = hashlib.sha256(str(i).encode('utf-8')).hexdigest()
if hash == sha256:
print(i)
break
结果
得到flag:flag{8617091733716}