> For the complete documentation index, see [llms.txt](https://snowyowls-organization.gitbook.io/snowyowl644-hacklog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://snowyowls-organization.gitbook.io/snowyowl644-hacklog/realworld_pentest_technique/shodan.md).

# Shodan

コースURL : <https://tryhackme.com/room/shodan>

* Shodan はインターネット全体をスキャンし、それぞれの IP アドレス上で動作しているサービスをインデックス化している
* Shodan を最大限に活用するためには、検索クエリの構文を理解することが大切

これらの検索をする前にpingなどで、事前にIP・ドメインを知っておく必要があることは、みんな知ってる

```sh
┌──(snowyowl@macbookpro-14)-[/Users/snowyowl]
└─$ ping tryhackme.com
🏓 ping
PING tryhackme.com (172.66.164.239): 56 data bytes
64 bytes from 172.66.164.239: icmp_seq=0 ttl=59 time=8.337 ms
64 bytes from 172.66.164.239: icmp_seq=1 ttl=59 time=8.139 ms
^C
--- tryhackme.com ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 8.139/8.238/8.337/0.099 ms
```

## ASN

* **自律システム番号 (ASN: Autonomous System Number)** は、グローバルIP アドレスの範囲を示す識別子
* IP アドレスを [asnlookup.com](https://asnlookup.com/) などのツールに入力すると、対応する ASN を調べられる
* しかし、どのASNも全てが独自のASNを持っているわけではなく、どこかの会社のを借りている場合もある
* Shodan.io では ASN フィルター を使って検索できる
  * `ASN:[番号]` でクエリできる
* ASNで検索するメリット
  * **大企業のネットワークに属していることがわかっている ASN 内で、コーヒーメーカーや脆弱なコンピュータを探すことができる**

## Banners

* デバイスのサービスを **バナー (banner)** として保存している
  * バナーは Shodan における最も基本的な情報単位

バナーの例

* あるポートに関する出力で、IP 情報や認証の状態などを含んでいる
* こうした詳細は基本的に API からしか見られない

```sh
{
  "data": "Moxa Nport Device",
  "Status": "Authentication disabled",
  "Name": "NP5232I_4728",
  "MAC": "00:90:e8:47:10:2d",
  "ip_str": "46.252.132.235",
  "port": 4800,
  "org": "Starhub Mobile",
  "location": {
    "country_code": "SG"
  }
}
```

## Filters

* [Explore](https://www.shodan.io/explore)にアクセスすると、最も人気のある検索クエリを見ることができる
* 最も多いのが webcam
  * 公開されているウェブカメラを見ること自体は合法ですが、パスワードで保護されているカメラに侵入しようとするのは違法
* もう一つがMySQL
* このように、サービス名で検索するときは以下のようにする
  * `product:MySQL`
* 検索クエリは連結できるため、ASNがAS14061(TryHackMe の ASN)の中で、MySQLサービスを探したい時には以下のようにすれば良い
  * `asn:AS14061 product:MySQL`

フィルター一覧はここにまとまってる

* <https://www.shodan.io/search/filters>

### Vulnフィルター

* Shodanの強力なフィルターの一つ
  * 既知の脆弱性に対して脆弱な IP アドレスを検索できる
  * 例 : **EternalBlue** に脆弱な IP アドレスを探したい場合、以下のようにクエリできる
    * `vuln:ms17-010`
* しかし、悪用を防ぐため、学術利用または企業利用 に限られている
* Memberでもダメ
  * ![](https://i.imgur.com/9mWHLvI.png)

そのほかにもこんなフィルターがある

* city
* country（国）
* geo
  * 座標
* hostname
* net
  * IP / CIDR ベース
* os
* port
* before/after
  * 期間指定

## API

* プログラムで Shodan を検索して、IP アドレスのリストを取得できる
* 企業であれば、自分たちの IP アドレスを自動的にチェックし、脆弱なものがないか確認するスクリプトを書くことが可能
* 以下のAPIで Pi-Hole を探す記事に詳しく書いてある <https://github.com/beesecurity/How-I-Hacked-Your-Pi-Hole/blob/master/README.md>

## Monitor

* 自分のネットワーク内のデバイスを監視するためのアプリケーション
* 通知を設定し、スキャンを実行し、接続されているものを完全に可視化できる
* アクセスすると、IP 範囲を入力するよう求められる
* ネットワークを追加すると、ダッシュボード上で確認できる
* 特に重要なのは
  * Top Open Ports（最もよく開いているポート）
  * Top Vulnerabilities（すぐに対処すべき脆弱性）
  * Notable Ports（通常は開いていない珍しいポート）
  * Potential Vulnerabilities（潜在的な脆弱性）
  * Notable IPs（さらに詳しく調査すべき IP）
* 興味深いのは、実際には他人のネットワークも監視できるという点
  * バグバウンティでは IP のリストを保存しておけば、Shodan が問題を発見したときにメールで通知してくれる

## Dork

* 特定のものを見つけるための **Dork（特殊検索クエリ）** をまとめた便利なページがある
  * Github
    * <https://github.com/lothos612/shodan>
    * <https://github.com/dootss/shodan-dorks>
    * <https://gist.github.com/JerryShah3>
      * この人のそれぞれにめっちゃまとまってる

面白い例としては

* OCRとリモートデスクトップを利用して、ランサムウェアに感染したマシン をインターネット上から探し出すクエリ
  * `has_screenshot:true encrypted attention`
  * ![](https://i.imgur.com/Y3NPcA1.png)
* SolarWinds サプライチェーン攻撃をファビコンで探す例
  * `http.favicon.hash:-1776962843`

## 拡張機能

* Shodanには拡張機能があって、これを使うとwebページからshodanに簡単に飛べて便利
  * 実行中の Web サーバーの IP アドレス、開いているポート、サーバーの所在地、セキュリティ上の問題があるかどうかが表示される
  * バグバウンティに最適
* ![](https://i.imgur.com/j1RcHM0.png)
