Shell 안정화

agnusdei·2025년 11월 23일

CTF

목록 보기
173/185

📖 stty 명령어란?

sttySet Terminal TYpes의 약자(또는 Set TTY의 약자)로, 현재 세션이 연결된 터미널 라인(Terminal Line)설정을 출력하거나 변경하는 명령어입니다.

컴퓨터가 키보드 입력을 처리하고 화면에 출력을 보내는 방식을 제어하는 데 사용됩니다.

⚙️ 핵심 역할: 입력 처리 모드 변경

stty 명령의 가장 중요한 역할은 터미널의 입력 처리 모드를 변경하는 것입니다. 모드는 크게 두 가지가 있습니다.

모드속성설명
Cooked Mode (기본 모드)icanon, echo일반적인 셸 모드입니다. 사용자가 줄바꿈(Enter)을 누를 때까지 입력 버퍼에 문자를 모아두고, Delete, Backspace 등의 편집 키를 미리 처리합니다. 또한, 입력한 문자를 화면에 반향(Echo)하여 보여줍니다.
Raw Mode (원시 모드)-icanon, -echo특수 셸 모드입니다. 키보드로 입력된 모든 문자를 즉시, 가공 없이 프로그램(셸)에게 전달합니다. 편집 키나 Ctrl+C 같은 제어 문자도 프로그램으로 바로 전달됩니다.

🎯 stty raw -echo; fg 분석

사용자님께서 입력하신 명령어 조합은 비대화형 셸을 완벽하게 안정화하는 표준적인 방법입니다.

1. stty raw -echo

이 부분은 stty 명령에 두 가지 설정을 한 번에 적용한 것입니다.

  • raw: 원시 모드 (Raw Mode)를 활성화합니다.
    • 이것은 icanon (정규 입력 처리) 설정을 비활성화하고 isig (인터럽트 신호 처리) 설정 등을 비활성화하는 것을 포함합니다. 즉, 셸이 키보드 입력을 즉시 처리하게 만듭니다.
  • -echo: 반향 (Echo) 기능을 비활성화합니다.
    • 일반적으로 문자를 입력하면 화면에 바로 출력되는데(Echo), -echo를 설정하면 입력이 처리되긴 하지만 화면에는 보이지 않습니다. (마치 비밀번호 입력하는 것처럼요.)

💡 왜 -echo가 필요할까요?

이 명령어 조합을 사용하기 직전에 Ctrl+Z를 눌러서 셸을 잠시 일시 정지(Suspend)시켰습니다. 이때 fg 명령으로 이 셸을 다시 포그라운드(Foreground)로 가져올 것인데, stty raw만으로는 출력이 이상하게 중복될 수 있습니다. -echo를 추가해 이 중복 현상을 방지하고 깔끔한 화면을 유지합니다.

2. ; (세미콜론)

두 명령어를 순차적으로 실행하도록 구분하는 기호입니다.

3. fg (Foreground)

이전에 Ctrl+Z를 눌러 백그라운드 (Background)로 보냈던 (일시 정지된) 셸 프로세스를 다시 포그라운드 (Foreground)로 불러와 실행을 재개하는 명령어입니다.

✨ 전체 과정 요약 (Shell 안정화)

  1. python -c 'import pty;pty.spawn("/bin/bash")': TTY (Teletype)와 유사한 가상 터미널 환경을 만들어 Bash 셸을 획득했습니다. (불안정한 셸)
  2. export TERM=xterm: 프로그램들이 터미널 기능을 인식할 수 있도록 TERM 변수를 설정했습니다. (방향키, Tab 완성 등을 위한 설정)
  3. ^Z (Ctrl+Z): 현재 실행 중인 셸 프로세스를 일시 정지하고 백그라운드로 보냈습니다.
  4. stty raw -echo: 터미널의 입력 처리 모드를 Raw Mode로 바꾸고, 화면 반향(echo)을 껐습니다.
  5. fg: 백그라운드에 있던 (일시 정지된) 셸을 다시 포그라운드로 불러와 실행을 재개했습니다.

이 과정을 거치면, Tab 자동 완성, 화살표키, Ctrl+C, Ctrl+Z 등이 모두 정상적으로 작동하는 완벽하게 안정화된 대화형 셸을 갖게 되어 본격적인 권한 상승 작업을 진행할 수 있게 됩니다.

profile
DevSecOps, Pentest, Cloud(OpenStack), Develop, Data Engineering, AI-Agent

0개의 댓글