MENU

Catalog

    Cybrics Kernel Reverse Writeup

    July 25, 2021 • Read: 831 • Reverse,CTF

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

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

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

    image.png

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

    #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 的内核文件进行交互,这对于我来说是一个全新的开始。

    Archives QR Code
    QR Code for this page
    Tipping QR Code