제가 우분투에서 간단한 백도어를 만드는 실습을 하고 있는데요.
root계정으로 다음과 같은 프로그램을 짰습니다.
backdoor.cpp
int main() {
setuid(0);
system("/bin/sh");
}
그다음 컴파일 한 후 chmod 4755 backdoor을 하면 사용자가 이 프로그램을 실행할 경우 루트권한을 획득하게 된다....라는건데요.
제가 구글링한 바로는, 프로그램 내에서 또다른 프로그램을 실행시키면 EUID가 아닌 RUID권한으로 프로그램이 실행이 되므로 setuid()를 하지않으면 root가 아닌 사용자계정의 쉘이 뜬다고 하는데, 막상 코드에서 setuid()를 빼고 컴파일해서 실행해보니, ruid는 확실히 사용자계정이지만, euid가 root여서 cat /etc/shadow등등 다 할수있더라고요.
setuid()를 넣어서 ruid를 root로 변경시켜도, 어차피 프로그램이 종료되면 다시 사용자계정으로 돌아가는데 그러면 setuid()를 사용하는 의미가 뭘까요...?
|