注:これは、仮想マシン内に作成されたサイトを持つプロジェクトです。それは私が取り組んでいる上級カレッジプロジェクトです。実際の現実のウェブサイトを悪用しようとはしていません。これは、たとえ与えられた機能であっても、そのような悪用がどれほど強力であるかを理解する教育的な目的のためです。ウェブサイトの脆弱性を悪用する必要quote()に対するSQLインジェクション?
私は現在、(VMの内部で、安全で制御された環境の下で)プロジェクトに取り組んでいます。 1つはSQL文を利用することです。目標は、ユーザー名と間違ったパスワードを入力してもログインできることです。私はこのような運がないまま数時間だけ作業しています。私はかなりの研究をしました利用可能な脆弱性を確認することができます。
人は自分のユーザー名とパスワードを(この場合には、それは何もすることができます)送信すると、関数は、次の準備SQL文で実行されます。
$quoted
がある
$query = "SELECT Salt FROM Accounts WHERE Username = '$quoted'";
:
$quoted = $this->db->quote($user);
これは基本的に提供されるすべての一重引用符に対して追加の一重引用符を追加します。もともと\' OR 1=1 --
さ$user
変数で
SELECT Salt FROM Accounts WHERE Username = '\'' OR 1=1 -- '
:(など' OR 1=1'
、などなど)、他の可能性を試しにもかかわらず、私が作ってみた最も近いものはこれです。最初と最後の引用符は、エスケープされた一重引用符の後に追加の引用符とともにquote()関数によって自動的に追加されます。しかしこれは適切なSQL構文とは思われません。これはおそらくユーザー名として$user
の入力全体を解釈しているためです。
この後に別の準備文がありますが、それはsaltで連結されたパスワードのmd5ハッシュに依存しています。そして、実際にmd5に一度注射できるようにする方法はないと思いますハッシュを返します。好奇心の声明は次のとおりです。
$query = "SELECT * FROM Accounts WHERE Username = '$user' AND Password = '$hash';
$hash = md5($pass.$salt)
となります。
誰でも可能性を見極めたいですか?たぶん私はそれを見落としているかもしれませんが、私はすべてを試したような気がします。
EDIT:私はこれを解決しました。それは、注射を利用するために別の機能を働かせることと関連していました。最終的には、注射コード(2次注入)のユーザー名が追加され、ログインが行われました。ログインプロシージャは最初のクエリのユーザ名を引用しましたが、2番目のクエリはユーザ名を引用しませんでした。したがって、ユーザーは自動的にログインします。SQLで
「私が注射した最も近いのはこれです。」---私はそれを信じていません。 '\ 'OR 1 = 1 --'これは何の問題もなく引用されるべきです。 – zerkms
@zerkms私の悪いことに、私は他の注射も試みたことを説明するのを忘れました。しかしそれらはすべて引用機能によって引用されるようです。 – SpacePyro
あなたは何を期待しましたか?彼らは引用符で囲まれているので、引用符は – zerkms