Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
polyshell — Bash/Batch/PowerShell 폴리글랏! | Kitploit
도구/GitHubGitHub/llamasoft/polyshell
Payload GenerationScripting & AutomationPenetration TestingRed TeamingPayload Development
GitHubllamasoft/polyshell

polyshell

Bash/Batch/PowerShell 폴리글랏!

저장소 보기
225203년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

PolyShell: Bash/Batch/PowerShell 폴리글랏

설명

PolyShell은 Bash, Windows Batch 및 PowerShell에서 동시에 유효한 스크립트입니다 (즉, 폴리글랏).

따라서 PolyShell은 대상별 페이로드 없이 대부분의 시스템에서 실행될 수 있어 침투 테스트에 유용한 템플릿입니다. 또한 PolyShell은 USB Rubby Ducky, MalDuino, 또는 유사한 장치를 통한 입력 주입(injection)으로 전달 가능하도록 특별히 설계되었습니다.

Batch demo Powershell demo Unix shell demo

사용 방법

독립 실행 스크립트로 사용

  1. 스크립트를 복사/이름 변경하여 올바른 파일 확장자(.sh, .bat 또는 .ps1)를 갖도록 합니다.
  2. Unix 셸, 배치 파일 또는 PowerShell로 스크립트를 실행합니다.

입력 주입 사용

  1. 대상 머신에서 터미널을 엽니다.
  2. 페이로드를 실행합니다.
  3. Ctrl-C를 누른 다음 exit를 실행합니다.

입력 주입 방식은 스크립트 방식과 약간 다르게 동작합니다. 스크립트로 실행될 경우 페이로드는 하나의 언어가 처리되자마자 즉시 종료됩니다. 주입을 통해 전달될 경우 페이로드는 대신 읽기 루프(read loop)를 실행합니다. 그렇지 않으면 페이로드가 터미널 창을 닫지만 대신 알 수 없는 창에 계속 입력을 보내게 됩니다. Ctrl-C는 스크립트를 읽기 루프에서 빠져나오게 하여 의도하지 않은 부작용 없이 실행되도록 합니다.

또한, 스크립트를 터미널에 _붙여넣기_하면 실패할 수 있습니다. 스크립트가 읽기 루프에 도달하면 일부 터미널은 남은 붙여넣기 텍스트를 읽기 루프의 입력으로 처리(좋은 경우)하지만, 다른 터미널은 읽기 루프가 종료될 때 스크립트를 계속 실행할 수도 있습니다(나쁜 경우).

작동 원리

주요 트릭은 각 언어가 특정 언어에만 해당하는 코드를 실행할 때 "외면"하도록 만드는 것입니다. 이는 인용(quoting), 리디렉션(redirection), 주석(comments)과 관련된 언어의 미묘한 특성을 이용하여 이루어집니다.
다음 줄을 고려해보세요:

root@kitploit:~
echo \" <<'BATCH_SCRIPT' >/dev/null ">NUL "\" \`" <#"

각 언어는 echo 명령을 보지만, 나머지 줄을 다르게 해석합니다.
예를 들어, 각 언어가 문자열로 해석하는 부분은 다음과 같습니다:

root@kitploit:~
      echo \" <<'BATCH_SCRIPT' >/dev/null ">NUL "\" \`" <#"
Bash                                      [-----]     [---]
Batch       [-----------------------------]     [-]   [---]
PS          [-----------------------------]     [-]

이 줄이 실행된 후, bash 스크립트는 여기 문서(here document)에 들어가고, PowerShell 스크립트는 여러 줄 주석(multiline-comment)에 들어가며, 배치 스크립트는 정상적으로 계속 실행됩니다. 각 언어가 실행을 마치면, 이를 종료합니다. 이렇게 하면 나중에 스크립트에서 해당 언어의 특성과 씨름할 필요가 없습니다.

특이점

분명히, 이 폴리글랏을 만드는 데 필요한 트릭은 일반적인 코딩 관행을 따르지 않습니다.
활용되거나 해결해야 했던 특이점이 꽤 많습니다:

  • 세 언어 모두 다른 이스케이프 문자를 가집니다:
    • Bash: 백슬래시 (\)
    • Batch: 캐럿 (^)
    • PowerShell: 백틱 (`)
  • 이스케이프 문자는 Bash 및 PowerShell 문자열 내에서 작동하지만 Batch 문자열에서는 작동하지 않습니다.
  • 리디렉션(즉, < 및 >)은 인용되지 않은 경우 세 언어 모두에서 특별한 의미를 가집니다.
  • 리디렉션은 명령의 끝에 있을 필요가 없습니다.
    • 다음은 유효한 Bash/Batch/PowerShell입니다: echo >output.txt "Hello World"
  • Batch는 여러 줄 문자열이나 주석이 없는 유일한 언어입니다.
  • Batch는 >가 문자열에 직접 붙어 있어도 리디렉션으로 처리하지만, PowerShell은 그렇지 않습니다.
  • Batch 스크립트의 GOTO 문은 스크립트로 실행될 때만 작동하고, 대화형으로 실행될 때는 작동하지 않습니다.
  • PowerShell의 여러 줄 주석(<#)은 바로 앞에 공백이 와야 합니다.
  • Bash의 여기 문서는 인용되지 않고 주석이 아닌 한 어디서든 시작할 수 있습니다.
도구 다운로드