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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
EasyTokens — Kali365 - EvilTokens Replica | Kitploit
도구/GitHubGitHub/secdev02/easytokens
OSINT for Social EngineeringInformation GatheringPost-ExploitationPhishingPenetration TestingCloud SecurityCommand and ControlAuthenticationRed TeamingAdversarial Attack
GitHubsecdev02/easytokens

EasyTokens

7212402개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Kali365 - EvilTokens Replica

저장소 보기

EasyTokens

적대자 모의 훈련을 위한 디바이스 코드 피싱 서버입니다. 디바이스 권한 부여 흐름을 통해 Microsoft 365 OAuth 토큰을 캡처합니다. GraphSpy에서 영감을 받았습니다.

경고 — 승인된 사용만 가능합니다. 이 도구는 명시적인 서면 승인을 받은 침투 테스터 및 레드 팀 운영자를 대상으로 합니다. 오용 시 컴퓨터 사기 관련 법률을 위반할 수 있습니다.


작동 방식

  1. 운영자가 운영자 UI를 통해 디바이스 코드 캠페인을 생성합니다.
  2. 피해자용 등록 페이지(Dunder Mifflin 테마)는 사용자 코드를 표시하고 대상자가 microsoft.com/devicelogin에서 인증하도록 안내합니다.
  3. 백그라운드 폴러가 대상자의 인증 완료를 감지하고 캡처된 액세스/리프레시 토큰을 SQLite에 저장합니다.
  4. 피해자의 브라우저는 인증 후 검색 페이지로 리디렉션됩니다.
  5. 운영자는 캡처된 토큰을 사용하여 Microsoft Graph를 통해 피해자의 OneDrive 및 이메일을 검색할 수 있습니다.

아키텍처

Python 백엔드(캠페인당 하나의 포트) + nginx 프론트엔드 + SQLite 영구 저장소.

root@kitploit:~
main_server.py          ← 통합 진입점 (이 파일을 실행)
db.py                   ← SQLite 영구 저장소 계층
html_enroll.py          ← 피해자 등록 페이지 빌더
html_search.py          ← 피해자 인증 후 검색 페이지 빌더
css_shared.py           ← 운영자 UI용 공유 CSS
nginx_helper.py         ← nginx 리버스 프록시 설정 자동 생성 및 리로드
nginx.conf              ← 기본 nginx 설정 (/etc/nginx/conf.d/*.conf 포함)

라우트


Nginx — 도메인 캠페인

도메인이 설정된 캠페인이 생성되면 nginx_helper.py는 자동으로 도메인별 서버 블록을 NGINX_CONF(기본값 /etc/nginx/conf.d/easytokens.conf)에 작성하고 nginx를 리로드합니다. 해당 도메인으로 포트 80에 도착하는 피해자 트래픽은 올바른 Python 서버 인스턴스로 프록시됩니다.

  • 도메인이 없는 캠페인은 Python 포트(기본값 3000)에서 직접 제공됩니다.
  • 도메인이 있는 캠페인은 nginx를 통해 포트 80에서 제공됩니다.
  • 기본 nginx.conf는 알려진 캠페인과 일치하지 않는 Host 헤더가 있는 모든 요청을 드롭(return 444)하여 Python 백엔드의 우발적 노출을 방지합니다.
  • 자동 nginx 관리를 비활성화하려면 NGINX_CONF='' 또는 NGINX_RELOAD_CMD=''를 설정하세요.

빠른 시작 (Docker)

root@kitploit:~
docker compose up --build

Docker가 노출하는 포트:

포트용도
80nginx — 도메인 기반 피해자 트래픽
3000Python — 운영자 UI + 직접 피해자 접근
  • 피해자 페이지 (직접): http://localhost:3000/
  • 운영자 UI: http://localhost:3000/app
  • 도메인 캠페인: http://<campaign-domain>/ (nginx를 통해 포트 80으로 라우팅)

캡처된 토큰과 로그는 Docker 볼륨에 유지됩니다:

볼륨컨테이너 내 경로용도
easytokens-data/data/easytokens.dbSQLite 데이터베이스
./logs/logs/요청별 로그 파일

수동 설정

요구 사항: Python 3.12+, 서드파티 패키지 불필요.

root@kitploit:~
python main_server.py

환경 변수


PHP 릴레이 노드

php-relay/ 디렉터리에는 독립형 Apache/PHP 컨테이너가 포함되어 있으며, 이 컨테이너는 분산된 피해자 대면 노드 역할을 합니다. 메인 서버와 동일한 디바이스 코드 등록 페이지를 제공하고, Microsoft에 직접 폴링하며, 캡처된 토큰을 POST /webhook을 통해 메인 패널로 전달합니다.

작동 방식

  1. 시작 시 checkin.php는 메인 패널의 POST /relay/checkin에 POST 요청을 보내고 RELAY_SECRET으로 인증합니다. 패널은 노드를 등록하고 node_id를 반환합니다.
  2. 피해자는 릴레이의 등록 페이지(index.php)를 방문하여 새로운 디바이스 코드 흐름을 시작합니다.
  3. 브라우저 측 JS가 poll.php를 폴링합니다. 토큰이 캡처되면 poll.php는 해당 토큰을 node_id와 함께 메인 패널의 POST /webhook으로 전달합니다.

릴레이 환경 변수

php-relay/.env에서 구성:

빠른 시작

두 컨테이너 동시 실행 (권장):

root@kitploit:~
# EasyTokens/ 디렉터리에서
docker compose -f docker-compose.yml -f php-relay/docker-compose.yml up --build

단일 -f 병합으로 두 컨테이너를 동일한 Docker 네트워크에 배치하면 MAIN_SERVER_URL=http://easytokens:3000이 올바르게 확인됩니다.

접근:

URL용도
http://localhost:8082/릴레이 피해자 등록 페이지
http://localhost:3000/app/nodes등록된 릴레이 노드의 운영자 보기

릴레이만 실행 (원격 패널):

root@kitploit:~
cd php-relay
# .env에서 MAIN_SERVER_URL을 공개 패널 URL로 설정
docker compose up --build

공유 비밀 설정

  1. 비밀 생성: openssl rand -hex 32
  2. EasyTokens/.env에 RELAY_SECRET=<secret> 설정 (docker-compose.yml을 통해 메인 패널에서 참조)
  3. php-relay/.env에 동일한 값 설정

데이터베이스

SQLite 데이터베이스의 두 테이블:

  • tokens — 캡처된 모든 액세스/리프레시 토큰 (UPN, 액세스 토큰, 리프레시 토큰, ID 토큰, 범위, 출처, 캡처 타임스탬프)
  • device_codes — 운영자가 시작한 캠페인 (사용자 코드, 디바이스 코드, 확인 URL, 상태, 연결된 토큰 ID, 포트, 도메인)

Microsoft OAuth 세부 사항


라이선스

MIT — 저작권 (c) 2026 Casey Smith

도구 다운로드
메서드경로대상설명
GET/피해자디바이스 코드 등록 페이지 (Dunder Mifflin 테마)
POST/poll피해자 (JS)MS 토큰 엔드포인트 폴링; 성공 시 토큰 저장
GET/search?s=<id>피해자인증 후 OneDrive/이메일 검색 페이지
GET/app운영자대시보드 — 통계 + 최근 캡처 목록
GET/app/device-codes운영자모든 캠페인 및 실시간 폴 상태
POST/app/device-codes/new운영자새 디바이스 코드 캠페인 생성
GET/app/tokens운영자모든 캡처된 토큰
GET/app/search?id=<id>운영자특정 토큰에 대한 OneDrive + 이메일 검색
POST/webhook릴레이 노드인증된 릴레이 노드로부터 토큰 수집
POST/relay/checkin릴레이 노드릴레이 노드 등록; node_id 반환
변수기본값설명
PORT3000Python 서버 수신 포트
PORT_MAX3010Docker가 노출하는 포트 범위의 상한
DB_PATH/data/easytokens.dbSQLite 데이터베이스 경로
LOG_DIR/logs요청별 로그 디렉터리
NGINX_CONF/etc/nginx/conf.d/easytokens.confnginx_helper가 생성한 설정을 작성할 경로; ''로 설정하면 비활성화
NGINX_RELOAD_CMDnginx -s reload설정 변경 후 nginx를 리로드하는 셸 명령; ''로 설정하면 비활성화
RELAY_SECRET(설정되지 않음)릴레이 노드 인증용 공유 비밀. openssl rand -hex 32로 생성. php-relay/.env의 RELAY_SECRET과 일치해야 함. 설정하지 않으면 릴레이 지원 비활성화.
변수기본값설명
MAIN_SERVER_URLhttp://easytokens:3000릴레이 컨테이너 내부에서 접근 가능한 메인 패널 URL
RELAY_SECRET(필수)메인 패널의 RELAY_SECRET과 일치해야 함
RELAY_PORT8082릴레이를 노출할 호스트 포트
RELAY_LABEL호스트명패널에 표시될 이 노드의 사람이 읽을 수 있는 이름
CHECKIN_RETRIES10포기 전 체크인 재시도 횟수
CHECKIN_DELAY5체크인 재시도 간격(초)
NODE_ID_FILE/tmp/relay_node_id체크인 후 node_id가 캐시되는 경로
필드값
클라이언트 IDd3590ed6-52b3-4102-aeff-aad2292ab01c (Microsoft Office)
리소스https://graph.microsoft.com
범위openid profile email offline_access Mail.Read Files.Read
디바이스 코드 URLhttps://login.microsoftonline.com/common/oauth2/devicecode
토큰 URLhttps://login.microsoftonline.com/Common/oauth2/token