Security_lab

SetUID

부산대보금자리 2021. 7. 21. 16:41

시스템 해킹을 하는 주요 목적은 권한 상승이다. 

리눅스 시스템에서 외외로 합법적인 권한 상승 과정이 많은데 바로 setUID를 이용한 방법이다. 

이는 /etc/passw의 일부이고 kali 이용자의 경우 uid를 1000 gid를 1000을 받는다고 적혀있다.

그리고 그와 같음을 확인할 수 있다. 

패스워드는 설정할 때 passwd 명령을 사용하고 passwd로 패스워드를 설정하면 패스워드에 대한 암호화나 해시된 값이 /etc/shadow에 저장된다. 

UID, GID와 별개로 EUID, EGID가 있다. 

SETUID는 EUID를 0번으로 바꾸어 주어서 관리자와 같은 권한을 갖게 한다.

passwd는 패스워드를 설정하는 명령어이다. 이 명령을 실행할 때는 우리 모두 관리자와 같은 권한을 갖게 된다. 

이는 passwd의 접근권한을 본 것인데 s가 있는 것을 볼 수 있다.  이는 setUID를 가리킨다. 

소유자 실행 권한에 s가 있으므로 setUID이고 그룹 실행권한에 s가 있으면 setGID를 의미한다.

setUID = 4000, setGID = 2000으로 표현할 수 있다. 

 

이러한 SetUid가 있는 파일은 해킹이 당할 수 있다. 

이러한 파일은 find / -user root -perm 4000으로 찾을 수 있다. 

 

이번엔 setUID를 이용한 기존의 기법을 수행해본다.

우선 원본의 bash 셸을 복사해오고 권한을 부여해준다.

그럼 이제 이 bash 셸을 실행하면 관리자 권한을 얻을 수 있지 않을까 생각한다. 

 

다른 방법을 써보자.

이런 코드를 작성해보았다. 이는 셸 프로세스를 다른 프로세스로 감싼 것이다.

이 소스파일에 대해서 setuid 설정을 준다면 이 프로그램이 실행되었을 때는 root 권한의 프로세스이고

system("/bin/bash")를 실행하는 프로세스 권한은 당연히 root가 된다.

 

다음 방법을 써보자.

이번엔 vi 에디터를 활용하여 에디터의 아래쪽에서 명령어를 실행시키는 것이다.

 

 

위와 같이 실행이 가능하다.

해당 vibackdoor실행 파일에는 setuid를 부여한 상태이므로 관리자 권한으로 실행될 것이라 예상했다.

그리고!/bin/bash를 실행시켜 보았다

다음과 같이 root 권한으로 전환되었다.

'Security_lab' 카테고리의 다른 글

gdb를 통한 heap buffer overflow  (0) 2021.07.27
gdb를 통한 Stack buffer overflow  (0) 2021.07.27
레이스 컨디션 실습  (0) 2021.07.25
John the ripper,johnny 와 Hash  (0) 2021.07.23
shell code & assembly analysis  (0) 2021.07.20