HSCSEC CTF 2023 OTP 赛后复现

PGP 加密系统是采用公开密钥加密与传统密钥加密相结合的一种加密技术。它使用一对数学上相关的钥匙,其中一个(公钥)用来加密信息,另一个(私钥)用来解密信息。
一次性密码(One Time Password,简称 OTP),又称 “一次性口令”,是指只能使用一次的密码。
这道题有些没见过的知识点,加上附件有些问题,赛后复现一下
解压压缩包,压缩包注释
获得密钥
|
|
解码顺序 uuencode base64 base32
根据提示 解码的每一步都有用,把解码过程存一份
|
|
用 VeraCrypt 挂载,密码是 HSCSEC{asdf
得到一个邮件文件 eml 和备忘录.txt 还有 pgp 私钥
备忘录里面是 flag3 用 uuencode 解密
|
|
双击打开 eml,默认 win10 会用自带的邮件打开
保存所有附件
PGP 解密
ASC 文件通常被用作由 PGP 使用的装甲 ASCII 文件
asc 是使用 PGP 密钥加密的文件,可以用 PGP Desktop 解密
不过需要破解版,这里使用免费的 Kleopatra 软件
官网下载 www.gpg4win.org
安装后选择证书,导入
或者,双击 pgp 打开也可以导入证书
然后双击 asc 解密即可
密码是刚才解密过程中得到的
|
|
解密成功后全部保存
得到 encrypted 文件,其实还是个 eml 文件,重命名打开
OTP 解密
保存附件 OTP.rar 解压得到 OTP.exe
这里本意是让我们通过 OTP(一次性密码)来进行解密,输入正确的密钥可以得到 flag
方法一
但是这里已知这是用 python 打包的 exe,尝试逆向
因为出题的时候没有混淆,所以也可以用逆向的方式获得 flag2
|
|
然后我们尝试一下使用正常方法获取 OTP
方法二
OTP 的密钥是以 base32 的方式存储的
也就是刚才得到的
|
|
这里这道题是使用的 TOTP (Time-based OTPs) 基于时间的 OTP
密钥是根据时间动态变化的
用到 python 的一个库 pyotp https://github.com/pyauth/pyotp
|
|
这样可以生成现在的密钥
可以看到正确生成了
方法三
也可以使用 OTP 管理器 比如电脑端的 Thetis Key Manager
安卓端的 Authenticators
,
是否见过微软的动态验证码,扫描二维码绑定,那个就是 TOTP
生成二维码的话可以用这段代码
|
|
用手机软件扫描也是一样的,得到 6 位动态密钥
然后我们拼起来得到 flag
|
|