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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
mhr-cfw — 트래픽을 GAS(Google Apps Script)를 통해 라우팅하고 Cloudflare Workers로 전달하는 도메인 프론팅 릴레이입니다. DPI를 우회하도록 설계되었습니다. | Kitploit
도구/GitHubGitHub/denuitt1/mhr-cfw
Web Proxies & InterceptionIDS/IPS EvasionCloud SecurityRed Teaming
GitHubdenuitt1/mhr-cfw

mhr-cfw

트래픽을 GAS(Google Apps Script)를 통해 라우팅하고 Cloudflare Workers로 전달하는 도메인 프론팅 릴레이입니다. DPI를 우회하도록 설계되었습니다.

저장소 보기
4.4k41623개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

MHR-CFW

MITM 도메인 프론팅 HTTP 릴레이 + Cloudflare Worker 출구

GitHub

Englishفارسی

작동 원리

1 - GAS + Cloudflare Worker 출구

root@kitploit:~
클라이언트 -> 로컬 릴레이 -> Google/CDN 프론트 -> GAS (Google Apps Script) 릴레이 -> Cloudflare Worker -> 출구
            |
            +-> 네트워크 DPI 필터에 www.google.com으로 표시

2 - GAS + Cloudflare Worker 중간 + 자체 호스팅 업스트림 포워더 릴레이 출구

root@kitploit:~
클라이언트 -> 로컬 릴레이 -> Google/CDN 프론트 -> GAS (Google Apps Script) 릴레이 -> Cloudflare Worker -> 자체 호스팅 업스트림 포워더 -> 출구
            |
            +-> 네트워크 DPI 필터에 www.google.com으로 표시

일반적인 사용 시, 브라우저는 컴퓨터에서 실행 중인 프록시로 트래픽을 보냅니다. 프록시는 해당 트래픽을 Google 인프라를 통해 전송하여 네트워크가 www.google.com과 같은 허용된 도메인만 보게 합니다. 그런 다음 배포된 릴레이가 cloudflare worker를 통해 실제 웹사이트를 가져와 동일한 경로를 통해 응답을 반환합니다.

즉, 필터는 정상적인 Google 트래픽처럼 보지만 실제 목적지는 릴레이 요청 내에 숨겨져 있습니다.


사용 방법

1 - 프로젝트 다운로드 및 압축 해제

root@kitploit:~
git clone https://github.com/denuitt1/mhr-cfw.git
cd mhr-cfw
pip install -r requirements.txt

PyPI에 직접 접근할 수 없나요? 대신 다음 미러를 사용하세요:

root@kitploit:~
pip install -r requirements.txt -i https://mirror-pypi.runflare.com/simple/ --trusted-host mirror-pypi.runflare.com

2 - Cloudflare Worker 설정 (worker.js)

  1. Cloudflare 대시보드를 열고 Cloudflare 계정으로 로그인합니다.
  2. 사이드바에서 Compute > Workers & Pages로 이동합니다.
  3. Create Application을 클릭하고 Start with Hello World를 선택한 후 Deploy를 클릭합니다.
  4. Edit code를 클릭하고 편집기의 모든 기본 코드를 삭제합니다.
  5. 이 프로젝트의 worker.js 파일(deploy/ 아래)을 열고 모든 내용을 복사하여 Apps Script 편집기에 붙여넣습니다.
  6. 중요: 다음 줄의 worker를 생성한 worker로 변경하세요:
    root@kitploit:~
    const WORKER_URL = "myworker.workers.dev";
    
  7. Deploy를 클릭합니다.

3 - Google 릴레이 설정 (Code.gs)

  1. Google Apps Script를 열고 Google 계정으로 로그인합니다.
  2. New project를 클릭합니다.
  3. 편집기의 모든 기본 코드를 삭제합니다.
  4. 이 프로젝트의 Code.gs 파일(deploy/ 아래)을 열고 모든 내용을 복사하여 Apps Script 편집기에 붙여넣습니다.
  5. 중요: 다음 줄의 비밀번호를 본인만 아는 값으로 변경하고, worker URL을 자신의 Cloudflare worker로 변경하세요:
    root@kitploit:~
    const AUTH_KEY = "your-secret-password-here";
    const WORKER_URL = "https://myworker.workers.dev";
    
  6. Deploy → New deployment를 클릭합니다.
  7. 유형으로 Web app을 선택합니다.
  8. 설정:
    • Execute as: Me
    • Who has access: Anyone
  9. Deploy를 클릭합니다.
  10. Deployment ID를 복사합니다 (긴 무작위 문자열처럼 보입니다). 다음 단계에서 필요합니다.

⚠️ 3단계에서 설정한 비밀번호를 기억하세요. 아래 구성 파일에서 동일한 비밀번호를 사용합니다.

4 - 실행

run.bat 파일 (Windows) 또는 run.sh 파일 (Linux)을 클릭하여 릴레이를 시작합니다.

처음 실행하는 경우 AUTH_KEY와 Google Apps Script Deployment ID를 입력해야 하는 설정 마법사가 나타납니다. HTTP 프록시가 127.0.0.1:8085에서 실행 중이라는 메시지가 표시되어야 합니다.

5 - 사용

v2rayN 클라이언트를 사용하고 socks5 프록시를 구성하는 것을 권장합니다.

FoxyProxy의 Chrome 확장 프로그램 또는 Firefox 확장 프로그램을 사용하여 브라우저에서 이 프록시를 사용할 수도 있습니다.

6 - 연결 테스트

브라우저에서 ipleak.net을 열면 IP 주소가 Cloudflare의 것으로 설정된 것을 확인할 수 있습니다.

image

7 - 추가 사용 가이드

가상 머신 내에서 프록시 사용

가상 머신(VM)을 실행하면 호스트와 분리된 네트워크 환경에서 작동합니다. 기본적으로 VM은 호스트 머신의 localhost에서 실행 중인 서비스(이 프록시 포함)에 직접 접근할 수 없습니다.

이를 해결하려면 하이퍼바이저가 호스트에 할당한 게이트웨이 IP를 찾은 다음, VM 내에서 프록시를 구성할 때 localhost 대신 해당 IP를 사용해야 합니다.

예: VirtualBox (NAT 모드)

호스트는 VM 내에서 10.0.2.2로 항상 접근 가능합니다. 프록시를 설정하세요:

root@kitploit:~
export http_proxy="http://10.0.2.2:8085"
export https_proxy="http://10.0.2.2:8085"
export all_proxy="socks5://10.0.2.2:8085"

영구적으로 적용하려면 위 줄을 ~/.bashrc에 추가하고 source ~/.bashrc를 실행하세요.

이 프록시는 SSL 검사를 수행하므로 인증서 오류가 발생할 수 있습니다. 포함된 ca.crt를 설치하여 해결하세요:

root@kitploit:~
sudo cp ca.crt /usr/local/share/ca-certificates/ && sudo update-ca-certificates

로컬 네트워크를 통한 프록시 공유 (예: 모바일 기기)

추가 소프트웨어 없이 동일한 네트워크에 있는 휴대폰이나 다른 기기에서 이 프록시를 사용할 수 있습니다.

1. 호스트 IP 찾기

root@kitploit:~
# Windows
ipconfig
 
# Linux / macOS
ip addr

라우터에 연결된 어댑터의 IP(예: 192.168.1.8)를 찾으세요.

2. 포트 포워딩 (Windows 전용, 서비스가 localhost에 바인딩된 경우)

관리자 권한으로 CMD를 실행하세요:

root@kitploit:~
netsh interface portproxy add v4tov4 listenaddress=192.168.1.8 listenport=8085 connectaddress=127.0.0.1 connectport=8085
netsh advfirewall firewall add rule name="Proxy 8085" dir=in action=allow protocol=TCP localport=8085

3. 휴대폰에서 프록시 구성

휴대폰을 동일한 Wi-Fi에 연결한 후 수동으로 프록시를 설정하세요:

  • 호스트: 호스트 IP (예: 192.168.1.8)
  • 포트: 8085

Android: 설정 → Wi-Fi → 네트워크 수정 → 프록시 → 수동
iPhone: 설정 → Wi-Fi → (네트워크) → HTTP 프록시 → 수동

4. CA 인증서 설치

ca.crt를 휴대폰으로 전송한 후:

  • Android: 설정 → 보안 → 인증서 설치 → CA 인증서
  • iPhone: 파일 열기 → 프로필 설치 → 설정 → 일반 → 정보 → 인증서 신뢰 설정 → 활성화

선택사항: 업스트림 포워더를 통한 안정적인 출구 IP

CAPTCHA(Cloudflare Turnstile/봇 챌린지, reCAPTCHA, hCaptcha)는 챌린지를 해결한 IP에 토큰을 바인딩합니다. Cloudflare Workers는 요청마다 다른 에지 IP를 통해 나가므로, 챌린지를 해결해도 대상 사이트에서의 인증이 실패합니다. 이 선택적 추가 기능을 사용하면 Worker가 모든 fetch() 호출을 안정적인 IP를 가진 VPS에서 실행하는 작은 Node 서버로 전달하여 대상 사이트에 일관된 출구 주소를 제공합니다.

이 기능이 필요한 경우

  • Cloudflare의 봇 챌린지 뒤에 있는 사이트가 계속 챌린지 페이지로 되돌아가는 경우.
  • 로그인 양식이 reCAPTCHA/hCaptcha를 해결한 후 거부하는 경우.
  • 요청 간 쿠키 연속성(예: cf_clearance)이 필요한 경우.

이러한 문제가 없다면 구성하지 않은 상태로 두세요. Worker는 이전과 동일하게 동작합니다.

별도 서버가 필요한 이유

Cloudflare Workers는 안정적인 아웃바운드 IP를 제공하지 않습니다. fetch()는 회전하는 Cloudflare 에지 IP 풀을 통해 나가며, 이 때문에 IP에 바인딩된 CAPTCHA 토큰이 깨집니다. Cloudflare의 정적 이그레스 옵션(BYOIP, Egress Workers)은 Enterprise 등급이므로, 정적 IP를 가진 소형 VPS가 실용적인 해결책입니다. 포워더는 안정적인 주소에서 fetch()를 다시 발행하는 얇은 프록시일 뿐입니다.

1. VPS에 포워더 배포

참조 구현은 deploy/upstream-forwarder/upstream_forwarder.js입니다. Node 18+가 필요하며 종속성이 없습니다. Caddy 또는 nginx와 함께 TLS로 실행하세요. Worker는 HTTPS가 아닌 포워더 URL을 거부합니다.

root@kitploit:~
# VPS에서 (Ubuntu/Debian 예시):
sudo apt install -y nodejs   # 반드시 18+여야 함
export AUTH_KEY="some-long-random-string-at-least-32-chars"
export PORT=8787
node deploy/upstream-forwarder/upstream_forwarder.js

Caddy로 자동 TLS를 구성하세요:

root@kitploit:~
forwarder.example.com {
    reverse_proxy 127.0.0.1:8787
}

빠른 동작 확인:

root@kitploit:~
curl -X POST https://forwarder.example.com/fwd \
  -H "x-upstream-auth: $AUTH_KEY" \
  -H "content-type: application/json" \
  -d '{"u":"https://httpbin.org/ip","m":"GET","h":{}}'

디코딩된 응답 본문에 VPS의 IP가 표시되어야 합니다.

2. Worker를 포워더에 연결

Cloudflare 대시보드 → Worker → Settings → Variables and Secrets:

저장하고 Worker를 재배포합니다.

3. 확인

프록시를 통해 https://httpbin.org/ip를 방문하면 Cloudflare의 IP가 아닌 VPS의 IP가 표시되어야 합니다. 그런 다음 작동하지 않던 CAPTCHA 보호 사이트를 다시 방문하면 챌린지가 이제 유효하게 됩니다.

포워더는 인증을 요구해야 합니다. AUTH_KEY 없이는 시작을 거부합니다. URL과 키를 가진 사람은 누구나 릴레이로 사용할 수 있으므로 둘 다 비밀로 유지하세요.

4. 특정 호스트로 포워더 범위 제한 (선택사항)

기본적으로 Worker가 처리하는 모든 요청이 포워더를 통해 라우팅되므로 관련 없는 트래픽도 VPS 대역폭을 소모합니다. 안정적인 출구 IP가 필요한 사이트만 VPS를 통해 보내려면 config.json의 forwarder_hosts에 나열하세요. bypass_hosts와 동일한 구문(정확한 호스트명 또는 .suffix)을 사용합니다. 일치하지 않는 항목은 Worker에서 직접 fetch()로 대체됩니다.

root@kitploit:~
{
   ...
   "forwarder_hosts": [
       "example.com",
       ".cf-protected-suffix"
   ]
   ...
}

목록을 비우거나 키를 제거하면 기존의 "모든 항목 전달" 동작이 유지됩니다.


면책 조항

MHR-CFW는 교육, 테스트 및 연구 목적으로만 제공됩니다.

  • 보증 없음: 이 소프트웨어는 상품성, 특정 목적에의 적합성 및 비침해에 대한 묵시적 보증을 포함하여 어떠한 명시적 또는 묵시적 보증 없이 "있는 그대로" 제공됩니다.
  • 책임 제한: 개발자와 기여자는 이 프로젝트의 사용 또는 사용 불능으로 인해 발생하는 직접적, 간접적, 우발적, 결과적 또는 기타 손해에 대해 책임을 지지 않습니다.
  • 사용자 책임: 통제된 테스트 환경 외부에서 이 프로젝트를 실행하면 네트워크, 계정, 프록시, 인증서 또는 연결된 시스템에 영향을 미칠 수 있습니다. 설치, 구성 및 사용에 대한 모든 책임은 사용자에게 있습니다.
  • 법적 준수: 이 소프트웨어를 사용하기 전에 모든 현지, 국가 및 국제 법률과 규정을 준수할 책임은 사용자에게 있습니다.
  • Google 서비스 준수: 이 프로젝트와 함께 Google Apps Script 또는 기타 Google 서비스를 사용하는 경우 Google의 서비스 약관, 허용 사용 규칙, 할당량 및 플랫폼 정책을 준수할 책임은 사용자에게 있습니다. 오용 시 Google 계정 또는 배포가 정지 또는 종료될 수 있습니다.
  • 라이선스 조건: 이 소프트웨어의 사용, 복사, 배포 및 수정은 저장소 라이선스에 따릅니다. 해당 조건 이외의 사용은 금지됩니다.

기여자

  • 특별히 onlymaj님께 감사드립니다.

출처

  • 이 프로젝트는 MasterHttpRelayVPN을 기반으로 합니다.

라이선스

MIT

도구 다운로드
NameTypeValue
UPSTREAM_FORWARDER_URLSecrethttps://forwarder.example.com/fwd
UPSTREAM_AUTH_KEYSecretVPS에 설정한 것과 동일한 AUTH_KEY
UPSTREAM_FAIL_MODEVariableclosed (기본값) — 포워더 실패 시 502 반환. open을 사용하여 직접 fetch로 대체.
UPSTREAM_TIMEOUT_MSVariable (선택사항)기본값 25000