Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
jsluice — JavaScriptからURL、パス、シークレット、その他の興味深い情報を抽出する | Kitploit
ツール/GitHubGitHub/bishopfox/jsluice
静的分析コード分析情報収集ウェブセキュリティペネトレーションテストシークレット検出
GitHubbishopfox/jsluice

jsluice

JavaScriptからURL、パス、シークレット、その他の興味深い情報を抽出する

リポジトリを見る
1.9k1452年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

jsluice

Go Reference

jsluice は、JavaScript ソースコードから URL、パス、シークレット、その他の有用なデータを抽出するための Go パッケージおよび コマンドラインツール です。

すぐにこれらの機能を試したい場合は、コマンドラインツール を参照してください。

jsluice の機能を自分のプロジェクトに統合したい場合は、examples を参照し、パッケージドキュメント をお読みください。

インストール

コマンドラインツールをインストールするには、次を実行します:

root@kitploit:~
▶ go install github.com/BishopFox/jsluice/cmd/jsluice@latest

パッケージをプロジェクトに追加するには、次を実行します:

root@kitploit:~
▶ go get github.com/BishopFox/jsluice

URL の抽出

jsluice は正規表現だけに頼るのではなく、go-tree-sitter を使用して、document.location への代入、window.open() への受け渡し、fetch() への受け渡しなど、URL が使用されることが分かっている場所を探します。

簡単なサンプルプログラムは こちら にあります:

root@kitploit:~
analyzer := jsluice.NewAnalyzer([]byte(`
    const login = (redirect) => {
        document.location = "/login?redirect=" + redirect + "&method=oauth"
    }
`))

for _, url := range analyzer.GetURLs() {
    j, err := json.MarshalIndent(url, "", "  ")
    if err != nil {
        continue
    }

    fmt.Printf("%s\n", j)
}

サンプルの実行:

root@kitploit:~
▶ go run examples/basic/main.go
{
  "url": "/login?redirect=EXPR\u0026method=oauth",
  "queryParams": [
    "method",
    "redirect"
  ],
  "bodyParams": [],
  "method": "GET",
  "type": "locationAssignment",
  "source": "document.location = \"/login?redirect=\" + redirect + \"\u0026method=oauth\""
}

redirect クエリ文字列パラメータの値が EXPR になっていることに注意してください。このようなコードは JavaScript では一般的です:

root@kitploit:~
document.location = "/login?redirect=" + redirect + "&method=oauth"

jsluice は文字列連結を理解し、値が分からない式を EXPR に置き換えます。完璧な解決策ではありませんが、この方法で得られる URL やパスは多くの場合有効なものになり、他の手法では簡単には見つけられないものを発見できることを意味します。この場合、素朴な正規表現では method クエリ文字列パラメータを見逃してしまう可能性があります:

root@kitploit:~
▶ JS='document.location = "/login?redirect=" + redirect + "&method=oauth"'
▶ echo $JS | grep -oE 'document\.location = "[^"]+"'
document.location = "/login?redirect="

カスタム URL マッチャー

jsluice には一般的なシナリオ向けの組み込み URL マッチャーがいくつか用意されていますが、AddURLMatcher 関数でさらに追加できます:

root@kitploit:~
analyzer := jsluice.NewAnalyzer([]byte(`
    var fn = () => {
        var meta = {
            contact: "mailto:[email protected]",
            home: "https://example.com"
        }
        return meta
    }
`))

analyzer.AddURLMatcher(
    // The first value in the jsluice.URLMatcher struct is the type of node to look for.
    // It can be one of "string", "assignment_expression", or "call_expression"
    jsluice.URLMatcher{"string", func(n *jsluice.Node) *jsluice.URL {
        val := n.DecodedString()
        if !strings.HasPrefix(val, "mailto:") {
            return nil
        }

        return &jsluice.URL{
            URL:  val,
            Type: "mailto",
        }
    }},
)

for _, match := range analyzer.GetURLs() {
    fmt.Println(match.URL)
}

この例のコピーは こちら にあります。次のように実行できます:

root@kitploit:~
▶ go run examples/urlmatcher/main.go
mailto:[email protected]
https://example.com

jsluice はデフォルトでは mailto: URI に一致しません。これはカスタム URLMatcher によって発見されました。

シークレットの抽出

jsluice は URL に加えて、シークレットも抽出できます。URL 抽出と同様に、デフォルトのマッチャーを補完するカスタムマッチャーを提供できます。これを行う短いサンプルプログラムが こちら にあります:

root@kitploit:~
analyzer := jsluice.NewAnalyzer([]byte(`
    var config = {
        apiKey: "AUTH_1a2b3c4d5e6f",
        apiURL: "https://api.example.com/v2/"
    }
`))

analyzer.AddSecretMatcher(
    // The first value in the jsluice.SecretMatcher struct is a
    // tree-sitter query to run on the JavaScript source.
    jsluice.SecretMatcher{"(pair) @match", func(n *jsluice.Node) *jsluice.Secret {
        key := n.ChildByFieldName("key").DecodedString()
        value := n.ChildByFieldName("value").DecodedString()

        if !strings.Contains(key, "api") {
            return nil
        }

        if !strings.HasPrefix(value, "AUTH_") {
            return nil
        }

        return &jsluice.Secret{
            Kind: "fakeApi",
            Data: map[string]string{
                "key":   key,
                "value": value,
            },
            Severity: jsluice.SeverityLow,
            Context:  n.Parent().AsMap(),
        }
    }},
)

for _, match := range analyzer.GetSecrets() {
    j, err := json.MarshalIndent(match, "", "  ")
    if err != nil {
        continue
    }

    fmt.Printf("%s\n", j)
}

サンプルの実行:

root@kitploit:~
▶ go run examples/secrets/main.go
[2023-06-14T13:04:16+0100]
{
  "kind": "fakeApi",
  "data": {
    "key": "apiKey",
    "value": "AUTH_1a2b3c4d5e6f"
  },
  "severity": "low",
  "context": {
    "apiKey": "AUTH_1a2b3c4d5e6f",
    "apiURL": "https://api.example.com/v2/"
  }
}

JavaScript ソース全体の構文ツリーが利用できるため、key と value の両方を検査でき、さらにマッチのコンテキストとして親オブジェクトを簡単に提供できました。

ツールをダウンロード