리눅스

 3916, 1/196 회원가입  로그인  
   wlgns5721
   setuid관련 질문입니다

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=4427 [복사]


제가 우분투에서 간단한 백도어를 만드는 실습을 하고 있는데요.
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()를 사용하는 의미가 뭘까요...?


  Hit : 3628     Date : 2016/08/02 03:18



    
jaesungp8 권한을 확인할때 RUID를 확인하는 경우가 있고 EUID만을 확인하는 경우가 있습니다. setuid가 없는경우엔 관리자 명령어는 안되는걸 확인할수있을꺼에요 참고하세요 2016/08/03  
ohseoh31 setuid(0) 이런식으로 사용하죠? euid가 0 으로 설정 되어 있을때 setuid(0)이 먹히는 거잖아요?
보통 이걸 기본적인 로컬 백도어라고 하는데요. setuid 비트가 걸려있는 프로그램은 어떠한 사용자가 사용해도 euid 권한으로 실행이 가능하게 됩니다. 그렇다면 root권한을 가지지 않은 사용자가 이프로그램을 실행만 하더라도 root 권한을 가지게 되는 경우입니다.
따라서 이프로그램 실행에 의미는 일반 사용자가 root권한을 프로그램 실행동안 사용 할수 있다가 아닐까요? 해커는 root권한만 가지면 비밀번호 정보를 변경 수정 삭제 가능하니깐요?
2016/08/05