2018 百越杯 WriteUp
🏛️ 组织架构
主办单位:福建省教育厅与福建省网络与信息安全信息通报中心
承办单位:福建师范大学、福建省网络安全与密码技术重点实验室及永信至诚等
Misc
马男波杰克(签到)

题目只说了要百度,然后图片名字是 atool,猜测是 atool 加密,去在线解密一下

flag_universe(LSB 隐写)

打开流量包发现 FTP,直接过滤

然后追踪流量,分析后发现是有上传和下载图片的操作,逐一提取出来
之后发现 up01.png 图片存在 LSB 隐写

血小板天下第一可爱(LSB 隐写)

拿到两张图片,一张血小板,一张缺了两个定位点的二维码,补全一下扫出来这个东西
1 | a2V5JTNBJTIwTHNiXzFzX2dyM2F0 |
Base64 解密出来是 key: Lsb_1s_gr3at,推测是 LSB 隐写
最后提取出 flag:flag{1_l0ve_LSB~}
签到(签到)

一张数独的图,拿去在线解密一下就行
1 | flag{cee3860fb3f4a52e615fa8aaf3c91f2b} |

Crypto
RSA(RSA PKCS#1 padding)

核心代码如下,如果 RSA 加密失败则重新生成 p,q,e
1 | flag = open('flag', 'r').read().strip() * 23 |
首先查看公钥
1 | openssl rsa -pubin -text -modulus -in pubkey.pem |
得到
1 | n = |
分解 n
1 | p = |
但是代码最后 flag * 23 长度非常大
RSA PKCS#1 v1.5 要求 明文长度 < n 长度 - padding,也就是说第一次必然失败
所以我们只需把题目中的 encrypt() 逻辑原样反过来写成 decrypt(),让 RSA 解密过程自己触发异常,然后继续更新 p、q、e,直到成功
1 | import gmpy2 |
