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