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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
R2Socks — Cloudflare R2 객체 스토리지를 통해 터널링되는 SOCKS5 프록시로, Python 및 종속성 없는 C++ 에이전트가 암호화된 R2 객체를 통해 TCP 트래픽을 중계하여 은밀한 접근을 제공합니다. | Kitploit
도구/GitHubGitHub/ivancabrera02/r2socks
Encryption/Decryption ToolsData ExfiltrationPost-ExploitationNetwork SecurityPenetration TestingCommand and ControlRed TeamingRemote Access Tool
GitHubivancabrera02/r2socks

R2Socks

Cloudflare R2 객체 스토리지를 통해 터널링되는 SOCKS5 프록시로, Python 및 종속성 없는 C++ 에이전트가 암호화된 R2 객체를 통해 TCP 트래픽을 중계하여 은밀한 접근을 제공합니다.

저장소 보기
3161417일 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

R2Socks

Cloudflare R2 버킷을 통해 터널링되는 SOCKS5 프록시.

root@kitploit:~
[Client App] ◄─SOCKS5─► [Proxy] ◄─── R2 Bucket ───► [Agent] ◄─TCP─► [Target]

프록시는 운영자 머신에서 로컬 SOCKS5 서버를 실행합니다. 모든 CONNECT 요청은 바이너리 패킷으로 직렬화되어 R2 객체로 저장됩니다. 에이전트는 대상 네트워크에서 동일한 버킷을 폴링하여 연결 요청을 가져오고, 실제 TCP 연결을 설정한 후 R2를 통해 데이터를 릴레이합니다.

구성 요소

구성 요소언어파일설명
ProxyPythonr2socks.pySOCKS5 서버 (운영자 측)
AgentPythonr2socks.py대상 측 릴레이 (에이전트 모드)
AgentC++r2agent.cpp독립 실행형 Windows 에이전트, 의존성 없음

C++ 에이전트는 Python 프록시와 프로토콜 호환됩니다. Windows 네이티브 API(WinHTTP, bcrypt, Winsock2)만 사용하며 외부 라이브러리가 필요하지 않습니다.

빠른 시작

1. R2 버킷 생성

  1. Cloudflare Dashboard → R2 Object Storage로 이동
  2. Create bucket을 클릭하고 이름 지정
  3. URL에서 Account ID 확인: dash.cloudflare.com/<ACCOUNT_ID>/r2/...

2. R2 API 토큰 생성

  1. R2 → Manage R2 API Tokens → Create API Token
  2. 권한을 Object Read & Write로 설정
  3. 버킷 선택 (또는 모든 버킷)
  4. Access Key ID와 Secret Access Key 복사 (한 번만 표시됨)

3. 프록시 시작

root@kitploit:~
pip install boto3
python r2socks.py proxy -b my-bucket -a <account_id> \
    --access-key <R2_ACCESS_KEY> --secret-key <R2_SECRET_KEY>

프록시는 채널 ID를 생성하고 에이전트를 시작하는 명령을 출력합니다.

4. 에이전트 시작

Python 에이전트:

root@kitploit:~
python r2socks.py agent -b my-bucket -a <account_id> -c <channel_id> \
    --access-key <R2_ACCESS_KEY> --secret-key <R2_SECRET_KEY>

C++ 에이전트 (Windows):

root@kitploit:~
.\r2agent.exe -b my-bucket -a <account_id> -c <channel_id> -k <access_key> -s <secret_key>

사용법

프록시 (운영자 측)

root@kitploit:~
python r2socks.py proxy [options]

Required:
  -b, --bucket BUCKET         R2 bucket name
  -a, --account-id ID         Cloudflare account ID

Optional:
  -c, --channel ID            Channel ID (auto-generated if omitted)
  -l, --listen ADDR           Listen address (default: 127.0.0.1:1080)
  --access-key KEY            R2 API token Access Key ID
  --secret-key KEY            R2 API token Secret Access Key
  --socks-user USER           Enable SOCKS5 user/pass authentication
  --socks-pass PASS           SOCKS5 password
  -p, --password PWD          AES-256-GCM encryption password
  -v, --verbose               Debug logging

에이전트 (대상 측)

Python:

root@kitploit:~
python r2socks.py agent [options]

Required:
  -b, --bucket BUCKET         R2 bucket name
  -a, --account-id ID         Cloudflare account ID
  -c, --channel ID            Channel ID (from proxy output)

C++ (Windows):

root@kitploit:~
r2agent.exe [options]

Required:
  -b, --bucket BUCKET         R2 bucket name
  -a, --account-id ID         Cloudflare account ID
  -c, --channel ID            Channel ID (from proxy output)

Credentials (flags override env vars):
  -k, --access-key KEY        R2 API token Access Key ID
  -s, --secret-key KEY        R2 API token Secret Access Key

Optional:
  -v, --verbose               Debug logging

정리

작업 완료 후 채널의 모든 R2 객체 제거:

root@kitploit:~
python r2socks.py clean -b my-bucket -a <account_id> -c <channel_id>

프로토콜

프록시와 에이전트 간에 공유되는 바이너리 패킷 형식:

root@kitploit:~
┌──────────┬────────────────────┬────────────┬──────────────────┐
│ CMD (1B) │ ConnectionID (16B) │ Len (4B BE)│ Payload (var)    │
└──────────┴────────────────────┴────────────┴──────────────────┘

여러 패킷이 단일 R2 객체(최대 4MB)로 배치되어 API 호출을 줄입니다. 객체는 순서를 위해 마이크로초 타임스탬프로 이름이 지정되며 소비 후 삭제됩니다.

암호화

모든 R2 페이로드에 대한 선택적 AES-256-GCM 암호화:

root@kitploit:~
pip install cryptography

# Both sides must use the same password
python r2socks.py proxy -b bucket -a account_id -p "my-secret-password"
python r2socks.py agent -b bucket -a account_id -c channel -p "my-secret-password"

키는 600,000회 반복의 PBKDF2-SHA256을 사용하여 파생됩니다.

C++ 에이전트 빌드

Visual Studio Developer Command Prompt에서:

root@kitploit:~
cl /std:c++17 /EHsc /O2 r2agent.cpp /link ws2_32.lib winhttp.lib bcrypt.lib

적응형 폴링

프록시와 에이전트 모두 적응형 절전 간격을 사용합니다:

  • 활성 트래픽: 낮은 지연을 위해 50ms마다 폴링
  • 유휴: 간격이 각 주기마다 1.3배 증가, 최대 2초
  • 트래픽 재개: 간격이 0.5배 감소, 빠르게 50ms로 복귀

이는 응답성과 API 호출량 간의 균형을 맞춥니다. 통계는 30초마다 기록되며 활성 연결, 전송된 객체, 이동된 바이트를 표시합니다.

문제 해결

SignatureDoesNotMatch

  • R2 API 토큰 자격 증명이 올바른지 확인
  • 토큰이 버킷에 대한 Object Read & Write 권한을 가지고 있는지 확인
  • 시스템 시계 확인: w32tm /resync /force (Windows) 또는 sudo ntpdate pool.ntp.org (Linux)

RequestTimeTooSkewed

  • 시스템 시계가 동기화되지 않았습니다. 동기화:
    root@kitploit:~
    w32tm /resync /force
    

AccessDenied

  • API 토큰이 대상 버킷에 대한 권한이 없을 수 있습니다
  • 올바른 버킷에 Object Read & Write 권한으로 토큰 재생성

요구 사항

프록시 (Python):

  • Python 3.8+
  • boto3 (필수)
  • cryptography (선택 사항, 암호화용)

에이전트 (C++):

  • Windows 10/11
  • 런타임 의존성 없음
도구 다운로드
명령코드방향페이로드
NEW0x01Proxy→AgentATYP + Address + Port
ACK0x02Agent→Proxy1 byte status (0=success)
DATA0x03BidirectionalRaw TCP data (up to 1MB)
CLOSE0x04BidirectionalEmpty
PING0x05BidirectionalEmpty