
Penelope 셸 핸들러
Penelope는 침투 테스터와 CTF 플레이어를 위한 현대적인 쉘 핸들러입니다. 기본 netcat 리스너보다 더 강력한 대안을 제공하며, 자동 PTY 업그레이드, 세션 관리, 로깅, 파일 전송 및 헬퍼 모듈을 추가합니다.
Penelope는 Linux, macOS, FreeBSD를 포함한 Unix 계열 시스템에서 실행되며 **Python 3.6+**이 필요합니다.
Penelope는 Kali Linux에서 사용할 수 있습니다:
sudo apt update
sudo apt install penelope
Penelope는 Python 표준 라이브러리만으로 구현되어 외부 의존성 없이 독립 스크립트로 실행할 수 있습니다:
wget -q https://raw.githubusercontent.com/brightio/penelope/refs/heads/main/penelope.py && python3 penelope.py
GitHub에서 최신 업스트림 버전을 직접 설치하려면:
pipx install git+https://github.com/brightio/penelope
버전이 지정되고 더 안정적인 릴리스 경로를 위해 Penelope는 PyPI에서도 사용할 수 있습니다:
pipx install penelope-shell-handler
(*) upgrade 명령으로 수동으로 PTY로 업그레이드 가능
⚠️ Windows 지원은 실험적이며 활발히 개발 중입니다.
set DisablePayloadHandler True로 기본 핸들러를 비활성화하면 Metasploit 익스플로잇과 함께 작동 가능--mcp 스위치로 로컬 HTTP(토큰 인증)를 통해 MCP 클라이언트(예: Claude Code)에 라이브 세션 노출, 사용자와 함께 동일한 쉘 구동

penelope # 0.0.0.0:4444에서 리버스 쉘 수신
penelope -p 5555 # 0.0.0.0:5555에서 리버스 쉘 수신
penelope -p 4444,5555 # 0.0.0.0:4444 및 0.0.0.0:5555에서 리버스 쉘 수신
penelope -i eth0 -p 5555 # eth0:5555에서 리버스 쉘 수신
penelope -a # 0.0.0.0:4444에서 리버스 쉘 수신 및 샘플 리버스 쉘 페이로드 표시
penelope -c target -p 3333 # target:3333의 바인드 쉘에 연결
penelope ssh user@target # 로컬 포트 4444를 통해 target에서 리버스 쉘 획득
penelope -p 5555 ssh user@target # 로컬 포트 5555를 통해 target에서 리버스 쉘 획득
penelope -i eth0 -p 5555 -- ssh -l user -p 2222 target # eth0, 로컬 포트 5555를 통해 target에서 리버스 쉘 획득 (ssh에 스위치가 필요하면 -- 사용)
penelope -s <File/Folder> # HTTP로 파일 또는 폴더 공유

-s)Penelope는 빠른 HTTP 파일 서버로도 사용할 수 있습니다.
penelope -s file.txt # 0.0.0.0:8000에서 단일 파일 제공
penelope -s /path/to/dir # 전체 폴더 제공
penelope -s a.sh b.elf notes.txt # 여러 항목을 한 번에 제공
penelope -s . -p 80 # 현재 디렉토리를 80번 포트에 제공
penelope -s secret.txt -prefix xk9 # URL 접두사 뒤에 숨기기: /xk9/secret.txt
penelope -s -u # 업로드 모드: CWD로 PUT/POST 수락
penelope -s -u -ud /tmp/loot # 업로드 모드, 수신 파일을 /tmp/loot에 저장
시작 시 Penelope는 인터페이스별로 바로 사용 가능한 링크(및 -u가 설정된 경우 업로드 힌트)를 출력하므로 대상 쉘에 바로 복사하여 붙여넣을 수 있습니다.
아래 동영상에서 볼 수 있듯이, 단 몇 초 안에 다음을 수행할 수 있습니다:
https://github.com/brightio/penelope/assets/65655412/7295da32-28e2-4c92-971f-09423eeff178
참고 사항:
F12를 눌러야 합니다. 업그레이드가 불가능하여 기본 쉘로 끝난 경우 Ctrl+C로 분리할 수 있습니다. 이는 실수로 쉘을 종료하는 것을 방지합니다.interact 1 대신 i 1을 입력할 수 있습니다.
positional arguments:
args -s/--serve 및 SSH 리버스 쉘 모드에 대한 인수
options:
-p, --ports -i/-c/-s 옵션에 따라 수신/연결/제공할 포트(쉼표로 구분)
(기본값: 4444/5555/8000)
Reverse or Bind shell?:
-i, --interface 수신할 로컬 인터페이스/IP (기본값: 0.0.0.0)
-c, --connect 바인드 쉘 호스트
-j, --jump 리버스 쉘 점프 엔드포인트
Hints:
-a, --payloads 활성 리스너에 대한 샘플 리버스 쉘 페이로드 표시
-l, --interfaces 사용 가능한 네트워크 인터페이스 목록
-h, --help 이 도움말 메시지를 표시하고 종료
Session Logging:
-L, --no-log 세션 로그 파일 비활성화
-T, --no-timestamps 로그의 타임스탬프 비활성화
-CT, --no-colored-timestamps 로그의 색상 타임스탬프 비활성화
Misc:
-M, --menu 메인 메뉴에서 시작
-m, --maintain 대상당 N개의 세션 유지
-S, --single-session 처음 생성된 세션만 수용
-ms, --max-sessions 호스트당 최대 활성 세션 (기본값 5, 0 = 모든 새 연결 거부)
-C, --no-attach 새 세션에 자동 연결 안 함
-U, --no-upgrade 쉘 자동 업그레이드 비활성화
-H, --keep-history 대상 쉘 기록 유지 (HISTFILE=/dev/null 설정 안 함)
-O, --oscp-safe OSCP 안전 모드 활성화
--no-disk 모든 상태를 RAM(tmpfs)에 유지, 디스크에 저장 안 함
MCP:
--mcp 로컬 HTTP를 통한 MCP 서버 활성화
--mcp-host 바인딩할 호스트/IP (기본값: 127.0.0.1)
--mcp-port 바인딩할 포트 (기본값: 저장된 포트, 없으면 무작위 여유 포트를 생성하여 ~/.penelope/mcp.json에 저장)
--mcp-token Bearer 토큰 (기본값: 저장된 토큰, 없으면 자동 생성하여 저장)
File server:
-s, --serve HTTP 파일 서버 모드 실행
-prefix, --url-prefix URL 경로 접두사
-u, --upload 파일 업로드(PUT/POST)를 서버에 활성화
-ud, --upload-dir 업로드 저장 디렉토리 (기본값: CWD)
Debug:
-N, --no-bins 대상에서 누락된 바이너리 시뮬레이션 (쉼표로 구분)
-v, --version 버전 출력 후 종료
-d, --debug 디버그 출력 활성화
-dd, --dev-mode 개발자 모드 활성화
-cu, --check-urls 하드코딩된 URL 상태 확인 후 종료
Penelope는 원격 쉘과의 직접적이고 유연한 상호작용을 위해 설계되었습니다. 사용 시 다음 사항에 유의하십시오:
터미널 이스케이프 시퀀스: Penelope는 원격 시스템의 터미널 출력을 로컬 터미널 에뮬레이터로 직접 전달합니다. 악성 원격 프로세스는 터미널 이스케이프 시퀀스를 사용하여 화면을 조작하거나, 오해의 소지가 있는 링크를 만들거나, 클립보드와 같은 기능과 상호작용할 수 있습니다. 이러한 노출은 원격 쉘을 로컬 터미널에 중계하는 모든 도구(SSH, telnet, netcat 등)에 내재된 위험이며 Penelope만의 문제는 아닙니다. 신뢰할 수 없는 시스템에 연결할 때는 적절한 보안 설정이 적용된 터미널을 사용하십시오.
세션 로그: 세션 로그에는 대상에서 수신한 자격 증명, 토큰, 명령 및 기타 민감한 정보가 포함될 수 있습니다. 안전하게 보관하고 로깅이 필요하지 않은 경우 --no-log를 사용하십시오.
암호화되지 않은 연결: 표준 리버스 및 바인드 쉘 연결은 암호화되지 않습니다. 트래픽이 안전한 터널 또는 VPN으로 보호되지 않는 한 신뢰할 수 없는 네트워크를 통한 사용을 피하십시오.
MCP 서버 (--mcp): 활성화되면 MCP 서버는 Bearer 토큰을 보유한 모든 클라이언트에게 모든 활성 세션(명령 실행, 파일 전송)에 대한 전체 제어 권한을 부여합니다. 이 토큰은 ~/.penelope/mcp.json(0600 권한)에 저장됩니다. 127.0.0.1에 바인딩되고 토큰 인증을 사용합니다. 토큰을 비밀로 유지하고 신뢰할 수 없는 네트워크에 서버를 노출하지 마십시오.
⚖️ 면책 조항: Penelope는 승인된 보안 테스트, 연구 및 교육 목적으로만 사용해야 합니다. 명시적 허가 없이 시스템에 대해 사용하지 마십시오.
cat 같은 도구로 로그 파일을 보면 손상된 것처럼 보일 수 있습니다. 이러한 이스케이프 시퀀스를 필터링하여 로그 출력을 더 깔끔하게 만드는 것이 계획되어 있습니다.Penelope의 핵심 쉘 처리 기능은 자동 익스플로잇을 수행하지 않으므로 OSCP 스타일 사용에 적합합니다. 그러나 시험 규칙은 변경될 수 있으므로 시험 중 도구를 사용하기 전에 항상 최신 OffSec 공식 규칙을 확인하십시오.
일부 모듈은 추가 주의가 필요합니다:
실수로 규칙을 위반하지 않으려면 -O / --oscp-safe 스위치를 사용하십시오.
사용 중인 쉘 업그레이드 유형에 따라 다릅니다:
F12 누름Ctrl-D)Ctrl-C)어떤 경우든 세션에 연결할 때 올바른 키가 항상 표시됩니다. 예:

peneloperc를 참조하십시오.
이는 일반적으로 다른 사용자로 새 대화형 쉘을 열었기 때문입니다. Penelope 에이전트는 초기 쉘의 디렉토리만 추적하고 첫 번째 쉘의 사용자 권한을 유지합니다. 가장 좋은 해결 방법은 새 쉘을 열기 전에 cd /tmp를 수행하거나, 사용자를 전환한 경우 새 사용자로 리버스 쉘을 생성하는 것입니다.
여러분의 기여는 매우 소중합니다! 도움을 주시려면 버그, 예상치 못한 동작을 보고하거나 새로운 아이디어를 공유해 주십시오. 또한 풀 리퀘스트를 제출할 수 있지만, PEP8을 강제하고 의도치 않게 전체 코드베이스를 재구성하는 IDE에서 커밋하는 것은 피해 주십시오.
Penelope는 오디세우스의 아내로, 그가 돌아올 때까지 충성과 인내로 기다린 것으로 유명합니다. 이 도구는 기본 리스너를 넘어서는 워크플로를 위한 믿음직하고 안정적인 쉘 핸들러로 만들어졌기 때문에 그녀의 이름을 따서 명명되었습니다.
| 기능 | Unix 계열 대상 | Windows 대상 |
|---|
| 자동 쉘 업그레이드 | PTY | readline(*) |
| 실시간 터미널 크기 조정 | ✅ | ❌ |
| 쉘 활동 로깅 | ✅ | ✅ |
| 원격 파일/폴더 다운로드 | ✅ | ✅ |
| 로컬/HTTP 파일/폴더 업로드 | ✅ | ✅ |
| 실시간 출력 다운로드가 포함된 인메모리 로컬/HTTP 스크립트 실행 | ✅ | ❌ |
| 로컬 포트 포워딩 | ✅ | ❌ |
| 여러 탭 및/또는 호스트에 쉘 생성 | ✅ | ❌ |
| 호스트당 N개의 활성 쉘 자동 유지 (종료 시 재생성) | ✅ | ❌ |