快轉到主要內容

Pwn College - Baby Kernel 解題入門教學

·221 字·2 分鐘·
ChengHao Yang
作者
ChengHao Yang
SRE / CNCF Ambassador
目錄

點開這篇文章,相信你一定知道 Pwn College 知道那是 CTF 學習平台。

其中有個類別是 Baby Kernel 的分類,網路上的入門資料有點少,官方文件沒有寫太多怎麼打開,今天這篇要來教大家怎麼入門 Baby Kernel。

觀察
#

如果你做過其他題目,會知道題目會放在 /challenge 這個資料夾。

/challenge 裡面的內容

用 Radare2 或 IDA 去 Reverse 就會知道他有一些字串要寫入到 /proc/pwncollege

(附圖需要晚點)

寫入之後會判斷字串是否會有他要的密碼,如果是就會輸出 flag。

(附圖需要晚點)

然後就可以寫出這樣的 Code。

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

int main() {
    char buffer[100];
    int fd = open("/proc/pwncollege", O_RDWR);
    char key[] = "glgwhnyvrpljqoyk"; // Find key in here
    write(fd, key, sizeof(key)); // Write in /proc/pwncollege file
    read(fd, buffer, 100); // Read flag from /proc/pwncollege
    printf("%s\n", buffer); // Print flag in stdout
    close(fd);
    return 0;
}

編譯完執行以後,就會發現,好像什麼都沒有?

編譯執行後的結果

解決方式
#

官網的首頁有提到:

For some of the later (kernel-focused) challenges, you will need to solve the challenge in a virtual machine. You can interact with the virtual machine using the vm command.

意思是說,如果是 Kernel 的 Challenge,你會需要使用他們的虛擬機器,可以用 vm 這個命令跟虛擬機器互動。

那我們用 vm -h 看看相關命令:

VM 指令說明

從說明裡面大概知道,需要先打開機器,並且連線到裡面:

vm start
vm connect
連線到 VM

這時候就會發現 Hostname 多了 vm_ 前綴字,就代表連線進去了。

這時候再執行剛剛寫好的程式:

Flag

這樣就可以囉!

連線時直接進入 VM
#

我翻找過程當中,官方 Pwn College 的 Discord Server 有人就寫了很方便的 Script 可以判斷 Kernel 題目,直接連線時進入 VM,加入在 .bashrc 後面即可。

This solution by hkreie#6442

ko=$(/bin/ls /challenge/*.ko)
if [[ $ko != "" && $HOSTNAME != *"vm"* ]] ; then
    echo -n "This looks like a kernel level. Start vm? [y/n]: "
    read start_vm
    if [[ $start_vm == "y" ]] ; then
        echo "Staring and connecting to vm..."
        vm start ; sleep 2 ; vm connect
    fi
fi

示意圖如下:

連線時就會跳出提示

只要在詢問時按下 y 就會直接連線到虛擬機器上。

後記
#

之後有空也會寫寫 Pwn College 的相關內容,簡單教學到這裡,希望對大家有幫助,那我們就下篇文章見!

相關文章