Pwn College - Baby Kernel 解題入門教學

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

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

觀察

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

/challenge 裡面的內容

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

(附圖需要晚點)

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

(附圖需要晚點)

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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 指令說明

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

1
2
vm start
vm connect

連線到 VM

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

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

Flag

這樣就可以囉!

連線時直接進入 VM

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

This solution by hkreie#6442

1
2
3
4
5
6
7
8
9
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 的相關內容,簡單教學到這裡,希望對大家有幫助,那我們就下篇文章見!