Skip to main content

Upgrading Shells

리버스 쉘을 획득한 후 더 나은 상호작용(interactive) 쉘로 업그레이드하는 방법입니다.

Python PTY를 이용한 방법​

# Python 2
python -c 'import pty;pty.spawn("/bin/bash")'

# Python 3
python3 -c 'import pty;pty.spawn("/bin/bash")'

# 배경으로 전환
ctrl + z

# 터미널 설정 변경
stty raw -echo

# 포그라운드로 복귀
fg

# Enter 두 번
Enter
Enter

# 환경 변수 설정
export XTERM=xterm
export TERM=xterm
export SHELL=/bin/bash

전체 업그레이드 프로세스​

# 1. 리버스 쉘 획득 후
python3 -c 'import pty;pty.spawn("/bin/bash")'

# 2. 터미널 크기 확인 (로컬 머신에서)
stty -a
# 결과: rows 37; columns 123

# 3. 쉘 배경으로 전환
ctrl + z

# 4. 로컬 터미널 설정
stty raw -echo
fg

# 5. Enter 두 번
Enter
Enter

# 6. 원격 쉘에서 설정
stty rows 37 cols 123
export TERM=xterm-256color
bash

script를 이용한 방법​

# 방법 1
script -q /dev/null -c bash

# 방법 2
/usr/bin/script -qc /bin/bash /dev/null

원라이너​

# 한 줄로 전체 프로세스
stty raw -echo; fg; ls; export SHELL=/bin/bash; export TERM=screen; stty rows 38 columns 116; reset;

Staircase Effect 수정​

명령어 출력이 계단식으로 나타나는 문제 해결:

# 방법 1
env reset

# 방법 2
stty onlcr

# 방법 3
reset

터미널 크기 설정​

# 로컬 머신에서 크기 확인
stty size
# 예: 37 123

# 원격 쉘에서 설정
stty rows 37 cols 123

추가 환경 변수​

# TERM 설정
export TERM=xterm
export TERM=xterm-256color
export TERM=screen

# SHELL 설정
export SHELL=/bin/bash

# PATH 설정
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Netcat에서 사용 가능한 명령어​

# rlwrap으로 netcat 실행 (히스토리 및 화살표 키 지원)
rlwrap nc -lvnp <LPORT>

# socat으로 완전한 TTY
socat file:`tty`,raw,echo=0 tcp-listen:<LPORT>

참고​

  • Python이 없는 경우 script 사용
  • ctrl + c 사용 가능하려면 stty raw -echo 필수
  • 화살표 키, 탭 완성 사용 가능
  • 터미널 크기 설정으로 화면 깨짐 방지