소유권/권한이 다른 파일을 마운트할 수 있습니까?

소유권/권한이 다른 파일을 마운트할 수 있습니까?

권한 상승을 위해 mount 명령을 사용하려고 시도했는데 외부 장치에 액세스하지 않고도 루트가 소유한 suid 파일을 생성하는 것이 가능한지 궁금했습니다. 즉, 다음을 수행하는 방법을 찾으려고 합니다.

  1. suid 비트를 설정할 수 있도록 mount /bin/bash를 다른 파일에 바인딩합니다(마운트 해제 후에도 어떻게든 유지할 수 있습니다). 또는 suid 사용자의 /bin/bash 복사본을 루트가 소유한 파일에 바인드 마운트합니다.

  2. suid 비트를 설정할 수 있도록 squashfs, .iso 또는 루트가 일반적으로 소유하는 파일(예: ubuntu .iso 이미지의 filesystem.squashfs)이 포함된 기타 기존 파일 시스템을 마운트합니다.

설정은 다음과 같습니다:

  1. 모든 매개변수를 사용하여 sudo 마운트 허용
  2. 다른 장치에서 컴퓨터로 루트 suid 파일을 가져올 수 없습니다.

바인드 마운트 /etc/group, /etc/sudoers 등을 통해 쉽게 루트를 얻을 수 있다는 것을 알고 있지만 사용 가능한 다른 방법, 특히 액세스하지 않고도 루트 suid 파일을 생성할 수 있는 방법이 있는지 알고 싶습니다. 외부 머신(또는 가상 머신).

답변1

모든 매개변수를 사용하여 sudo mount를 실행할 수 있도록 지정했습니다. 이 경우 귀하의 질문을 오해하지 않는 한 루트 액세스 권한을 얻는 것은 매우 쉬운 것 같습니다. setuid-root 바이너리가 포함된 디스크 이미지를 생성하고 사용하십시오 sudo mount -o loop. 결국 누구나 디스크 이미지를 생성할 수 있으며 바이트만 있으면 됩니다.

이를 입증하기 위해 다음은 이를 수행하는 매우 간단한 쉘 스크립트입니다.

#!/bin/sh

# Prepare the image
mkdir imgsrc
gcc -xc -o imgsrc/runsh - <<EOF
#include <unistd.h>
int
main(int argc, char **argv)
{
    execl("/bin/sh", "sh", NULL);
    return 1;
}
EOF

# Create the image
fakeroot sh -c 'chown -Rh 0:0 imgsrc; chmod u+s imgsrc/runsh; mksquashfs imgsrc img'
rm -rf imgsrc

# Mount the image
mkdir mountpoint
sudo mount -r img mountpoint 

일단 실행되면 간단히 실행하여 루트 쉘을 얻을 수 있습니다 mountpoint/runsh.

fakeroot필요한 도구 가 없다면 mksquashfs간단히 설치하면 되며, 소스 코드는 무료로 제공됩니다. 이 작업을 수행할 수 없는 경우 미리 다른 곳에서 이미지를 생성하여 해당 시스템에 복사할 수 있습니다. 최악의 경우에는 이미지를 Base 64로 인코딩하여 명령줄에 붙여 넣을 수도 있습니다! 내 시스템에서 위 스크립트는 2600바이트만 압축된 이미지를 생성합니다(그것이 정확히 이 숫자여야 한다는 것은 참으로 흥미로운 우연의 일치입니다!),확실해요조금 더 작게 만들려면 조금만 노력하면 됩니다. 예전(주로 1980년대)에는 사람들이 프로그래밍 잡지에서 복사할 수 있는 것보다 더 큰 데이터 덩어리를 수동으로 입력하는 데 익숙했습니다.

관련 정보