まったり技術ブログ

Webエンジニアのセキュリティブログ

SQLインジェクション体験ツール『SQLI-LABS』で遊ぶ

f:id:motikan2010:20201130185745p:plain:w600

  • はじめに
  • 環境構築
    • インストール
    • データベース設定
    • データベース・テーブル初期化
  • 動作確認
    • Less-1 (GET - Error based - Single quotes - String)
    • Less-5 (GET - Double Injection - Single Quotes - String)
    • Less-10 (GET - Blind - Time based - double quotes)
      • level 1 ⇒ 失敗
    • Less-11 (POST - Error Based - Single quotes - String)
    • Less-18 (POST - Header Injection - Uagent field - Error based)
    • Less-23 (GET - Error based - strip comments)
    • Less-53 (GET - Blind based - ORDER BY CLAUSE - String - stacked injection)

はじめに

 今回は「SQLI-LABS」を利用してさまざまなSQLi(SQL Injection)を学んでいきます。
SQLI-LABS はSQLi用やられWebアプリケーションで、SQLi攻撃を実際にやってみることでSQLiについて学ぶことができます。

  SQLI-LABS は65種類(問題一覧からは75問あるように見えたが404だった...)のSQLiを学べるらしいので早速遊んでみました。

 動作DBはMySQLです。

環境構築

インストール

 インストールは非常に簡単で、リポジトリをWebサーバ上のドキュメントルート上に配置するだけ。

$ cd /var/www/html/
$ git clone https://github.com/Audi-1/sqli-labs.git
$ cd sqli-labs
続きを読む

Sambaの脆弱性〜CVE-2017-7494をやってみる〜

f:id:motikan2010:20170531012815p:plain
  • はじめに
  • 環境構築
    • Sambaのインストール事前準備
    • Samba(4.5.9)をインストール
    • 外部からの通信許可
    • 動作確認
    • Sambaアカウントの作成
    • 外部からのSambaへの接続を許可する
    • Sambaを起動
    • プロセスの確認
    • Sambaへ接続
  • PoCを試してみる
    • 攻撃側
    • Samba側
  • PoCを実行
    • 攻撃側
    • Samba側(デバッグ内容)
    • 追記(2017/5/31)
  • 再度PoCを実行してみます。
    • 攻撃側
    • Samba側(デバッグ内容)
  • まとめ

はじめに

 2017年5月24日に公開された、ファイル共有によく利用されるSambaの脆弱性「CVE-2017-7494」を実際に構築・PoCでの検証を行ってみます。

f:id:motikan2010:20170531215510j:plain:w600

 脆弱性の概要・対策に関しては、下記の記事が参考になります。
Red Hat Customer Portal

oss.sios.com

続きを読む

【セキュリティ】jwt-goを使ってみる - その1

f:id:motikan2010:20170512014516p:plain:w500
  • はじめに
  • 動作確認
    • サンプルなどでよく見られる"HS256"を使用
      • ①トークン必要URLにアクセス
      • ②トークンを取得
      • ③発行されたトークンを送信
      • ④トークンを改ざんして送信
    • 危険と言われている署名の検証なし"None"を使用
      • ①トークン必要URLにアクセス
      • ②トークンを取得
      • ③トークンを改ざんして送信
  • 更新履歴

はじめに

 前回、RailsのJWTライブラリである"knock"を使って署名アルゴリズムにNoneを使えるのかを試してみた(使えなかった)ので、今回はGo言語のJWTライブラリである"jwt-go"を使って、署名アルゴリズムに「SHA256」と「none」を試した(使えた)ことを書いていきます。
motikan2010.hatenadiary.com

github.com

続きを読む

【Webセキュリティ】ボタンを重ねない『クリックジャッキング』の話

f:id:motikan2010:20170407185617g:plain:w600
  • はじめに
  • 検証
    • クリックジャッキングを成立させることは難しいのか
    • どこをクリックしてもターゲットとなるボタンを押下させる
      • ターゲットとなるiframeは下記のように記述
      • divがマウスカーソルに追跡するように記述

はじめに

▼ デモサイト
Trap Site

 2017年度に入りましたが、昔ながらのクリックジャッキングの話

 『クリックジャッキング』ってなんぞやという方は下の記事が大変解りやすいです。
blog.tokumaru.org

続きを読む

Bluetoothプロキシ『btproxy』を使う【IoTセキュリティ】

はじめに

 IoTというワードが流行りつつあり、Bluetoothの通信を見てみたいという欲求が出てきたので、Bluetooth通信のプロキシを探してみました。

「btproxy」というツールが良さげ、このキャプチャ技術を応用したら以下の場面などで活用できそう。

  • Bluetoothデバイス開発のデバッグ
  • Bluetoothデバイスに対してのセキュリティ診断

▼ btproxy のリポジトリ
github.com

 本記事では、「RaspberryPi3 (以下ラズパイ)」にbtproxyをインストールし、Macbook Proからスマートフォンへのファイル転送をキャプチャします。

 ラズパイのOSは「2016-03-18-raspbian-jessie.img」を使用します。

Raspberry Pi OS – Raspberry Pi

 では、早速導入していきましょう。

btproxyをRaspberryPi3に導入

BlueZをインストールする前の下準備

 Linux上でBluetoothを扱うには BlueZ をインストールする必要があります。
まずはBlueZをインストールするために必要な依存パッケージをインストールします。

必要パッケージのインストール(※失敗)

pi@raspberrypi:~ $ sudo apt-get -y install libusb-dev libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev
(省略)
E: Failed to fetch http://mirrordirector.raspbian.org/raspbian/pool/main/s/systemd/libudev-dev_215-17+deb8u3_armhf.deb  404  Not Found [IP: 5.153.225.207 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

 ラズパイにOSをインストールしただけでは、パッケージリストが古い状態らしい。

 下記のコマンドで解決します。

APTのパッケージリストの更新

pi@raspberrypi:~ $ sudo apt-get update

 改めて依存パッケージのインストール

再び必要パッケージのインストール

pi@raspberrypi:~ $ sudo apt-get -y install libusb-dev libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev

 今度は成功しました。

BlueZ − インストール

 BlueZの最新版は5系ですがbtproxyが動作しなかったので、4系のBlueZを使う。
インストール作業は"/usr/src/"ディレクトリで行う。

pi@raspberrypi:~ $ cd /usr/src/
$ sudo wget http://www.kernel.org/pub/linux/bluetooth/bluez-4.101.tar.xz
$ sudo tar xvf bluez-4.101.tar.xz
$ cd bluez-4.101/
$ sudo ./configure --disable-systemd
$ sudo make
$ sudo make install

btproxy − インストール

 btproxy はGitHub上で管理されており、インストールを非常に簡単に行えるようになっています。

pi@raspberrypi:/usr/src $ sudo apt-get -y install python2.7-dev
$ sudo git clone https://github.com/conorpp/btproxy.git
$ cd btproxy
$ sudo python setup.py install

btproxyを使う

動作確認

 ヘルプが表示されれば正常にインストールされています。

pi@raspberrypi:~ $ sudo btproxy
usage: btproxy [-h] [-a SET_ADDRESS] [-n] [-c] [-i INTERFACE] [-s SCRIPT] [-l]
               [-1 MASTER_NAME] [-2 SLAVE_NAME] [-C] [-v] [-z] [-q]
               [addr_master] [addr_slave]

Bluetooth MiTM Proxy. For analyzing bluetooth connections actively.

positional arguments:
  addr_master           Bluetooth address of target master device
  addr_slave            Bluetooth address of target slave device

optional arguments:
  -h, --help            show this help message and exit
  -a SET_ADDRESS, --set-address SET_ADDRESS
                        Address to set for Bluetooth adaptor (requires -i)
(省略)
  -q, --inquire-again   Inquire the services again, don't reuse saved
                        settings.

通信のキャプチャ

 まずはBluetooth機器のMACアドレスをスキャンします。

 MacとスマートフォンのBluetooth機能をONに設定しておきます。

 まずは、通信を行う同士のデバイスのMACアドレスを取得します。
下記のコマンドの流れで、周囲にあるBluetooth機器のMACアドレスをスキャンします。

pi@raspberrypi:~ $ bluetoothctl
[NEW] Controller B8:27:EB:0A:55:1C raspberrypi [default]
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:0A:55:1C Discovering: yes
[NEW] Device 6C:76:60:8A:23:21 KCP01K
[NEW] Device B8:E8:56:2E:23:37 XXXXXX の MacBook Pro

[bluetooth]# quit // 終了

 2つのBluetooth機器のMACアドレスを取得できたので、2つのデバイスを中継する『btproxy』を起動させます。

$ btproxy <マスターデバイスのMACアドレス> <スレーブデバイスのMACアドレス>

pi@raspberrypi:/usr/src/btproxy $ sudo btproxy B8:E8:56:2E:23:37 6C:76:60:8A:23:21
Running proxy on master  B8:E8:56:2E:23:37  and slave  6C:76:60:8A:23:21
Using shared adapter
Slave adapter:  hci0
Master adapter:  hci0
Looking up info on slave (6C:76:60:8A:23:21)
Looking up info on master (B8:E8:56:2E:23:37)
Spoofing master name as  KCP01K_btproxy
paired
Spoofing master name as  KCP01K_btproxy
Proxy listening for connections for "None"
Proxy listening for connections for "Headset Gateway"
Proxy listening for connections for "Handsfree Gateway"
Proxy listening for connections for "AV Remote Control Target"
Proxy listening for connections for "Advanced Audio"
Proxy listening for connections for "Android Network Access Point"
Proxy listening for connections for "MAP SMS/MMS"
Proxy listening for connections for "MAP EMAIL"
Proxy listening for connections for "OBEX Phonebook Access Server"
Proxy listening for connections for "OBEX Object Push"
Attempting connections with 10 services on slave
Now you're free to connect to "KCP01K_btproxy" from master device.
Connected to service "OBEX Object Push"

 ペアリングの確認ダイアログが表示されるので許可します。

・ノートPC側

・スマートフォン側

ノートPC側からスマートフォン側へテキストファイルを送ってみます。

 下記のファイルを送ってみます。

TEST.txt

Hello btproxy!!

送信と同時にbtproxyによってキャプチャされた内容が表示されます。

Accepted connection from  ('B8:E8:56:2E:23:37', 12)
<<  '\x80\x00\x07\x10\x00\x1f@'
>>  '\xa0\x00\x0c\x10\x00\xff\xfe\xcb\x00\x00\x00\x01'
<<  '\x82\x00/\x01\x00\x15\x00T\x00E\x00X\x00T\x00.\x00t\x00x\x00t\x00\x00\xc3\x00\x00\x00\x0fI\x00\x12Hello btproxy!!'
>>  '\xa0\x00\x0b\xcb\x00\x00\x00\x01I\x00\x03'
<<  '\x81\x00\x03'
>>  '\xa0\x00\x08\xcb\x00\x00\x00\x01'
(104, 'Connection reset by peer') socket slave reconnecting...
Reconnecting...
(104, 'Connection reset by peer') socket master reconnecting...

 「Hello btproxy!!」という文字が表示されておりキャプチャができていることを確認することができます。

 /libbtproxy/replace.pyファイルを編集することによって、通信内容を改ざんすることも可能です。