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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
corsair_scan — 웹 애플리케이션 및 API에서 Origin 헤더 주입, 와일드카드 반사, 자격 증명 유출을 테스트하는 자동화된 CORS 오구성 스캐너. | Kitploit
도구/GitHubGitHub/santandersecurityresearch/corsair_scan
Vulnerability ScannersAPI Security TestingWeb SecurityMisconfiguration
GitHubsantandersecurityresearch/corsair_scan

corsair_scan

웹 애플리케이션 및 API에서 Origin 헤더 주입, 와일드카드 반사, 자격 증명 유출을 테스트하는 자동화된 CORS 오구성 스캐너.

저장소 보기

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
122155년 전Kitploit 검토 완료

GitHub release Github all releases HitCount Total alerts Language grade: Python MIT license

corsair_scan

Corsair_scan에 오신 것을 환영합니다

Corsair_scan은 CORS(Cross-Origin Resource Sharing) 잘못된 설정을 테스트하는 보안 도구입니다. CORS는 웹 페이지의 제한된 리소스를 첫 번째 리소스가 제공된 도메인 외부의 다른 도메인에서 요청할 수 있도록 하는 메커니즘입니다. 이것이 제대로 구성되지 않으면 승인되지 않은 도메인이 해당 리소스에 액세스할 수 있습니다.

CORS란 무엇인가요?

CORS는 HTTP 헤더 기반 메커니즘으로, 서버가 자신의 출처(도메인, 스키마 또는 포트) 이외의 다른 출처에서 브라우저가 리소스를 로드하도록 허용해야 하는지 나타낼 수 있습니다. 이는 서버가 웹 브라우저에서 해당 정보를 읽을 수 있는 출처를 설명하는 새로운 HTTP 헤더를 추가하여 작동합니다.

CORS는 또한 브라우저가 교차 출처 리소스를 호스팅하는 서버에 "사전 요청(preflight)"을 보내 실제 요청을 서버가 허용할 것인지 확인하는 메커니즘에 의존합니다. 이 사전 요청에서 브라우저는 실제 요청에 사용될 HTTP 메서드와 헤더를 나타내는 헤더를 보냅니다.

CORS를 구현할 때 가장 흔하고 문제가 되는 보안 문제는 요청자를 검증/허용 목록에 추가하지 못하는 것입니다. 너무 자주 Access-Control-Allow-Origin의 값이 '*'로 설정된 것을 볼 수 있습니다.

불행히도 이것이 기본값이며, 따라서 웹 상의 모든 도메인이 해당 사이트의 리소스에 액세스할 수 있도록 허용합니다.

OWASP 애플리케이션 보안 검증 표준(ASVS) 요구 사항 14.5.3에 따르면:

교차 출처 리소스 공유(CORS) Access-Control-Allow-Origin 헤더는 신뢰할 수 있는 도메인 및 하위 도메인의 엄격한 허용 목록을 사용하여 일치시키고 "null" 출처를 지원하지 않는지 확인합니다.

corsair_scan은 어떻게 작동하나요?

Corsair_scan은 매개변수로 받은 요청(또는 요청 목록)을 다시 보내고 Origin 헤더에 값을 주입하여 작동합니다. 이 요청에 대한 응답의 Access-Control-Allow-Origin 헤더 내용에 따라 CORS 구성이 올바른지 여부를 확인할 수 있습니다. CORS가 잘못 구성되었음을 나타내는 세 가지 시나리오가 있습니다:

  • 요청에 보낸 가짜 출처가 Access-Control-Allow-Origin에 반영됨
  • Access-Control-Allow-Origin의 값이 * 임
  • Access-Control-Allow-Origin의 값이 null 임

CORS가 잘못 구성된 것으로 확인되면 응답에 Access-Control-Allow-Credentials 헤더가 포함되어 있는지 확인합니다. 이는 서버가 교차 출처 요청에 자격 증명을 포함하도록 허용한다는 의미입니다.

종종 CORS 구성은 와일드카드를 사용합니다. 예를 들어 * example.com * 아래의 모든 것을 허용합니다. 이는 origin domain.com.evil.com이 주어진 정규식과 일치하여 허용됨을 의미합니다. 이에 대응하기 위해 corsair_scan은 네 가지 시나리오를 테스트합니다:

  • 가짜 도메인 주입: 원본 요청에 origin 헤더가 없더라도 origin 헤더를 https://scarymonster.com으로 설정
  • 원본 요청에 origin 헤더가 있는 경우(명확성을 위해 https://example.com이라고 가정):
    • 사전 도메인 주입: 원본 도메인 왼쪽에 가짜 도메인을 연결합니다. 예제에서 origin은 https://scarymonsterexample.com으로 설정됩니다.
    • 사후 도메인 주입: 사전 주입의 반대로, 오른쪽에 연결합니다. origin은 https://example.com.scarymonster.com이 됩니다.
    • 하위 도메인 주입: 때때로 CORS 구성이 특정 도메인의 모든 하위 도메인을 허용 목록에 포함합니다. 그 자체로는 문제가 아니지만, 도메인 중 하나가 XSS에 취약하다면 심각한 문제가 될 수 있습니다. 이 시나리오에서 origin은 https://scarymonster.example.com이 됩니다.

어떻게 설치하나요?

이 프로젝트는 Python 3.9로 개발되었지만 모든 Python 3.x 버전에서 작동해야 합니다. 가장 좋은 설치 방법은 pip를 사용하는 것입니다.

pip3 install corsair_scan --user

어떻게 사용하나요?

Corsair는 Python 모듈 또는 CLI로 사용할 수 있습니다.

Python 모듈

CORS 스캔을 수행하는 메서드는 corsair_scan입니다. 정의는 다음과 같습니다:

corsair_scan

요청 목록과 요청에서 인증서 확인을 활성화/비활성화하는 매개변수를 받습니다.

입력:

  • data [List]: 요청 목록입니다. 각 요청은 요청 관련 데이터를 포함하는 사전입니다:

    • url_data [Dict]: 요청의 모든 관련 데이터를 포함하는 사전:
      • url [String]: 요청이 전송되는 URL
      • verb [String]: 요청의 동사 (get, post, patch, delete, options 등)
      • params [String]: 요청에 포함된 본문 (있는 경우)
      • headers [Dict]: 요청에 포함된 모든 헤더를 포함하는 사전
  • verify [Boolean] [기본값: True] : 각 요청에 대해 corsair_scan_single_url에 이 값을 전송

출력:

  • final_report [List]: 수행된 테스트에 대한 전체 보고서를 포함합니다. filter가 true로 설정된 경우 테스트 요약도 보고서에 추가됩니다.
    • report [List]: 수행된 테스트에 대한 세부 개별 보고서 목록
    • summary [Dict] : 스캔에서 감지된 문제 요약

예제

root@kitploit:~
import corsair_scan.corsair_scan as corsair
url_data = {}
data = []
verb =  'GET'
url = 'https://example.com/'
params = 'user=user1&password=1234'
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
           'Accept-Language': 'en-GB,en;q=0.5', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1',
           'Origin': 'https://example.com',
           'Host': 'example.com'}

url_data['verb'] = verb
url_data['url'] = url
url_data['params'] = params
url_data['headers'] = headers
data.append(url_data)

print (corsair.corsair_scan(data, verify=True))

응답:

root@kitploit:~
{'report': [{'fake_origin': {'Access-Control-Allow-Origin': 'https://scarymonster.com',
                             'Origin': 'https://scarymonster.com',
                             'credentials': True,
                             'error': False,
                             'misconfigured': True,
                             'status_code': 200},
             'post-domain': {'Access-Control-Allow-Origin': 'https://example.com.scarymonster.com',
                             'Origin': 'https://example.com.scarymonster.com',
                             'credentials': True,
                             'error': False,
                             'misconfigured': True,
                             'status_code': 200},
             'pre-domain': {'Access-Control-Allow-Origin': 'https://scarymonsterexample.com',
                            'Origin': ' https://scarymonsterexample.com',
                            'credentials': True,
                            'error': False,
                            'misconfigured': True,
                            'status_code': 200},
             'sub-domain': {'Access-Control-Allow-Origin': 'https://scarymonster.example.com',
                            'Origin': 'https://scarymonster.example.com',
                            'credentials': True,
                            'error': False,
                            'misconfigured': True,
                            'status_code': 200},
             'url': 'https://example.com/',
             'verb': 'GET'}],
 'summary': {'error': [], 'misconfigured': [{'credentials': True,
                    'misconfigured_test': ['fake_origin',
                                           'sub-domain',
                                           'pre-domain',
                                           'post-domain'],
                    'status_code': 200,
                    'url': 'https://domain.com',
                    'verb': 'GET'}]}}

CLI

pip 패키지 설치의 일부로 CLI가 설치됩니다. 실행 구문은 다음과 같습니다:

corsair FILE [-nv/--noverify][-r/--report]

CLI는 스캔을 수행할 요청 목록이 포함된 JSON 파일이 필요합니다. 예제 파일은 테스트의 일부로 제공됩니다:

root@kitploit:~
[{
  "verb": "GET",
  "url": "https://example.com/",
  "params": "user=user1&password=1234",
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Language": "en-GB,en;q=0.5",
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1",
    "Origin": "https://example.com",
    "Host": "example.com"
  }
}]

두 가지 선택적 매개변수도 있습니다:

  • -nv / --noverify: 자체 서명된 인증서가 있는 사이트를 테스트하는 경우 인증서 유효성 검사를 건너뜁니다.
  • -r / --report: 보고서를 JSON 파일로 저장합니다.

예제

CLI 보고서

로드맵

  • corsair_scan을 CLI 도구로 릴리스 ✅
  • 텍스트 파일에서 URL 데이터 읽기 ✅
  • 보고서 형식 개선

만든 사람은 누구인가요?

Corsair_scan은 Santander UK 보안 엔지니어링 팀이 개발했습니다. 팀 구성원은 다음과 같습니다:

  • David Albone
  • Javier Domínguez Ruiz
  • Fernando Cabrerizo
  • Jonathan Strong
  • James Howieson
도구 다운로드