元の質問へのリンク:http://www.wechall.net/challenge/training/mysql/auth_bypass1/index.php
タイトルは、これは古典的であることを教えてくれるのmysql 私たちのタスクが使用するだけであり、射出挑戦管理者ログインを、あなたがソースコードを与えられた、だけでなく、バージョンを強調しています
私たちはをクリックしてソースコードとバージョン強調表示2つのハイパーリンクが見ることができる2つのバージョン(実際には平野と明るく、コードは同じですが、あなたが好きどれ、私が読みやすいために少しハイライトを感じる)しています
最初は、テーブル構造内のコメントです:ユーザーの3つの列のテーブルには、ユーザID 、ユーザ名、パスワード、上記IDに述べたと、ユーザー名コントロールしていないが、メインであるパスワードは、話題が私たちに語っていますので、ユーザ名があるADMIN コメントによると、パスワードがある32 ビットのchar型のタイプ、アスキー型ディスプレイ、空にすることはできません
次に、ユーザ名とパスワードを送信する:ここでユーザー名とパスワードは、サーバーに送信されたかどうかを判断する共通:: getPostStringはすでにフォームから情報を取得するために、文字列関数を関数を呼び出している。auth1_onLogin 以下の定義機能として、機能認証ユーザ名とパスワード
そして、コードの束、そして私たちが使用するプロンプトのコード。これは、 JSの関数宣言。することにより、データベースayth1_db()関数のリンクは、パスワードによるMD5は、その後、暗号化されたユーザ名とパスワードリンク機能を。これは、データフォームの送信を処理するために使用される前述のカスタム関数の一部です。「フォームと関数のパラメータの間のユーザー名」と「パスワード」のデータ転送は、唯一知っている必要があり、HTML の入力フォームのユーザー名とパスワードは、本明細書のために置換することができるクエリインチ 次に=結果= DB-> queryFirst(結果 $クエリ) の処理のMySQL 文をとの結果を返す結果、クエリの結果がでない場合はfalse 、結果が存在し説明しています。結果$ [ ' ユーザー名' ])=== 「ADMIN「ユーザーがいるかどうかを確認ADMIN ログインプロセスを完了するために、管理者のログインの場合は、。
ここで読んで基本的に問題解決のアプローチは、私たちの主な注入文、出てきました
非常に単純な MYSQLの文で、我々はことを知っているユーザ名がある管理者が、我々は知らないパスワードを
したがって、我々は直接正しい入力したユーザー名をとの背面コメントパスワードは、設定され決定されたペイロード:ADMIN「#を
#のアクションは、バックアウトコメントの内容ですので、我々は構築しているクエリ文があります
$クエリ= "ユーザーがSELECT * FROM WHEREユーザー名= '管理者' #」とパスワード= '$パスワード'"。
形成ユーザ名は= '管理者に' ユーザSELECT * FROM
だから、問題は解決されます