2022网鼎杯crypto——crypto091

题目描述

小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}


版权声明:本文为weixin_45770420原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。