それでは毛玉諸君、これにて失敬

日々の精進を備忘録的に綴ります。

ハッキング・ラボの作り方 webアプリのハッキング編

今年のM-1の優勝者が全く予想できません。ko_ya346です。
引き続きハッキングをやっていきます。

今回はDVWAという学習用のwebアプリの導入と、SQLインジェクションによる攻撃を行いたいと思います。

DVWA導入

以下リンクから、kali linux仮想環境にzipファイルをダウンロードします。

DVWA - Damn Vulnerable Web Application

ターミナルから、zipファイルをrootに移動、解凍、権限変更を行います。
ついでにApacheMySQLを起動しておきます。

cp /Downloads/DVWA-master.zip /root
unzip DVWA-master.zip 

# 権限変更
cp -Rv /root/DVWA-master /var/www/html/
chmod -Rv 777 /var/www/html/DVWA-master/

# configファイルの名前を修正
cd /var/www/html/DVWA-master/config
mv config.inc.php.dist config.inc.php

# ApacheとMySQLを起動
cd
service apache2 start
service mysql start

firefoxを起動してhttp://localhost/DVWA-master/login.phpにアクセスします。
このような画面が表示されるはずです。

f:id:ko_ya346:20211104094501p:plain
setup画面が表示された

データベースを生成するために、再びターミナルで準備を行います。

# kali
service mysql start
mysql -u root -p
>>Enter password: {kaliのパスワードを入力}
# MariaDB
use mysql;

# DB接続用アカウント登録(名前とパスワードはなんでもOK)
GRANT ALL PRIVILEGES ON *.* TO 'ipusiron'@'localhost' IDENTIFIED BY 'password';

設定したらCtrl + cで終了します。

config.inc.phpを編集して、MySQLに接続できるようにします。

vi /var/www/html/DVWA-master/config/config.inc.php

下画像部分を先ほど設定した名前とパスワードに変更して保存します。

f:id:ko_ya346:20211104095114p:plain

firefoxに戻り、ページ下部のCreate / Reset Databaseを押します。

f:id:ko_ya346:20211104095252p:plain
ポチッとな

ボタンの下にこんな表示が出ているのを確認します。

f:id:ko_ya346:20211104095445p:plain
successful!

loginページに移動して、

Username: admin
password: password

と入力します。

Welcome to Damn Vulnerable Web Application!と表示されていれば成功です!

f:id:ko_ya346:20211104095640p:plain

さて、準備が完了したのでいよいよ攻撃を仕掛けていきましょう。

SQLインジェクション

SQLインジェクションはニュースで報道されるほどの超有名な攻撃方法です。
webアプリが想定しないSQLを実行させて、DBを不正に操作します。
早速やっていきましょう。

まず、メニューのDVWA Securityボタンを押して、セキュリティレベルをLowにします。

f:id:ko_ya346:20211104095836p:plain
LowからのSubmit!

メニューのSQL Injectionを選択すると、User IDの入力欄が出てきます。
ここで、いろいろな入力を入れて挙動を確認します。

f:id:ko_ya346:20211104103255g:plain

存在しないユーザーの場合は何も表示されません。
この表示結果から「select ??,?? from ?? where id = <入力値>」というSQL文が実行されていそうです。

ここに、SQLインジェクションの常套句である1' OR 'a'='aを入力します。
これでwhere文がTrueとなり、すべてのフィールドが表示されます。

f:id:ko_ya346:20211104103730p:plain

続いてDBシステムのバージョンを取得します。
select文をUNIONで統合することで簡単に取得できます。

' union select version(), null #

f:id:ko_ya346:20211104104212p:plain

ホスト名、DB名、ユーザー名を調べます。
もはやなんでもありですね。

'union select @@hostname,database() #

f:id:ko_ya346:20211104104257p:plain

'union select user(),'A' #

f:id:ko_ya346:20211104104339p:plain

おわりに

SQLインジェクション脆弱性があると、このように好き勝手情報を奪われてしまうということが分かりました。
今回使用したアプリには他にも様々なツールが用意してあるので、別のツールへの攻撃も学習したいと思います。