Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
HRShell — HRShell은 flask로 구축된 HTTPS/HTTP 리버스 셸입니다. 다양한 기능과 역량을 갖춘 고급 C2 서버입니다. | Kitploit
도구/GitHubGitHub/chrispetrou/hrshell
Encryption/Decryption ToolsExploitationReverse EngineeringShellcodePost-ExploitationWeb SecurityPenetration TestingCommand and ControlRed TeamingPayload DevelopmentArchived
24869255년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitHub
chrispetrou/hrshell

HRShell

HRShell은 flask로 구축된 HTTPS/HTTP 리버스 셸입니다. 다양한 기능과 역량을 갖춘 고급 C2 서버입니다.

저장소 보기
HRShell: Flask로 구축된 고급 HTTP(S) 리버스 셸

GPLv3 license version Known Vulnerabilities



__HRShell__은 Flask로 구축된 HTTPS/HTTP 리버스 셸이며 __python 3.x__와 호환됩니다. client.py는 다음에서 성공적으로 테스트되었습니다:

  • Linux ubuntu 18.04 LTS, Kali Linux 2019.3
  • macOS Mojave/Catalina
  • Windows 7/10

server.py는 Unix 시스템과 호환됩니다 (Windows 지원은 곧 제공 예정...).

기능

  • 은밀함
  • TLS 지원 🔑
    • 즉석 인증서 사용 또는
    • 인증서/키 쌍 지정 (자세한 내용은 아래 참조...)
  • 셸코드 인젝션 💉 (자세한 내용은 아래 참조...)
    • 현재 실행 중인 프로세스의 스레드/생성된 프로세스에 셸코드 인젝션
      • 현재 지원되는 플랫폼:
        • Windows x86
        • Unix x86
        • Unix x64
    • 또는 PID를 지정하여 다른 프로세스에 셸코드 인젝션 (migrate <PID>)
      • 현재 지원되는 플랫폼:
        • Windows x86
        • Windows x64
  • 서버에서 셸코드를 실시간으로 설정/수정 가능 (자세한 내용은 아래 참조...)
  • 클라이언트의 프록시 지원.
  • 디렉터리 탐색 (cd 명령어 및 변형).
  • Unix 시스템에서 사용 가능한 대화형 history 명령어.
  • download/upload/screenshot/hex 명령어 사용 가능.
  • 파이프라인(|) 및 체인 명령어(;) 지원
  • 모든 비대화형 명령어 지원 (예: gdb, top 등).
  • 서버는 HTTP 및 HTTPS 모두 지원.
  • 현재까지 두 가지 내장 서버 🌐 지원: flask 내장 및 tornado-WSGI, 다른 프로덕션 서버(예: gunicorn 및 Nginx)와도 호환 가능.
  • server.py와 client.py 모두 쉽게 확장 가능.
  • 대부분의 기능이 서버의 엔드포인트 설계에서 비롯되므로 다른 언어(예: Java, GO 등)로 클라이언트를 작성하기 매우 쉬움.

*버전 변경 사항은 CHANGELOG를 확인하세요.

세부 사항


은밀함 :shipit:

HRShell은 클라이언트와 서버 간 통신 방법으로 HTTP(S) 프로토콜을 사용하므로 은밀합니다. 또한 TLS를 사용할 때 트래픽이 암호화됩니다. 클라이언트 측에 CERT가 하드코딩되지 않은 경우(이는 가능한 옵션임) upload 명령어를 사용하지 않으면 client.py는 디스크에 전혀 접촉하지 않습니다.

TLS 🔑

서버 측: --http 옵션이 지정되지 않은 경우, 기본적으로 server.py는 즉석 인증서를 사용하는 HTTPS입니다. 즉석 인증서는 Flask 내장 기능이기 때문입니다. 하지만 -s tornado 옵션이 지정되어 서버가 TLS를 사용하도록 하려면 --cert 및 --key 옵션을 다음과 같이 지정해야 합니다:

python server.py -s tornado --cert /path/cert.pem --key /path/key.pem

"진짜" 인증서를 사용하거나, 인증서/키 쌍을 생성하는 다른 방법으로는 예를 들어 mkcert를 사용하거나 openssl을 직접 사용하는 방법이 있습니다:

openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365

Flask 서버에서도 인증서/키 쌍을 사용할 수 있습니다:

python server.py --cert /path/cert.pem --key /path/key.pem

⚠️ 서버가 TLS를 사용하는 경우, 설계상 클라이언트는 http://...를 사용하여 서버에 연결할 수 없으며 반드시 https를 명시적으로 사용해야 합니다.

클라이언트 측: 기본적으로 클라이언트의 SSL _확인_은 비활성화되어 있습니다. 단, 다음 경우는 예외입니다:

  • --cert 매개변수가 지정된 경우, 예:
    python client.py -s https://192.168.10.7:5000 --cert /path/cert.pem
    
  • 또는 기본값 None 대신 CERT 변수에 유효한 인증서가 미리 설정된 경우, 예:
    CERT = """
    -----BEGIN CERTIFICATE-----
    MIIBoDCCAUoCAQAwDQYJKoZIhvcNAQEEBQAwYzELMAkGA1UEBhMCQVUxEzARBgNV
    BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMSMwIQYD
    VQQDExpTZXJ2ZXIgdGVzdCBjZXJ0ICg1MTIgYml0KTAeFw05NzA5MDkwMzQxMjZa
    ...
    -----END CERTIFICATE-----
    """
    
    이 경우 client.py는 즉석에서 숨겨진 .cert.pem 파일을 생성하려고 시도하고 이를 대신 사용합니다.

⚠️ 클라이언트에서 SSL 확인이 기본적으로 비활성화되어 있다고 해서 TLS도 비활성화된다는 의미는 절대 아닙니다. 서버에서 TLS를 사용하면 TLS가 활성화됩니다 - 따라서 TLS는 전적으로 서버에 달려 있습니다. 클라이언트의 --cert 옵션은 단지 서버-클라이언트가 암호화된 세션을 가질 수 있는 대안적인 방법일 뿐입니다.

셸코드 인젝션 💉

다음 두 명령어를 각각 사용하여 셸코드 인젝션의 두 가지 "모드"가 있습니다:

  1. migrate <PID>: 이 명령어를 사용하면 PID를 지정하여 다른 프로세스의 메모리 공간에 셸코드를 주입할 수 있습니다. 현재 이 명령어는 Windows x86/x64 플랫폼에서만 적용 가능합니다!
  1. inject shellcode: 이 명령어를 사용하면 현재 프로세스의 새 스레드(또는 Unix 시스템에서는 생성된 프로세스)를 만들고 해당 메모리 공간에 셸코드 인젝션이 발생합니다. 결과적으로 HTTP(S) 셸은 인젝션의 영향을 받지 않습니다. 이 명령어를 적용할 수 있는 플랫폼은: Unix x86/x64, Windows x86 플랫폼입니다!
참고 사항
  • 프로세스에 인젝션이 발생하는 경우, 프로세스 권한이 매우 중요한 역할을 합니다. 적절한 권한이 부족하여 모든 프로세스에 인젝션할 수 있는 것은 아닙니다.

셸코드 설정/수정

클라이언트가 실행할 셸코드 유형을 지정/설정하는 두 가지 방법이 있습니다:

  • client.py 스크립트에서 shellcode 변수를 유효한 셸코드로 미리 설정하거나
  • set shellcode <shellcode-id> 명령어를 사용하여 실시간으로 설정합니다. 이 명령어를 사용하면 서버 측에서 클라이언트 측의 셸코드를 원하는 만큼 업데이트할 수 있습니다!

첫 번째 방법은 매우 간단합니다. 그러나 두 번째 더 편리한 방법(이미 지정된 셸코드를 수정할 수도 있음)을 사용하려면 shellcodes/utils.py 스크립트에 원하는 셸코드가 포함되도록 설정해야 합니다. 이 스크립트에는 이를 수행하는 방법의 예제가 포함되어 있습니다.

💡 server.py를 실행한 후에도 shellcodes/utils.py 스크립트를 원하는 만큼 수정/업데이트할 수 있습니다. server.py는 동적으로 가장 최근 버전을 사용하기 때문입니다. 이렇게 하면 이동 중에도 셸코드를 설정하고 수정할 수 있습니다.

사용 가능한 명령어:

특수 명령어:

다른 명령어는 _예: gdb, top 등_과 같이 대화형이 아닌 경우 모두 지원됩니다. 또한 python server.py -h 또는 python client.py -h를 입력하면 서버 및 클라이언트에서 사용 가능한 인수에 대한 정보를 얻을 수 있습니다.

참고: 클라이언트가 서버에 연결되어 있는 상태에서 서버를 종료하려면 CTRL+C를 누르기 전에 exit 명령어를 사용하여 연결을 닫아야 합니다.

사용자 정의 명령어 생성

클라이언트 측:

사용자 정의 명령어를 생성하려면 일반적으로:

  • 클라이언트 측에서 명령어를 설명하는 정규식 규칙을 정의해야 함
  • 해당 명령어를 처리하는 코드를 클라이언트 측에서 elif 문으로 추가해야 함

서버 측:

명령어가 서버 측에 새 엔드포인트가 필요하다면:

  • 엔드포인트 정의:
    @app.route('/custom_endpoint/<arg>')
    def custom_endpoint(arg):
        """
        필요한 경우 문서화
        """
        ...
        return ...
    
  • 그런 다음 handleGET()을 수정하여 클라이언트를 해당 엔드포인트로 리디렉션:
    @app.route('/')
    def handleGET():
        ...
        return redirect(url_for('custom_endpoint',
            arg=...)
            )
    
  • handlePOST()를 적절히 수정하여 결과 표시를 처리합니다.

스크립트 인수

두 스크립트(server.py 및 client.py)는 인수를 통해 사용자 지정할 수 있습니다:

server.py

$ python server.py -h
usage: server.py [-h] [-s] [-c] [--host] [-p] [--http] [--cert] [--key]

server.py: 고급 기능을 갖춘 HTTP(S) 리버스 셸 서버.

인수:
  -h, --help      도움말 메시지를 표시하고 종료
  -s , --server   사용할 HTTP(S) 서버 지정 (기본값: flask).
  -c , --client   지정된 클라이언트/IP에서만 연결 수락.
  --host          사용할 IP 지정 (기본값: 0.0.0.0).
  -p , --port     사용할 포트 지정 (기본값: 5000).
  --http          TLS 비활성화 및 HTTP 사용.
  --cert          사용할 인증서 지정 (기본값: None).
  --key           사용할 해당 개인 키 지정 (기본값: None).

client.py

$ python client.py -h
usage: client.py [-h] [-s] [-c] [-p]

client.py: 고급 기능을 갖춘 HTTP(S) 클라이언트.

인수:
  -h, --help      도움말 메시지를 표시하고 종료
  -s , --server   연결할 HTTP(S) 서버 지정.
  -c , --cert     사용할 인증서 지정.
  -p , --proxy    사용할 프록시 지정 [형식: host:port]

📦 요구 사항:

서버 요구 사항을 설치하려면:

도구 다운로드