Research Institute
  • Project Discovery 도구 소개 및 실습하기 - Katana
    2024년 05월 07일 14시 02분 30초에 업로드 된 글입니다.
    작성자: IIIIIIIIIIIIIIIIIIIIl

    Katana 소개

    Katana는 웹 크롤링 도구로, 빠르고 효율적이며 간단한 출력을 제공하도록 설계되었습니다. 정보와 엔드포인트를 수집하기 위해 웹사이트를 크롤링하도록 설계되었습니다. 정의 기능 중 하나는 헤드리스 브라우징을 사용하여 애플리케이션을 크롤링하는 기능입니다. 이는 JavaScript, Angular 또는 React와 같은 기술을 사용하여 구축된 단일 페이지 애플리케이션(SPA)을 크롤링하여 이러한 유형의 애플리케이션에서 정보에 효과적으로 액세스하고 수집할 수 있음을 의미합니다.

    특징 및 성능

    • 빠르고 완벽하게 구성 가능한 웹 크롤링
    • 표준 및 헤드리스 모드 지원
    • JavaScript 구문 분석 및 크롤링 지원
    • 사용자 정의 가능한 자동 양식 작성
    • 사전 구성된 필드를 통한 사용자 정의 가능한 출력
    • 사전 구성된 필드 및 Regex를 통한 사용자 정의 가능한 범위 제어
    • STDIN, URL, LIST를 통한 입력 지원
    • STDOUT, FILE 및 JSON의 지원되는 출력

    Katana 빌드 하기

    wget -q -O - <https://dl-ssl.google.com/linux/linux_signing_key.pub> | sudo apt-key add -
    sudo sh -c 'echo "deb <http://dl.google.com/linux/chrome/deb/> stable main" >> /etc/apt/sources.list.d/google.list'
    sudo apt update
    sudo apt install google-chrome-stable -y
    
    git clone <https://github.com/projectdiscovery/katana>
    cd katana/cmd/katana/
    go build
    

    Katana 사용해보기

    Katana 기본 사용법

    # tesla 사이트 크롤링
    katana -u https://hackerone.com
    
    # 멀티 URL 크롤링
    $ cat url_list.txt
    https://hackerone.com
    https://exchange.xrex.io
    
    katana -list url_list.txt
    
    # 해드리스 모드
    katana -u <https://hackerone.com> -headless -system-chrome --no-sandbox
    
    # 자바스크립트 파일 엔드포인트 구문 분석 및 크롤링
    katana -jc -u https://hackerone.com

    Katana 크롤링 모드

    Standard Mode

    Standard Mode는 내부적으로 표준 go http 라이브러리를 사용하여 HTTP 요청/응답을 처리합니다. 이 방식은 브라우저 오버헤드가 없기 때문에 훨씬 빠릅니다. 그러나 Javascript나 DOM 렌더링 없이 HTTP 응답 본문을 있는 그대로 분석합니다. DOM 렌더링 후 엔드포인트가 누락되거나 브라우저별 이벤트 등에 따라 복잡한 웹 애플리케이션에서 발생할 수 있는 비동기 엔드포인트 호출이 누락될 수 있습니다.

    Headless Mode

    Headless Mode는 내부 헤드리스 브라우저 호출하여 브라우저 컨텍스트 내에서 직접 HTTP 요청/응답을 처리합니다. 이는 두 가지 이점을 제공합니다.

    • HTTP 지문(TLS 및 사용자 에이전트)은 클라이언트를 합법적인 브라우저로 완전히 식별합니다.
    • 표준 원시 응답을 분석하고 자바스크립트가 활성화된 브라우저 렌더링 응답을 분석하여 엔드포인트가 검색되므로 적용 범위 넓어집니다.

    Field 추출

    Field 추출은 구조화되지 않은 데이터에서 특정 데이터 Field를 추출하여 추가 처리 및 활용에 더 유용하게 만드는 프로세스입니다. 특정 관심 분야에 집중하여 처리해야 하는 데이터의 양을 줄이는 데 도움이 됩니다. 이는 엔드포인트나 자격 증명과 같은 주요 데이터 부분을 식별하는 것이 잠재적인 위협을 식별하는 작업에 유용할 수 있습니다.

    예를 들어 XSS(Cross-Site Scripting) 취약점에 대해 자동화된 fuzzing을 수행한다고 할 때 출력에서 다양한 고유 매개변수를 추출하고 XSS 페이로드가 포함된 매개변수로 고유하게 식별된 엔드포인트를 fuzzing하여 잠재적인 반영을 확인할 수 있습니다. 아래 흐름도는 이 사용 사례를 설명합니다.

    기본 Field 기능

    Katana는 사용자 정의 정규 표현식을 사용할 필요 없이 직접 추출할 수 있는 아래와 같은 기본 Field 추출 기능을 지원하고 있습니다.

    FIELD DESCRIPTION EXAMPLE
    url URL Endpoint https://admin.projectdiscovery.io/admin/login?user=admin&password=admin
    qurl URL including query param https://admin.projectdiscovery.io/admin/login.php?user=admin&password=admin
    qpath Path including query param /login?user=admin&password=admin
    path URL Path https://admin.projectdiscovery.io/admin/login
    fqdn Fully Qualified Domain name admin.projectdiscovery.io
    rdn Root Domain name projectdiscovery.io
    rurl Root URL https://admin.projectdiscovery.io
    ufile URL with File https://admin.projectdiscovery.io/login.js
    file Filename in URL login.php
    key Parameter keys in URL user,password
    value Parameter values in URL admin,admin
    kv Keys=Values in URL user=admin&password=admin
    dir URL Directory name /admin/
    udir URL with Directory https://admin.projectdiscovery.io/admin/

    다음은 쿼리 매개변수가 포함된 모든 URL만 표시하기 위해 Field 옵션을 사용하는 예입니다.

    katana -u <https://hackerone.com> -f qurl -silent
    
    <https://www.hackerone.com/sites/default/files/google_tag/google_tag/google_tag.script.js?s6yjoz>
    <https://hackerone.com/security?type=team>
    <https://www.hackerone.com/contact?utm_source=internal&utm_medium=referral&utm_content=FedLink-1>
    <https://www.hackerone.com/contact?utm_source=internal&utm_medium=referral&utm_content=FedLink-2>
    <https://www.hackerone.com/from-the-ceo?page=3>
    <https://www.hackerone.com/from-the-ceo?page=2>
    <https://www.hackerone.com/from-the-ceo?page=1>
    <https://www.hackerone.com/from-the-ceo?page=0>
    <https://www.hackerone.com/company-news?page=10>
    <https://www.hackerone.com/company-news?page=8>
    <https://www.hackerone.com/company-news?page=7>
    <https://www.hackerone.com/company-news?page=6>
    <https://www.hackerone.com/company-news?page=5>
    

    사용자 정의 Field 기능

    Katana는 정규 표현식을 사용하여 사용자 정의 필드가 페이지 응답에서 특정 정보를 추출하고 저장할 수 있습니다. 이러한 사용자 정의 Field는 YAML 구성 파일($HOME/.config/katana/field-config.yaml)을 사용하거나  -flc옵션을 사용하여

    정의합니다. 다음은 사용자 정의 필드의 예입니다.

    - name: email
      type: regex
      regex:
      - '([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9_-]+)'
      - '([a-zA-Z0-9+._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9_-]+)'
    
    - name: phone
      type: regex
      regex:
      - '\\d{3}-\\d{8}|\\d{4}-\\d{7}'
    

    사용자 정의 필드를 정의할 때 다음 속성이 지원됩니다.

    • name (필수)

    name 속성 의 값은 cli 옵션 값으로 사용됩니다.

    • type (필수)

    사용자 정의 속성 유형, 현재 지원되는 옵션

    • part (선택사항)

    정보를 추출할 응답 부분입니다. 기본값은 response헤더와 본문을 모두 포함하는 입니다. 다른 가능한 값은 header, body입니다 .

    • group (선택사항)

    이 속성을 사용하여 정규식에서 특정 일치 그룹을 선택할 수 있습니다.

    사용자 정규표현식 사용 예 :

    cat $HOME/.config/katana/field-config.yaml
    
    - name: email
      type: regex
      part: response
      regex:
      - ([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9_-]+)
    
    katana -u <https://hackerone.com> -f email -silent
    
    privacy@hackerone.com
    privacy@hackerone.com
    privacy@hackerone.com
    privacy@hackerone.com
    h1-codeofconduct@hackerone.com
    h1-codeofconduct@hackerone.com
    
    댓글