나의 첫 번째 윤리적인 Open Redirect Scanner: 시작부터 배포까지

발행: (2025년 12월 7일 오전 10:39 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

Introduction

Node.js로 윤리적인 오픈‑리다이렉트 취약점 스캐너를 만들었습니다. 이 도구는 오픈‑리다이렉트 파라미터를 자동으로 탐지하고, 비동기 병렬 스캔, 서비스 거부(DoS)를 방지하기 위한 속도 제한, 그리고 결과를 JSON으로 내보내어 손쉽게 로깅할 수 있도록 합니다.

Features

  • Batch testing – 효율적인 스캔을 위해 텍스트 파일에서 URL을 읽어옵니다.
  • Async parallel scans – 책임감 있게 속도를 최대화합니다.
  • Rate limiting – 요청 사이에 지연을 두어 우발적인 DoS를 방지합니다.
  • JSON export – 스캔 결과를 자동으로 results.json에 생성합니다.

Installation

git clone https://github.com/ethicals7s/ethicals7s-redirect-hunter
cd ethicals7s-redirect-hunter
npm install

Usage

  1. 한 줄에 하나씩 URL을 적은 urls.txt 파일을 만듭니다(안전하고 허가된 대상만 사용). 예시:

    https://www.google.com/url?q=https://evil.com
    https://example.com
    https://www.koni-store.ru/bitrix/redirect.php?event1=&event2=&event3=&goto=https://google.com
  2. 스캐너를 실행합니다:

    node index.js scan

Example Output

Scanning for open redirects (ethical tests only)...
https://www.google.com/url?q=https://evil.com is VULNERABLE.
https://example.com is SAFE.
https://www.koni-store.ru/bitrix/redirect.php?event1=&event2=&event3=&goto=https://google.com is VULNERABLE.

results.json (자동 생성):

[
  "https://www.google.com/url?q=https://evil.com",
  "https://example.com",
  "https://www.koni-store.ru/bitrix/redirect.php?event1=&event2=&event3=&goto=https://google.com"
]

Code Snippet (index.js)

// index.js
const MALICIOUS_DOMAIN = 'evil.com';
const INPUT_FILE = 'urls.txt';
const fs = require('fs').promises;
const fetch = require('node-fetch');

async function checkForOpenRedirect(url) {
  try {
    const testUrl = `${url}?redirect=https://${MALICIOUS_DOMAIN}`;
    const response = await fetch(testUrl, { redirect: 'manual' });
    const isVulnerable = response.headers.get('location')?.includes(MALICIOUS_DOMAIN);
    return { url, status: isVulnerable ? 'VULNERABLE' : 'SAFE' };
  } catch (error) {
    console.error(`Error checking ${url}: ${error.message}`);
    return { url, status: 'ERROR' };
  }
}

async function main(file = INPUT_FILE) {
  try {
    const data = await fs.readFile(file, 'utf8');
    const urls = data.split('\n').filter(Boolean);
    const results = await Promise.all(urls.map(checkForOpenRedirect));
    console.log('Scanning for open redirects (ethical tests only)...');
    results.forEach(r => console.log(`${r.url} is ${r.status}.`));
    await fs.writeFile('results.json', JSON.stringify(urls, null, 2));
  } catch (err) {
    console.error(`Input file not found: ${file}`);
  }
}

// CLI handling
if (require.main === module) {
  const command = process.argv[2];
  if (command === 'scan') {
    main();
  } else {
    console.log('Usage: node index.js scan');
  }
}

Ethical Use

  • Permission‑based testing only – 소유하거나 명시적인 동의를 받은 도메인에만 스캔을 수행하세요.
  • 발견된 취약점은 해당 당사자에게 책임감 있게 보고합니다.
  • 적절한 권한 없이 이 도구를 프로덕션 환경에서 사용하지 마세요.

Repository

https://github.com/ethicals7s/ethicals7s-redirect-hunter

Back to Blog

관련 글

더 보기 »

celery-plus 🥬 — Node.js용 현대적인 Celery

왜 확인해 보세요? - 🚀 기존 Python Celery 워커와 함께 작동합니다 - 📘 TypeScript로 작성되었으며 전체 타입을 제공합니다 - 🔄 RabbitMQ AMQP와 Redis를 지원합니다 - ⚡ Async/a...