Metasploitable2でWebアプリの脆弱性を勉強する(SQLi その2)
※記事の内容は、ご自身が管理するサイト以外には絶対に使用しないでください。
[OWASP TOP10] A1_Injection_SQLi_2_BypassAuthentication_Login
BypassAuthenticationですのでSQLiを使って認証を回避するという事が想像できます。
例によって、どのようなサイト(機能)かどうかを調査します。
NameとPasswordを入力し、Passwordがあっていればログインに成功します。ふつーのログイン画面ですw
ブラウザからどのようなリクエストを送信しているか調査します。
usernameとpasswordを送信しています。(あたりまえ)
SQLiなのでどのようなSQLを投げているかソースを見てみます。(またまた反則)
<?php $query = "SELECT * FROM accounts WHERE username='". $username. "' AND password='". $password. "'";
具体的に値をあてはめたSQLです。
SELECT * FROM accounts WHERE username='test' AND password='test'
目的(認証回避)を遂行するには、別にパスワードが一致しないでも条件(WHERE句)が真でかえるSQLを投げればよいことが想像できます。
こんな感じです。
SELECT * FROM accounts WHERE username='test' AND password='test' OR 'a'='a'
試してみます(ブラウザからのリクエストを改ざん)
ログインに成功しました。※「test」というユーザが居なかったのでSQLで最初にヒットしたレコード(Admin)が表示されたと思われます。