이 명령은 어떻게 작동하나요? mkfifo /tmp/f;cat/tmp/f | /bin/sh -i 2>&1 | NC -l 1234

이 명령은 어떻게 작동하나요? mkfifo /tmp/f;cat/tmp/f | /bin/sh -i 2>&1 | NC -l 1234

나는 오늘 매뉴얼 페이지를 읽는 nc동안 이 명령을 우연히 발견했습니다 . 알아요:

  • mkfifo /tmp/f네임드 파이프 생성/tmp/f.

  • cat /tmp/f이 명명된 파이프에 기록된 모든 내용이 인쇄되고 출력은 cat /tmp/f다음으로 파이프됩니다./bin/sh

  • /bin/sh대화형으로 실행되고 stderr은 stdout으로 리디렉션됩니다.
  • `그런 다음 출력은 포트 1234에서 수신 대기 중인 nc로 파이프됩니다.
  • 출력은 결국 명명된 파이프로 다시 리디렉션됩니다.

실행 시 이 포트(예: 1234)에 연결된 원격 서버는 셸 프롬프트를 열고 클라이언트는 임의의 명령을 실행할 수 있습니다. 하지만 어떻게 작동하나요?

답변1

이러한 명령은 TTY에 연결할 때 기본적으로 활성화되는 IO 리디렉션 및 sh 대화형 모드를 활용합니다.

cat은 FIFO에서 열린 상태로 유지됩니다. 이것이 첫 번째 단서입니다. sh가 실행될 때 수행하는 작업은 stdout 및 strerr을 TTY로 보내는 것뿐입니다. 대조적으로, sh는 TTY에 연결되지 않습니다. 일반적으로 sh는 TTY에 연결할 때 자동으로 대화형 모드로 들어가지만 -i 옵션을 추가하지 않기 때문입니다. 이는 새로운 명령의 입력을 계속 받아들인다는 것을 의미합니다. 이러한 명령의 출력은 nc의 표준 입력으로 전달되고, nc의 출력(즉, 네트워크를 통해 전송된 명령)은 FIFO로 리디렉션됩니다.

FIFO는 기본적으로 리디렉션 루프를 완료하기 위해 명명된 파이프로 사용됩니다.

sh와 nc가 루프에서 서로 리디렉션하는 것으로 더 간단하게 생각할 수 있습니다. 나머지 명령은 쓸모가 없습니다.

관련 정보