쉘 업그레이드: bash를 사용하여 typescript 명령 작성

쉘 업그레이드: bash를 사용하여 typescript 명령 작성

이것이 무엇을 의미하는지 설명할 수 있는 사람이 있습니까?

SHELL=/bin/bash script -q /dev/null

CTF에서 쉘을 업그레이드하는 데 사용됩니다.HTB:

 SHELL=/bin/bash script -q /dev/null
 Ctrl-Z
 stty raw -echo
 fg
 reset
 xterm

이 게시물의 내용과 유사합니다.간단한 셸을 완전 대화형 TTY로 업그레이드, 하지만 그게 무슨 일인지 이해가 안 돼요.

man script설명하다:

NAME
       script - make typescript of terminal session
SYNOPSIS
       script [options] [file]

   script makes a typescript of everything displayed on your terminal.  It is useful for students
   who need a hardcopy record of an interactive session as proof of an assignment, as  the  type‐
   script file can be printed out later with lpr(1).

그리고

   -q, --quiet
          Be quiet (do not write start and done messages to standard output).

답변1

netcat따라서 여기서의 맥락은 아마도 터미널과 유사한 것을 사용하여 어딘가에서 실행되는 쉘에 대한 일반적인 TCP 연결이 있다는 것입니다 . "정상"이란 SSH 등을 통해 쉘에 의사 터미널(pty)을 제공하는 대신 쉘(stdin/stdout)이 네트워크 소켓에 직접 연결된다는 의미입니다.

의사 터미널은 ^C 및 ^Z 등을 처리하는 등 모든 지능이 발생하는 계층이기 때문에 중요합니다.

SHELL=/bin/bash script -q /dev/null

로 설정된 script환경 변수 와 매개변수 및 로 실행 됩니다 . 요점 은 쉘 세션이 입력으로 얻는 모든 것을 기록하고 출력으로 인쇄하는 것입니다. 이를 위해 pty를 사용합니다. 또한 런타임에 모든 것을 제공합니다. 로 전송되는 실제 레코드가 아니라 여기서 초점은 pty를 만드는 것입니다 . 시작 시 메시지를 인쇄하지 않습니다 .SHELL/bin/bash-q/dev/nullscript/dev/null-qscript

Ctrl-Z

를 통해 원격에 연결한다고 가정합니다 netcat.현지의터미널이 ^Z를 처리하는 모드에 있을 수 있습니다. 따라서 로컬 netcat 프로세스가 중단됩니다.

stty raw -echo

그런 다음 원격 pty를 방해하지 않도록 로컬 터미널을 원시 모드로 설정합니다.

fg

netcat을 다시 시작하십시오. 이제 원격 측에 pty가 열려 있는 쉘이 있고 로컬 터미널이 이를 방해하지 않습니다.

reset

원격 터미널을 재설정합니다. 이것이 필요한지 잘 모르겠습니다. 당신이 링크한 기사에는 그것이 필요한 것 같지만, 그것이 없어도 제겐 잘 작동합니다.

초기화현지의원격 뒤에서 터미널을 종료하는 것이 더 어려울 수 있습니다 script. 왜냐하면 로컬 터미널이 원격에서 실행 중인 연결된 netcat과 함께 원시 모드에 있고 해당 netcat을 죽이기가 어렵기 때문입니다. 그러나 로컬 xterm/screenwindow/셸이 실행 중인 모든 것을 종료할 수 있습니다. 아니면 exec script원격으로 실행할 수도 있습니다.

관련 정보