ParamX — JSパラメータ抽出・生成ツール
概要
ParamXは「js主动参数提取与构造工具(JSによる能動的パラメータ抽出と構築ツール)」を目的としたプロジェクトです。未承認(unauthorized)やブラックボックス的なセキュリティテストで特に問題となる「ルーティング、インターフェース、パラメータ、値」のうち、パラメータ名や値が欠落しているケースへアプローチします。多くのWebアプリではパラメータ名や初期値がJSファイル内に存在するため、JSを全量解析して正規表現ベースで候補を抽出し、リスト化することでテストの手がかりを増やします。ブラウザ拡張として、ページ上のスクリプトやXHR/fetchの痕跡からパラメータを拾い上げ、手動や自動のfuzzに活かせる形で出力することを想定しています。
リポジトリの統計情報
- スター数: 5
- フォーク数: 0
- ウォッチャー数: 5
- コミット数: 6
- ファイル数: 5
- メインの言語: JavaScript
主な特徴
- JSファイルからのパラメータ名・値候補の抽出(正規表現ベース)
- ブラウザ拡張(content script + popup UI)として即時にページ解析が可能
- 抽出結果を辞書化し、チーム内で共有・蓄積できる運用を想定
- 未承認テストで見落としがちな「欠落パラメータ/欠落値」の発見を支援
技術的なポイント
ParamXは軽量なブラウザ拡張として設計されており、content scriptでページのスクリプトやDOMを走査してJSソース中のパラメータ候補を抽出します。実装は主に正規表現群に依存しており、query文字列、オブジェクトリテラル、関数引数、fetch/XHR/axios等のHTTP呼び出しパターン、localStorage/sessionStorageやwindowオブジェクトへの代入など、パラメータを示唆する多数のシグネチャを照合します。正規表現方式は取り回しが良く軽量ですが、minifyや難読化されたコード、ダイナミックに構築されるパラメータには弱い点があります。
設計上の注目点は「JS全体からの全件抽出」で、特定のエンドポイントとパラメータが同じファイル内に存在することが多い(経験的に80%以上)という前提を活かしています。そのため、外部スクリプトや遅延読み込みスクリプトも対象に含める必要があり、content scriptはインラインスクリプトやネットワークで取得したソースも参照する実装が望まれます。抽出したキー・値は辞書として蓄積し、チームのWikiやローカルDBへエクスポートしてfuzzリスト化するワークフローを想定しています。
改善余地としては、正規表現依存の限界を補うためにAST(抽象構文木)解析の導入や、ソースマップ対応、動的評価のための軽量なランタイムトレース(関数呼び出しログ)を組み合わせる手法が挙げられます。また、誤検出を減らすためのホワイトリスト/ブラックリスト、頻度ベースのスコアリング、値のコンテキスト(近傍のURLやHTTPメソッド)を付与することでfuzz優先度を決められます。セキュリティ面では、ツール自身が扱うデータの機密性(トークンや個人データ)に注意し、利用は必ず許可されたテスト範囲内で行うべきです。
プロジェクトの構成
主要なファイルとディレクトリ:
- README.md: file
- content.js: file
- manifest.json: file
- popup.html: file
- popup.js: file
(想定される役割)
- manifest.json: ブラウザ拡張のメタ情報と権限定義
- content.js: ページ内スクリプトを解析してパラメータ候補を抽出する主要ロジック
- popup.html / popup.js: ユーザーインターフェース(抽出結果の表示、エクスポート等)
- README.md: 使い方や設計思想の説明
使い方・運用のヒント
- まずはターゲットページを開き、拡張のポップアップから抽出を実行してみる。
- 抽出結果はfuzzツール(Burp Intruderや自作スクリプト)にインポートして自動テストに活用する。
- チーム内でキー・値ペアのWikiを作り、成功したペイロードや有用なデフォルト値を蓄積すると長期的に効果が上がる。
- AST解析やソースマップ考慮、動的トレースを組み合わせるプラグインを自前で追加すると抽出精度が向上する。
まとめ
JSから能動的にパラメータを抽出してfuzz資源を増やす、実用的なブラウザ拡張ツールです(約50字)。
リポジトリ情報:
- 名前: ParamX
- 説明: js主动参数提取与构造工具
- スター数: 5
- 言語: JavaScript
- URL: https://github.com/daydust/ParamX
- オーナー: daydust
- アバター: https://avatars.githubusercontent.com/u/106896221?v=4
READMEの抜粋:
Paramx
js主动参数提取与构造工具
背景:
在未授权的测试时,最关注的其实就是四个地方
- 路由
- 接口
- 参数
- 值
这几步,都有对应的一个测试方法和流程,但是很多时候不是靠测试流程就能解决的,比如缺少参数,或者缺少值,虽然也有对应的方法,但不一定弄得出来(就像我手里就有一堆成年累月积攒的缺少参数或者缺少值的站点),未授权倒在这两步,其实是最可惜的,只能记录下来期待后续能找到对应的突破口。我也一直在想办法应对这种参数或值缺失的站点,比如建立团队内部参数键值对的wiki公开查询,wiki分为各个src,依靠团队成员提交键值对获取贡献值,贡献值可用于在wiki查询键值对。这样的机制来积累各个src的键值对fuzz库,但这也是一个长期的过程,短时间内效果微弱。由于平时接触JS比较多,就想到了一个用于解决缺少参数的点,JS中是存在大量的接口,参数等数据包特征信息。我们平时接口找参数也是定位到js中接口所在的位置,但很多时候接口的参数并没有跟接口在一块,但大概率是在一个js文件里面的(%80以上),所以我们可不可以从js中全量提取参数,于是我编写了大量正则,用来匹配…