强网杯2020 部分writeup
简单记录一下做出的几道题目,以后还是科研为主科研为主
babyCRT#
1 | # task.py |
论文题:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.510.3146&rep=rep1&type=pdf
结论:$gcd(m^{c_1} - {Sig}^e,N)=p$
所以爆破$c_1$就行
1 | from hashlib import sha1 |
bank#
nc看了下可以知道是ECB模式加密了sender+receiver+money,所以通过加密可以知道自己的账号对应的密文,同时在recorder里可以看到哪些人在相互转钱,题目让我们可以提供recorder来伪造其他账户转钱给自己,所以思路就很简单了:
- 加密一次,得到自己的账号
- 得到所有已有的其他账户信息
- 伪造recorder让其他账户给自己打钱
1 | from pwn import * |
modestudy#
是真的让人头大
六个Chanllege 分别对应:
- CBC 字节翻转攻击
- CBC预测iv
- ECB 块加密,可以发现有两个块只差一个字节,可以通过覆盖修改admin=0 为admin=1(
session:dfc684a3;timedl=1;admin=0;guess_cookie_ma=1;guess_mp_ab=1;guess_cookie_mb=0;hell_pad=233
) - ECB padding oracle
- 自己写的ECB块加密,两个字节为一个块,先建立明文和密文的字典,然后直接爆破
- CBC padding oracle
1 | import binascii |
xx_warmup_obf#
应该是被我非预期了23333。
一道混淆的re,但我向来是一个不喜欢麻烦的人,所以我抱着侥幸的心理试了下pin的指令数目侧信道,前置知识可以看之前这篇博客(https://blog.ycdxsb.cn/c61763eb.html)
可以看到有bad passcode
,you got it
和you failed it
三个不同的字符串
根据位置和经验猜测第一个bad passcode
是判断输入长度的,所以试了下知道输入长度为28字节
然后试了下第一个字节,发现f
是指令数最少的,又简单测试了一下第二个l
也满足条件,所以直接侧信道走起,吃个饭回来拿flag岂不是美滋滋,可惜题目看的太迟了,第4个做出来,连3血都没拿到
1 | import os |