呜呜呜 T_T
记录一下蒟蒻在各大比赛挨打的过程。
# 2021.10.22 省赛(复现)
# misc
附件就一张图片,binwalk 没发现啥玩意,最后到处试 lsb 隐写给试出了一个 rar
拔下来的 rar 发现是损坏的,考虑伪加密,把加密位改回去
这里的 0 改成 4,原本以为没啥问题了,结果这里踩坑了。这里要用官方给的 lsb 隐写脚本跑出来的 rar 才是正确的 rar。
后面的步骤都很简单了,爆破出加密的 rar 密码为 123321,得到一张图片直接用 stegsolve 看 flag。
# 2021.8.30 DASCTF(复现)
有俩密码学的题
# Crypto
# let's play with rsa~
附件长这样:
1 | from sympy import isprime,nextprime |
数学原理很简单:
exp 如下:
1 | from Crypto.Util.number import * |
# ezRSA
这题原理和上题类似,附件如下:
1 | from secret import flag |
给了 5 次机会 (coin),2 和 3 选项分别能得到 n 和 p,数学原理如下:
exp 如下:
选项 2 和 3 各选两次拿数据,最后一次拿 flag 的数据
1 | from random import * |
# 2021.8.23 祥云杯
做了两个题,分最低的俩,呜呜呜,提取密码都是 GAME
# Misc
# 鸣雏恋 附件下载
下载下来一个 60 多 M 的 docx,改后缀 zip 翻到了_rels 里面的 key.txt 和 love.zip,key.txt 是零宽隐写,解密网站,直接全部复制进去出来的就是 love.zip 的密码。
love.zip 里面只有两种图片,盲猜是二进制之后转 ascii,图片太多写脚本跑。
1 | import os |
一种 262 字节一种 435 字节,用 300 为界限划分,出来的二进制码转 ascii,发现是 base64 的图片编码,拿去解码就得到了 flag
1 | flag{57dd74fb21bb1aee50f19421bf836f23} |
# Crypto
# Random_RSA 附件下载
第一次在大比赛里面做出 rsa 的题,这题加密算法不难理解,题目贴一下反正不大,print 的数据都给了.
1 | from Crypto.Util.number import * |
没有给 dp, 应该是要我们求。告诉了 dp 是多少位的,和 seeds 是一样的 154 位,程序是把 dp 的每一位,异或加密了,生成的 seeds 是随机的题目也给了,根据这个 seeds 去生成随机数来对 dp 的每一位进行异或加密,一开始用 python3 跑出来的 rands 是错的, 特地装了个 python2 去跑了个随机数.
得到正确的 rands 之后拿去解密 dp, 脚本如下
1 | dp = [] |
得到 dp 之后,就是一个简单的 dp 泄露题了,拿模板去套.(模板是 la 佬的 磕头)
1 | import gmpy2 as gp |
# 2021.7.31 DASCTF
菜鸡想吐槽:肝了半天的题目都成 200 分了,果然我是最菜的。
# Misc
# red_vs_blue 传送门
题目要 nc 连接,思路很简单,就是 nc 连上之后,有 66 个结果随机选择哪一个队,选择错了就退回到第一关,要连续选择正确 66 个结果。
1 | root@tsuppari:/home/tsuppari# nc node4.buuoj.cn 27935 |
每次 nc 进入,66 个结果都是一样的,所以直接写脚本跑。19 行代码蒟蒻改来改去写了一个钟头。还是太 fw 了。就是一个不断试错暴力破解的过程。
1 | from pwn import * |
# funny_maze 传送门
题目也是 nc 连接,连上去有 3 个选择,2 没啥用,3 介绍游戏规则,就是在 10s 之内计算出从起点走到终点的路径,超过了 10s 就会出 timeout。如果是最短路径下面的脚本就得改一改,反正思路是一样的都是 dfs (深搜),oier 的必修之路。
1 | root@tsuppari:/home/tsuppari# nc node4.buuoj.cn 27619 |
一个简单的 dfs 脚本,60 多行代码改了 2 个钟头,写脚本能力太弱了。
1 | from pwn import * |
DASCTF 的比赛自己做出来的就 2 个题😔,后面会复现一下 pwn。
# 2021.5.15 ciscn
# Misc
# 隔空传话
下载下来一个 data.txt,一堆数字与字符,查找后发现这是 PDU 短信的编码,前面四句话与后面几句话不一样,前四句话翻译如下。
1 | hello,bob!what is the flag? |
flag 前 8 位为 15030442,后面的 PDU 翻译过来都是 16 进制字符串,且发送的时间都不相同。于是写脚本进网站翻译。
1 | from selenium import webdriver |
小破脚本跑了很久,最后得到的 out.txt 如下:
按照时间排序,用脚本排序,脚本如下:
1 | with open('out.txt','r') as f: |
发现文件 output.txt 的开头 89504e47 是 png 文件头,但是宽被修改过,联系前面的信息:w465,可猜测宽为 465,于是得到图片
1 | CISCN{15030442_b586_4c9e_b436_26def12293e4} |
# 2021.5.9 redhat
# Misc
# 签到
下载下来一个 EBCDIC.txt,作为一个合格的萌新,直接把 EBCDIC 拿去 Google
当时打比赛的时候我是对着这张表一个一个手动翻译,时间也不长 2 分钟就好了。后面看了别的大佬的 blog 发现可以用 Linux 自带的 dd 命令解出,或者是用 010。
1 | flag{we1c0me_t0_redhat2021} |
# colorful_code
下载下来两个文件 data1,data2。
思路:仔细观察 data1,文件大小有 15kb,data2 只有 1kb. 查看 data2,其中后面大部分数据,从 14 开始后面是每 3 位数据都相同,观察前面的数据,共有 20 组(0-19)每组 3 个数据,联系题目 colorful 这题应该跟画图有关,每三位代表 RGB 的三个数据。
而 data1 中是由 0-19 整数组成,推测 data1 中每一个整数代表一个序号,序号对应 data2 中的色块序号。
思路清晰,开始写脚本跑
1 | from binascii import * |
这个输出的前 20 组数据就是我们要的数据,复制出去作为 output,写下一个绘图脚本
1 | from binascii import * |
data1 共由 7067 个数据,7067=37*191,不知道哪个是高哪个是底,都试一遍。而且一开始我不知道它是一行一行写还是一列一列写,所以都试试。试出来的结果就是
然后就涉及到我的知识盲区了。后面知道是一种叫做 npiet 的隐写术,有在线解码脚本。
1 | flag{88842f20-fb8c-45c9-ae8f-36135b6a0f11} |