1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Seekerで位置情報を特定する

Posted at

注意

このツールは概念実証であり、教育目的のみを目的としています。

Seekerとは

位置情報の要求を許可するためのWebページを作成し、ユーザーが許可すると位置情報を取得するツール。

SeekerはJavaScriptでgeolocation apiを使用して位置情報の許可を要求し、デバイスに存在する GPS ハードウェアを使用して経度と緯度を取得する。

受信した情報の精度は約30メートルまで正確らしい。

攻撃準備

seekerの起動

run.png

テンプレートの選択

0~7の中でフィッシングサイトのテンプレートを選択する。

select_zoom.png

選択後にWebサーバーが起動する。
デフォルトではポート8080。

ngrokでサーバーを公開

ngrokを起動しフィッシングサイトを外部からアクセス可能な状態にする。

ngrok.png

作成された偽のZoomページ。

zoom.png

ターゲット端末の位置情報を設定

今回はAndroidエミュレーター上で東京スカイツリーの位置に位置情報をセット。

set_location.png

オプションと環境変数の設定

オプション

  • -h ヘルプ
  • -k KMLファイル名
  • -p Webサーバーポート
  • -u アップデートのチェック
  • -v バージョンを表示
  • -t 指定されたインデックスを持つテンプレートを自動選択します
  • -d テスト目的で自動 http --> https リダイレクトを無効にする(index_temp.html ファイルを持つテンプレートでのみ機能します)
  • --telegram テレグラムBotに情報を送信し、使用するテレグラムトークンとチャットを提供
  • --webhook 処理されるイベントを Webhook エンドポイントに送信します

環境変数

  • DEBUG_HTTP -dオプションと同じ
  • PORT -pオプションと同じ
  • TEMPLATE -tオプションと同じ
  • TITLE グループタイトルまたはページタイトルを入力してください
  • REDIRECT ジョブの完了後にユーザーをリダイレクトする URL を指定
  • IMAGE 使用するイメージを指定します。リモート (http または https) またはローカルのいずれかになります。
    注: リモート イメージは起動時にローカルにダウンロードされます
  • DESC アイテムの説明を入力します
  • SITENAME ウェブサイトの名前を入力してください
  • DISPLAY_URL ページに表示する URL を指定します
  • MEM_NUM グループメンバーの数を提供します(これまでのテレグラム)
  • ONLINE_NUM グループのオンライン メンバーの数を提供します (これまでの Telegram)
  • TELEGRAM テレグラムボットに情報を送信するために使用するテレグラムトークンとチャットを提供します。
  • WEBHOOK イベントを転送する Webhook URL を指定します。

攻撃

ターゲットがボタンをクリックすると位置情報を許可するかポップアップが出る。

first_action.png

ここで許可を押すと位置情報奪取完了。

success.png

ターミナル上に取得した情報が表示される。

getinfo.png

[Google Maps]項目から場所を確認するとデバイスのロケーションと一致していることが確認できる。

getlocation.png

取得可能情報

  • Longitude: 経度
  • Latitude: 緯度
  • Accuracy: 正確さ
  • Altitude: 高度 - 常に利用できるわけではありません
  • Direction: 方向 - ユーザーが移動している場合にのみ使用可能
  • Speed: 速度 - ユーザーが移動している場合にのみ使用可能
  • Unique ID using Canvas Fingerprinting: Canvas Fingerprinting を使用した一意の ID
  • Device Model: デバイスモデル - 常に利用できるわけではありません
  • Operating System: オペレーティング·システム
  • Platform: プラットホーム
  • Number of CPU Cores: CPUコアの数 - おおよその結果
  • Amount of RAM: RAM の量 - おおよその結果
  • Screen Resolution: 画面の解像度
  • GPU information: GPU情報
  • Browser Name and Version: ブラウザ名とバージョン
  • Public IP Address: パブリックIPアドレス
  • Local IP Address: ローカルIPアドレス
  • Local Port: ローカルポート

対策

  • 各ブラウザでJavaScriptを無効化する。(今回は裏でJsが動いているので有用だが、他サイトへの影響があるので実用的ではない)
  • 正規サイトをブックマークしておき、ブックマークからアクセスする。
  • サイトURLの確認。
  • Webブラウザのバージョンをある程度新しいものにしておく。
  • 身に覚えのないリンクアクセスしない。

おまけ

位置情報を取得する処理

Zoomテンプレートの場合、サイトのボタンをクリックした際にlocate関数が実行される。

jscode.png

getCurrentPositionの第一引数(位置情報を取得できた場合の処理)としてshowPositionを指定している。

seeker/js/location.js
function locate(callback, errCallback) {
  if (navigator.geolocation) {
    var optn = { enableHighAccuracy: true, timeout: 30000, maximumage: 0 };
    navigator.geolocation.getCurrentPosition(showPosition, showError, optn);
  }

showPotisionで位置情報を取得している。

seeker/js/location.js
function showPosition(position) {
    var lat = position.coords.latitude;
    if (lat) {
      lat = lat + ' deg';
    }
    else {
      lat = 'Not Available';
    }
    var lon = position.coords.longitude;
    if (lon) {
      lon = lon + ' deg';
    }
    else {
      lon = 'Not Available';
    }
    var acc = position.coords.accuracy;
    if (acc) {
      acc = acc + ' m';
    }
    else {
      acc = 'Not Available';
    }
    var alt = position.coords.altitude;
    if (alt) {
      alt = alt + ' m';
    }
    else {
      alt = 'Not Available';
    }
    var dir = position.coords.heading;
    if (dir) {
      dir = dir + ' deg';
    }
    else {
      dir = 'Not Available';
    }
    var spd = position.coords.speed;
    if (spd) {
      spd = spd + ' m/s';
    }
    else {
      spd = 'Not Available';
    }

テンプレートの種類

  • NearYou
    「Continue」ボタンをクリックすると位置情報を取得できる。

access.png

  • Google Drive

Google DriveのTemplateを選択後Google DriveのURLを入れる。

image.png

「Request access」ボタンをクリックすると入力したGoogle DriveのURLへリダイレクトされるようになっている。

googledrive_firstpage.png

open_gdrive.png

処理部分は下記。

seeker/template/gdrive/index_temp.html
<p id="buttons" style="padding-top: 10px">
    <button id="requestButton" style="font-weight:bold" class="jfk-button jfk-button-action" onclick="locate(function(){window.location='REDIRECT_URL';}, function(){$('#change').html('Failed');});">Request access</button>
</p>

開発者モードで見るとGoogle Driveへのリダイレクト処理がlocate関数のcallback引数に入っている。

gdrive_link.png

恐らくGoogle Driveのサーバー側でReferer見るとこの偽ページのURLが入っていると思う。

  • zoom

「Launch Meeting」ボタンをクリックすると位置情報を取得できる。

zoom.png

  • Google ReCaptcha

テンプレートの選択後それぞれのフォワードURLを入力。

recap_temp.png

CheckBoxをクリックするとReal Forward URLに飛ばされる。

recapchar.png

CheckBoxをクリックするとmain関数が実行される。

recapcha_onclick.png

main関数ではlocate関数が実行される。

template/captcha/js/main_temp.js
function main(){
  locate(transmitted, cap_error);
  }
  • 自作テンプレートも使用可能

参考サイト

1
1
2

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?