Metasploitable2でWebアプリの脆弱性を勉強する(SQLi その2)

※記事の内容は、ご自身が管理するサイト以外には絶対に使用しないでください。

[OWASP TOP10] A1_Injection_SQLi_2_BypassAuthentication_Login


f:id:jiranyan:20190305124442p:plain

BypassAuthenticationですのでSQLiを使って認証を回避するという事が想像できます。

例によって、どのようなサイト(機能)かどうかを調査します。

NameとPasswordを入力し、Passwordがあっていればログインに成功します。ふつーのログイン画面ですw

f:id:jiranyan:20190305124649p:plain

ブラウザからどのようなリクエストを送信しているか調査します。

usernameとpasswordを送信しています。(あたりまえ)

f:id:jiranyan:20190305125051p:plain

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'

試してみます(ブラウザからのリクエストを改ざん)

f:id:jiranyan:20190305131109p:plain

ログインに成功しました。※「test」というユーザが居なかったのでSQLで最初にヒットしたレコード(Admin)が表示されたと思われます。

f:id:jiranyan:20190305131539p:plain