2025蓝桥杯全国总决赛部分WP
2025蓝桥杯全国总决赛部分WP
xxtea
下载附件打开是cyberchef的一个加密步骤(当时半决也有一个差不多的题)
按F12拿到输出
1 | 00000000 9e 45 02 82 ea 25 d2 62 0d 06 e7 b4 5f dc 62 bd |.E...%.b...._.b.| |
用cyberchef(本地)反解密就可以了
flag{4eb88a16-be48-4de2-ab2a-ed09a09ed386}
server_logs
题目是让我们提交:
- 攻击者的登录靶机所用的账号
- 攻击者的ip
- 攻击者留下的后面服务
- 靶机泄露敏感信息时的DNS域名(只写关键部分)
flag格式是flag{账号_ip_服务_DNS域名}
(蓝桥杯连一个应急环境都给不了,直接给附件…….)附件给了三个文件夹,/var/logdnsmasq.log下可以看到有加密信息
base64解密一下
拿到账号:attacker,DNS域名固定部分:data.leak.ev,攻击者ip:192.168.42.77
etc/systemd/system下就有一个hidden_backdoor.service(文件名提示不用多说了)
查看文件内容,可以看到是一个nc反弹shell
拼接flag
flag{attacker_192.168.42.77_hidden_backdoor_data.leak.ev}
弱口令
题目环境打开:
使用提示的账号密码登录环境,查看用户的个人笔记发现提示信息
告诉我们密码提示是用户名+4位数字
那直接上bp爆破,第一次爆破没有结果
猜测使用0进行左填充
根据回显长度筛选成功拿到密码
登录admin即可拿到flag
flag{8486fe92-2be4-4150-a481-74688803c872}
Fastcoll
使用下发的工具制造出符合规则的md5碰撞文件即可
先使用fastcoll的-h选项查看如何使用
- -h [ –help ]
- 显示帮助信息。
- -q [ –quiet ]
- 安静模式,减少输出信息(即不显示详细日志)。
- -i [ –ihv ] arg
- 使用指定的初始向量(Initial Hash Value,简称 IHV)。默认为 MD5 的标准初始值。
(此项用于高级攻击,如不同IHV起点的碰撞,普通用户通常不使用。)
- 使用指定的初始向量(Initial Hash Value,简称 IHV)。默认为 MD5 的标准初始值。
- -p [ –prefixfile ] arg
- 指定一个前缀文件(prefixfile),程序将从这个文件开始构造碰撞。
同时,prefixfile 的内容会被拷贝到输出文件的开头。
- 指定一个前缀文件(prefixfile),程序将从这个文件开始构造碰撞。
- -o [ –out ] arg
- 指定两个输出文件的文件名。必须放在最后,并且要指定两个文件名。
直接构造符合规则的两个md5碰撞文件即可
fastcoll_v1.0.0.5.exe -p 1.txt -o msg1.bin msg2.bin
base64编码一下
验证成功之后,即可拿到flag
flag{ccef1105-4048-4f10-8c69-edf68d93a1ec}
flowzip2
附件是一个pcapng流量包
binwalk分析一波
发现有一堆zip压缩包,而且还有提示”\d{3}”
使用binwalk -e提取出来,尝试解压发现有密码
根据前面的提示”\d{3}”,猜测是三个数字组合(正则的表达式)
先用ARCHPR爆破一下
成功拿到密码,猜测正确
写一个爆破解压脚本
1 | import os |
再用dnGrep查找flag{即可
成功找到flag在579F0下的dcsxr.txt
flag{5f5491b6-fddf-4be8-ab44-5a18831cc45b}
rand_pyc_obf
题目都提示我们是pyc文件,那我们直接使用pyinstxtractor进行打包得到pyc文件
然后使用uncompyle6进行反编译,成功拿到python源码
1 | import sys, random, base64 |
这个脚本验证 flag 的方式是:
- 检查格式是否是:
flag{...}
,总长度必须为 42 字符。 - 将 flag 进行 base64 编码,并拼接字符串
_easyctf
,变成一个新字符串。 - 用这个新字符串的每个字符做随机种子,调用
random.seed(ord(c))
,然后生成random.randint(1000000, 9999999)
,得到一个整数列表。 - 这个整数列表与预定义的
iii111
比较,完全相同则验证通过。
一个字符唯一对应一个整数。我们可以暴力穷举所有可能字符(ASCII 32~126),找出每一个 randint
对应哪个字符。
从而还原出整个 oo0O000ooO
,然后去除结尾 _easyctf
,base64 解码得到原始 flag。
1 | import random |
flag{30de99f4-50d2-9f8f-2868-dcfa9d81483c}