고양이의 도움으로 파일의 퍼미션 변경


56
root@system:~# less myfile
-bash: /bin/less: Input/output error

루트 파일 시스템이 죽었습니다. 그러나 내 고양이는 여전히 내 기억 속에 살아있다.

root@system:~# cat > /tmp/somefile
C^d
root@system:~#

그는 외로워하지만 그의 모든 친구는 사라졌습니다.

root@system:~# mount
-bash: /bin/mount: Input/output error
root@system:~# dmesg
-bash: /bin/dmesg: Input/output error
root@system:~# less
-bash: /bin/less: Input/output error
root@system:~# chmod
-bash: /bin/chmod: Input/output error

시스템이 여전히 실행 중이며 목적을 달성했습니다. 나는 이것에 대한 유일한 반응은 시스템을 다운시키고 루트 드라이브를 교체하는 것임을 알고 있습니다. 불행히도 많은 시간과 비용이 들기 때문에 옵션이 아닙니다. 또한, 그것은 내 고양이를 죽일 것이고, 그것은 나를 슬프게 할 것입니다.

나는 그의 평범한 친구들을 기증자로부터 데려 오는 것을 생각했다. ssh가 그것을로드하려고 시도하고 라인을 자르려고하는 경우를 대비하여 scp를 시도하지 마십시오 (이진은 어쨌든 사라졌습니다). 이것은 내 고양이 사촌의 직업처럼 들린다.

root@system:~# netcat -l 1234 > /tmp/less
-bash: netcat: command not found

불행히도 그는 오래 갔다.

이제 나는 고양이가 자신을 부활시키기위한 의식을 수행하도록 속일 수 있습니다.

cat > netcat < /dev/tcp/localhost/9999

그리고 그런 종류의 일. 그는 거의 살아있다.

root@system:/tmp# /tmp/netcat
-bash: /tmp/netcat: Permission denied

그는 단지 작은 삶의 불꽃이 필요합니다. +x지금 당장 암송 할 수없는 작은 마법의 주문.

고양이 친구들을 데려 오게 도와 줄 수 있습니까?


3
당신은 /lib/ld-linux.so.2 ./netcat(또는 당신의 시스템의 동등한) 실행하고 뭔가를 얻을 수 있습니까?
마이클 호머

4
또한 : 이것은 어떤 운영 체제입니까? vfat 또는 NTFS 파일 시스템이 마운트되어 있습니까? 네트워크 파일 시스템? 내용을 지울 수있는 파티션? 실행 권한 이 있는 액세스 가능한 파일이 있습니까?
마이클 호머

3
"또한, 그것은 내 고양이를 죽이고 저를 슬프게 할 것입니다." – 나는 항상 "이 생산 과정에서 아이들이 다 치지 않았다"는 말은 단지 한 말일 뿐이라고 생각했습니다.
rugk

7
나는이 모든 고양이 유추에 대해 이것을 완전히 찬성해야했다. 😂
rugk

2
가난한 고양이, 나는 그가 괜찮기를 바랍니다 :(
cat

답변:


37

현재 상황의 정확한 매개 변수에 따라 여러 가지 가능성이 있습니다. 적용 가능한 경우 다음 예제에서 Linux를 가정하지만 대부분의 경우 다른 플랫폼에도 유사한 기능이 있습니다.

  • 동적 로더가 실행 파일을 실행하도록 할 수 있습니다. cat동적으로 연결되어 있다고 가정하면 플랫폼의 /lib/ld-linux.so.2메모리도 메모리에 있으므로 바이너리를 실행할 수 있습니다.

    $ /lib64/ld-linux-x86-64.so.2 ./chmod
    chmod: missing operand
    

    이 중 여러 개 (32 비트 및 64 비트 일 가능성이 있음)가있을 수 있으며 여러 사본이 있거나 해결해야하는 심볼릭 링크가있을 수 있습니다. 그중 하나가 작동 할 수 있습니다.

  • 마운트 된 vfat 또는 NTFS 파일 시스템 또는 모든 파일을 777로 취급하는 시스템이있는 경우 거기에 실행 파일을 만들 수 있습니다.

    $ cat > /mnt/windows/chmod < /dev/tcp/localhost/9999
  • 마운트 된 네트워크 파일 시스템이있는 경우 로컬로 쓸 수없는 경우에도 원격 시스템에서 파일을 작성하고 정상적으로 사용할 수 있습니다.
  • 내용이 중요하지 않은 마운트 된 파티션이있는 경우, 여전히 대부분 작동하는 드라이브에서 내용을 원하는 실행 파일이 포함 된 동일한 파일 시스템 유형의 새 이미지로 바꿀 수 있습니다 cat. 사람들이 일반적으로 사용 dd하는 역할 이며 네트워크를 통해 이미지를 제공 할 수 있습니다.

    $ cat > /dev/sdb1 < ...

    이것은 그럴듯하지만 그 파티션의 메모리에 정확히 무엇이 있는지에 따라 작동하지 않는 곳이 많이 있습니다.

  • 쓰기 가능한 파일 시스템에 대한 실행 권한 이 있는 액세스 가능한 파일 이 있으면 파일을 cat >선택하여 선택한 바이너리로 내용을 바꿀 수 있습니다 .

    $ cat > ~/test.py < ...
  • Bash가 여전히 실행 중이므로 chmod를 노출하는 프로세스에 Bash 플러그인을 동적으로로드 할 수 있습니다. 특히 Bash에 외부 함수 인터페이스를 제공 한 다음을 설치하고로드ctypes.sh 할 수 dlcall chmod ./netcat 511있습니다.
  • foo.so구성 의 동적 라이브러리 파일 을 가져온 다음 cat을 통해 대신로드하여 LD_PRELOAD임의 코드를 실행할 수 있습니다.

    $ LD_PRELOAD=./hack.so cat /dev/null

    예를 들어 가로채는 경우 open:

    int open(const char *path, int flags, ...) {
        chmod(path, 0755);
        return -1;
    }
    

    거기에서해야 할 일을 할 수 있습니다.

내 제안은 정적으로 링크 된 busybox실행 파일을 첫 번째 항목 (또는 실제로는 유일한 항목) 으로 가져 와서 해킹에 대한 해킹을 재사용하지 않고도 사용 가능한 모든 명령을 사용할 수 있도록하는 것입니다.


3
"정적으로 연결됨 busybox": sash이러한 종류의 유스 케이스를 위해 특별히 설계되었으며 핀치에서 더 쉽게 사용할 수 있습니다 (예 : 사전에 설치하고 사본을 시스템에 저장할 때 메모리에 있도록 사본을 남겨 둘 수 있음) 휴식을 취하거나 애완 동물을 버리고 대신 소를 구입할 수 있습니다.)
케빈
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.