PHP 代码按预期运行,但 UNION 注入有效负载不起作用

问题描述 投票:0回答:1

我正在尝试制作一个容易受到 SQL UNION 注入攻击(或某种类型的 SQL 注入攻击)的 Web 应用程序(LAMP 堆栈 - MySQL 版本:8.0.36-0ubuntu0.22.04.1)。该代码通过 POST 参数获取用户的输入来获取 VIN 和里程。

以下 PHP 代码处理后端以将参数添加到数据库:

// If SESSION variables are set then proceed to Mileage.php
    if (isset($_SESSION['username'])) {
        // PHP Code for Handling ADDING CAR
        // Declare Variables
        $username = $_SESSION['username'];
        $vin = $_POST['vehicle'];
        $mileage = $_POST['mileage'];

        // Implement Try-catch for Error Hanlding
        try {
            // Add Mileage
            if(isset($_POST['add_data'])) {
                $query = "INSERT INTO mileage_master.mileages (`username`, `VIN`, `mileage`) VALUES ('$username', '$vin', '$mileage')";
                $query_result = mysqli_query($db,$query);
    
            // Update Mileage
            } elseif(isset($_POST['update_data'])) {
                // Query to update associated VIN's Mileage
                $update = "UPDATE mileage_master.mileages SET mileage='$mileage' WHERE username='$username' AND VIN='$vin'";
                $update_result = mysqli_query($db,$update);
            // Remove Mileage
            } elseif(isset($_POST['remove_data'])) {
                // Query to Remove VIN & Mileage
                $remove = "DELETE FROM mileage_master.mileages WHERE username='$username' AND VIN='$vin'";
                $remove_result = mysqli_query($db,$remove);
            }
        }
        catch (mysqli_sql_exception $e) {
            $showAlert = true;
            // Display Syntax Error
            $errorMessage = "My SQL Error: " . $e->getMessage();
            // Display Query (Intentional Unsafe Coding Practices)
            $errorMessage .= "\t||\tQuery: " . $sql;
        }

        
    }    
    else {
        header("Location: /");
    }
?>

以下 PHP 代码将 VIN 和里程打印到用户页面:

<?php
    // Query to get all VINs associated with username
    $result = mysqli_query($db,"SELECT * FROM mileages WHERE username='$username'");

    echo "<table style='margin-top: 35px;'>";
    echo "<tr><th>VIN</th>";
    echo "<th>Mileage</th></tr>";

    // While Loop to iterate through all returned rows
    while($row = mysqli_fetch_assoc($result)) {
        echo "<tr style='text-align: center;'>";
        // VIN
        echo "<td>" . $row['VIN'] . "</td>";
        // Mileage
        echo "<td>" . $row['mileage'] . "</td>";
        echo "</tr>";
    }

    echo "</table>";
?>

我的思考过程是,由于应用程序使用动态查询,攻击者可能会包含某种类型的 UNION SELECT 语句。 UNION select 语句的输出将存储在该查询的 VIN 列中。

但是,我无法创建成功的 SQL 注入有效负载来完成此任务。

问题

我是否需要更改应用程序的逻辑才能使漏洞利用成为可能,或者我的想法一开始就无法利用?

php mysql sql-injection
1个回答
0
投票

为了模拟 UNION SQL 注入漏洞以用于教育目的,您可以修改应用程序以包含一项功能,用户可以通过 VIN 或里程搜索其车辆,直接将用户输入插入到 SELECT 查询中。

// Example of a vulnerable SELECT query
if(isset($_POST['search_vin'])) {
    $search_vin = $_POST['search_vin'];
    $query = "SELECT * FROM mileage_master.mileages WHERE VIN='$search_vin'";
    $result = mysqli_query($db, $query);
    // Code to display results
}

此示例容易受到 UNION SQL 注入的攻击,因为攻击者可以输入诸如 0' UNION SELECT 用户名、密码等值作为 search_vin,从而可能允许他们从数据库中提取敏感信息。

© www.soinside.com 2019 - 2024. All rights reserved.