Cybrics Kernel Reverse Writeup

这次比赛看了蛮多题目的,但是只出了这么一题。(还有一道被其他师傅先交了)

简单的略过没有看到 Pwn 分类以为是没有 Pwn 题,所以就去复现了一下国赛 Build 环节的 pwn 题,赛后 ha1 告诉我是有 pwn 题的(国外比赛真不一样),希望下次比赛能再多做出几道题目。

题目是一道内核 Re 题,给了一个 ssh 可供连接,连上去之后发现/dev/ioctl 中对应的内核文件就是题目所给出的内核文件。

image.png

重点关注这部分可以得知,只需要传递的参数内容符合条件就会把 flag 信息写回到我们传入的参数的那段内存空间中,于是我尝试了解 ktime_get_real_ts64 函数并编写 exp 程序,最后解题程序如下。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/wait.h>

int main()
{
  int fd = open("/dev/ioctl", O_RDWR);
  if (fd < 0)
  {
    printf("open file error!!\n");
    exit(-1);
  }
  char flag[128];
  unsigned int val1 = 0x13373389;
  gettimeofday((struct timeval *)flag, NULL);
  *(unsigned int *)flag = *(unsigned int *)flag ^ val1;
  ioctl(fd, 0x5702, flag);
  printf("%s\n", flag);
}

虽然这道题目非常简单,但是对于我自己来说是一个新的开始。我大概了解了如何与 ioctl 的内核文件进行交互,这对于我来说是一个全新的开始。

0%