모의해킹을 하다 보면 내 로컬에 띄운 서버를 외부에서 접근 가능하게 만들어야 할 때가 있습니다. SSRF 리다이렉터, 콜백 서버, OOB 페이로드 수신용 엔드포인트 같은 것들입니다. ngrok이나 Cloudflare Tunnel을 쓰면 되지만, 둘 다 설치가 필요합니다.
localhost.run은 SSH만 있으면 됩니다. 별도 설치 없이 명령어 한 줄로 로컬 포트를 HTTPS 주소로 뚫어줍니다.
원리
내 로컬 서버(:8000)
│
▼ SSH 역터널
localhost.run 서버
│
▼ HTTPS 종단 처리
https://랜덤.lhr.life ← 외부에서 접근 가능
핵심은 SSH의 역방향 포트 포워딩(-R 옵션)입니다. localhost.run 서버가 받은 HTTPS 요청을 SSH 터널을 거꾸로 타고 내 로컬 포트로 전달합니다. HTTPS 인증서도 localhost.run이 알아서 붙여주기 때문에, 받는 쪽은 유효한 인증서가 달린 주소를 그대로 씁니다.
설치가 필요 없는 이유가 여기 있습니다. 터널을 여는 도구가 SSH인데, SSH는 거의 모든 환경에 이미 깔려 있습니다.
기본 사용법
1. 로컬 서버 띄우기
먼저 노출할 서버가 있어야 합니다. 예시로 302 리다이렉터를 띄워봅니다.
# 터미널 1
python3 -c "
from http.server import BaseHTTPRequestHandler, HTTPServer
class H(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(302)
self.send_header('Location', 'https://example.com')
self.end_headers()
HTTPServer(('0.0.0.0', 8000), H).serve_forever()
"
2. 터널 연결
# 터미널 2
ssh -R 80:localhost:8000 nokey@localhost.run
처음 연결할 때 호스트 키 확인이 뜨면 yes를 입력합니다.
3. 발급된 주소 확인
===============================================================================
your url is: https://abc123def456.lhr.life
===============================================================================
이 https://....lhr.life 주소가 외부에서 내 로컬 서버로 연결되는 입구입니다.
명령어 뜯어보기
ssh -R 80:localhost:8000 nokey@localhost.run
│ │ │ │
│ │ │ └─ 접속할 터널 서비스
│ │ └─ 내 로컬에서 노출할 포트
│ └─ 터널 서버가 열어줄 원격 포트
└─ 역방향 포워딩 (Remote)
nokey는 SSH 키 없이 익명으로 붙겠다는 의미입니다. 그래서 매번 랜덤 주소가 발급됩니다.
자주 쓰는 변형
다른 포트를 노출하고 싶을 때는 뒤의 포트 번호만 바꿉니다.
# 로컬 3000번 포트 노출
ssh -R 80:localhost:3000 nokey@localhost.run
고정 서브도메인이 필요하면 SSH 키를 등록하고 nokey 없이 접속합니다.
ssh -R 80:localhost:8000 localhost.run
키가 등록돼 있으면 같은 주소를 계속 받을 수 있어서, 매번 페이로드의 콜백 주소를 갈아끼우지 않아도 됩니다.
ngrok / Cloudflare Tunnel과 비교
항목 localhost.run ngrok (무료) Cloudflare Tunnel
| 설치 | 불필요 (SSH) | 필요 | 필요 (cloudflared) |
| HTTPS 인증서 | 자동 | 자동 | 자동 |
| 브라우저 경고 페이지 | 없음 | 있음 | 없음 |
| 고정 주소 | SSH 키 등록 시 | 유료 | 가능 |
ngrok 무료 플랜은 브라우저 User-Agent로 들어온 첫 요청에 경고 인터스티셜을 끼우기 때문에, 자동화된 요청을 받을 때 응답이 가로채일 수 있습니다. localhost.run은 그런 중간 페이지가 없어서 콜백/리다이렉터 용도로 쓰기 편합니다.
활용 예시
모의해킹 관점에서 localhost.run이 유용한 지점들입니다.
- SSRF 리다이렉터 — 검증을 통과한 요청을 내부 주소로 302 리다이렉트시킬 때, 외부에서 닿는 HTTPS 주소가 필요합니다.
- OOB(out-of-band) 콜백 수신 — 블라인드 취약점에서 서버가 내 쪽으로 요청을 보내는지 확인할 때.
- 웹훅 테스트 — 대상 시스템이 내 엔드포인트로 콜백을 보내도록 등록하고 페이로드를 받아볼 때.
주의사항
- 무료 사용 시 연결이 끊기면 주소가 바뀝니다. 터널을 Ctrl+C로 끊으면 주소도 사라집니다.
- 터널이 열려 있는 동안에는 누구나 그 주소로 내 로컬 서버에 접근할 수 있습니다. 민감한 서비스를 노출하지 마세요.
- 실습이 끝나면 터널을 반드시 닫습니다.
이 글의 내용은 직접 통제하는 로컬 환경과 허가된 자산에 한해 사용합니다. 허가 없이 남의 시스템을 대상으로 사용하면 범죄입니다.















