【Go言語】Katana使ってみた

# katanaとは

https://github.com/projectdiscovery/katana

Project Discovery社が開発したOSINTのWebクローラーツール。
OSINTとは、*Open Source Intelligence*の略で、公開されている情報を収集・分析する手法の１つ。意図しない情報が公開されていた場合、サイバー攻撃に用いられる可能性がある。

# Katanaでなにができる？

* 高速かつ完全に構成可能な Web クローリング
* 標準モードとヘッドレスモードのサポート
* JavaScriptの解析・クローリング
* カスタマイズ可能な自動フォーム入力
* スコープ制御(正規表現などによるフィルタリング)
* JSON形式やファイル形式の出力
* STDIN、URL、複数URLのリストによる入力

# インストール

以下コマンドでインストールする。

```
go install github.com/projectdiscovery/katana/cmd/katana@latest
```


# 使い方

`-h`をつけるとオプションの説明が出てくる。

```shell-session
$ katana -h
Katana is a fast crawler focused on execution in automation
pipelines offering both headless and non-headless crawling.

Usage:
  katana [flags]

Flags:
INPUT:
   -u, -list string[]  target url / list to crawl
   -resume string      resume scan using resume.cfg
            ・・・・
```

## シンプルなURLのクローリング

`-u`をつけると指定したドメインのurlのリストを出力する

```shell-session
$ katana -u https://qiita.com

   __        __                
  / /_____ _/ /____ ____  ___ _
 /  '_/ _  / __/ _  / _ \/ _  /
/_/\_\\_,_/\__/\_,_/_//_/\_,_/                                                   

                projectdiscovery.io

[INF] Current katana version v1.0.5 (latest)
[INF] Started standard crawling for => https://qiita.com
https://qiita.com
https://qiita.com/opensearch.xml
https://qiita.com/manifest.json
https://corp.qiita.com/company/
https://qiita.com/advent-calendar/2023
https://qiita.com/release-notes
https://corp.qiita.com/jobs/
https://zine.qiita.com?utm_source=qiita&utm_medium=referral&utm_content=footer
https://corp.qiita.com/wp-content/themes/increments-co-jp-site-theme/js/skip-link-focus-fix.js?ver=20151215
https://jobs.qiita.com?utm_source=qiita&utm_medium=referral&utm_content=footer
https://help.qiita.com/ja/articles/others-brand-guideline
https://help.qiita.com
https://zine.qiita.com/wp-content/themes/zero_tcd055/js/footer-bar.js?ver=1.0
https://help.qiita.com/javascripts/application.js
https://business.qiita.com/?utm_source=qiita&utm_medium=referral&utm_content=footer
https://help.qiita.com/ja/articles/qiita-team
https://zine.qiita.com/wp-content/themes/zero_tcd055/js/comment.js?ver=1.0
https://help.qiita.com/ja/categories/qiita-team/others/
https://blog.qiita.com
    　　　　　　　・・・・
```

## 複数ドメインの入力

複数ドメインの場合は`-list`をつける。

```txt:domains.txt
https://google.com
https://qiita.com
https://github.com
```

上記のように複数のドメインが書かれたtxtファイルを読み込む場合は以下のようにする。

```
katana -list domains.txt
```

## 拡張子の指定

`-em`をつけると拡張子でフィルタリングできる

```shell
katana -u https://google.com -em js
```

`-ef` をつけると除外できる。また、複数の拡張子を指定する際はカンマで区切る。

```shell
katana -u https://google.com -ef js,css
```

## 正規表現

正規表現でフィルタリングする場合は`-mr`を使う。除外する場合は`-fr`を使う。

```shell
katana -u google.com -mr .*aaa*
```

## json出力

`-j`で結果をjson形式で出力する。

```shell
katana -u google.com -j
```

## JavaScript エンドポイントの解析

`-jc`をつけると

```shell-session
$ katana -u https://qiita.com -jc

   __        __                
  / /_____ _/ /____ ____  ___ _
 /  '_/ _  / __/ _  / _ \/ _  /
/_/\_\\_,_/\__/\_,_/_//_/\_,_/                                                   

                projectdiscovery.io

[INF] Current katana version v1.0.5 (latest)
[INF] Started standard crawling for => https://qiita.com
https://qiita.com
https://oauth.qiita.com/auth/twitter?callback_action=login_or_signup\u0026realm=qiita\u0026redirect_to=%2F
https://oauth.qiita.com/auth/github?callback_action=login_or_signup\u0026realm=qiita\u0026redirect_to=%2F
https://oauth.qiita.com/auth/google?callback_action=login_or_signup\u0026realm=qiita\u0026redirect_to=%2F
https://qiita.com/383564218/p_qiita_300x250_anonymous_feed_sidebar-top
mailto:support@qiita.com
https://zine.qiita.com/interview/202401-wealthnavi/?utm_source=qiita&amp
https://zine.qiita.com/event/202401-pingcap/?utm_source=qiita&amp
https://blog.qiita.com/github-sponsors/?utm_source=qiita&amp
https://blog.qiita.com/github-sponsors/
https://zine.qiita.com/interview/202401-wealthnavi/
https://zine.qiita.com/event/202401-pingcap/
https://blog.qiita.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fblog.qiita.com%2Fgithub-sponsors%2F&
https://zine.qiita.com/interview/202401-wealthnavi/&amp
https://business.qiita.com/?utm_source=qiita&amp
https://zine.qiita.com/event/202401-pingcap/&amp
https://zine.qiita.com/interview/202312-wealthnavi-02/
https://zine.qiita.com/event/202011-iij-2/
https://qiita.com
https://zine.qiita.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fzine.qiita.com%2Fevent%2F202401-pingcap%2F&
https://zine.qiita.com/interview/202202-arm/
https://zine.qiita.com/event/202104-soracom/
https://business.qiita.com/wp-content/plugins/jetpack/jetpack_vendor/automattic/jetpack-image-cdn/dist/image-cdn.js
https://business.qiita.com/?rest_route=/sng/v1/page-count
https://business.qiita.com/.pardot.com/pd.js
https://zine.qiita.com/topics/202010-wvd-6/
https://zine.qiita.com/interview/202012-signate/
https://cdn.qiita.com/assets/public/v3-home-bundle-56185c43edeaecb5.min.js
https://business.qiita.com/%5C/business.qiita.com%5C/wp-includes%5C/js%5C/wp-emoji-release.min.js
https://business.qiita.com/gtm.js
```

## クローラーの設定

### クローリングの深さの指定

`-d 数字`とすると深さを指定できる。デフォルトは **3**。

```
$ katana -u https://qiita.com -d 5
```

より詳細が知りたい場合は値を増やし、作業を高速化したい場合は値を減らす。

### 自動フォーム入力

`-aff`をつけると自動でフォーム入力を行う。
フィールドの値は`$HOME/.config/katana/form-config.yaml`を編集することでカスタマイズできる。

```
katana -u https://tesla.com -aff
```


### known filesの設定

`-kf`を使うと、作業を高速化し、結果の数を増やすために、サイトの構造を説明する既知のファイルへのリンクを追加できる。
デフォルトでは無効。

```
katana -u https://tesla.com -kf robotstxt,sitemapxml
```

## 認証情報の追加

### header, cookieの追加

`-H`もしくは`-header`をつけるとheaderやcookieを追加できる。

```
katana -u https://tesla.com -H 'Cookie: usrsess=AmljNrESo'
```

### プロキシの設定

`-proxy` をつけるとプロキシが設定できる。
リクエストが増えると IP がブロックされる場合は、1 つ以上のプロキシサーバを使用することでこの問題を解決できる。

# おわりに

今回、ユニークな名前だったので、たまたまこのツールを見つけたのだが、OSINTについて触れたことがなかったのでいい機会となった。今後、機会があれば他のツールも使ってみたいと思う。

同じ会社のペネストレーションツールの**nuclei**が有名らしい。

https://github.com/projectdiscovery/nuclei

日本語の記事 : [ペネトレーションツールの紹介　～nuclei～: NECセキュリティブログ | NEC](https://jpn.nec.com/cybersecurity/blog/211029/index.html)