SQL Inject through form 在 PHP 5.6 中不起作用 [重复]

SQL Inject through form is not working in PHP 5.6 [duplicate]

提问人:01_Secret.Lubis_10 提问时间:1/9/2020 最后编辑:01_Secret.Lubis_10 更新时间:1/9/2020 访问量:692

问:

我正在尝试进行SQL注入(SQLi)。

我的表格是:

<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="POST">
   <table>
        <tr>
            <td>Nama Properti</td>
            <td>:</td>
            <td>
                <input type="text" name="property_name">
            </td>
            <td>
                <?php if(isset($errors)) echo "<p class='errlog'>" . $errors . "</p>"; ?>
            </td>
        </tr>               
        <tr>
            <td></td>
            <td>:</td>
            <td>
                <input type="submit" name="submit-form" value="Kirim" >
            </td>
        </tr>
    </table>
</form>

我的行动是:

<?php
    if (isset($_POST["submit-form"])) {

        if (!empty($_POST["property_name"])) {

            $mysqli = new mysqli("127.0.0.1", "root", "", "belajar");
            if ($mysqli->connect_errno) {
                echo "Failed to connect to MySQL: " . $mysqli->connect_error;
                exit();
            }
            $property_name = $_POST["property_name"];
            echo $property_name; // produce 'x'); DROP TABLE kelas_lain;--
            $sql = "INSERT INTO kelas_lain (property_name) VALUES (". $property_name .")";
            echo "<br>" . $sql; // produce INSERT INTO kelas_lain (property_name) VALUES ('x'); DROP TABLE kelas_lain;--)

            if ($sql_query = $mysqli->query($sql)) {
                echo "<p class='successlog'>Success !</p>";
                echo "Returned rows are: " . $sql_query->num_rows;  
                $sql_query->free_result();
            }else{
                echo "<p class='errlog'>There is an error with SQL !</p>";
            }

            $mysqli->close();


        }else{
            $errors = "Mohon Isi Form !";                   
        }

    }
?>

我通过输入用户表单传递了它,但我收到一个错误,而不是成功地执行了这个命令,这将删除kelas_lain表。'x'); DROP TABLE kelas_lain;--echo "<p class='errlog'>There is an error with SQL !</p>";INSERT INTO kelas_lain (property_name) VALUES ('x'); DROP TABLE kelas_lain;--)

我做到了:echo $sql;

插入 INTO kelas_lain (property_name) 值 ('X');拖放表 kelas_lain;--)

我认为一切都是正确的。

附加

虽然我已经通过 url 传递查询成功完成了 (SQLi)。

传递的查询是: 索引.php?id=1 UNION SELECT password FROM siswalogin 其中 id=1这是代码:

<?php 
   /*
    * Check if the 'id' GET variable is set
    */
    if (isset($_GET['id'])){
        $id = htmlspecialchars($_GET['id']);

        /* Setup the connection to the database */
        $mysqli = new mysqli('localhost', 'root', '', 'belajar');

        /* Check connection before executing the SQL query */
        if ($mysqli->connect_errno) {
            printf("Connect failed: %s\n", $mysqli->connect_error);
            exit();
        }

        /* SQL query vulnerable to SQL injection */
        $sql = "SELECT username
        FROM siswalogin
        WHERE id = $id";

        /* Select queries return a result */
        if ($result = $mysqli->query($sql)) {
            while($obj = $result->fetch_object()){
                print($obj->username);
            }
            echo "<br>" . $id; // = 1 UNION SELECT password FROM siswalogin where id=1
        }
        /* If the database returns an error, print it to screen */
        elseif($mysqli->error){
            print($mysqli->error);
        }
    }
?>
php mysqli mariadb sql注入

评论

0赞 bahram 1/9/2020
传递 'x') “ ;DROP TABLE kelas_lain;-- 我想你忘了在输入中传递”
0赞 bahram 1/9/2020
或 INSERT INTO kelas_lain (property_name) 值 ('x');DROP TABLE kelas_lain;-- ) 在 -- 之后传递一个空格
0赞 01_Secret.Lubis_10 1/9/2020
@bahram我在值的末尾添加了更多空间,所以 : ' 'x');DROP TABLE kelas_lain;-- ' 它仍然不起作用。
0赞 deceze 1/9/2020
query只处理一个语句。对于多个语句,有 .这可能就是阻止这里注射的原因。multi_query
0赞 01_Secret.Lubis_10 1/9/2020
这是由多个语句查询被拒绝引起的还是其他原因?

答:

3赞 Georg Richter 1/9/2020 #1

出于安全原因(尤其是 sql 注入),该函数不支持执行多个 sql 语句。mysqli_query()

而不是您必须使用函数(永远不应该用于处理 Web 表单的内容)。mysqli_multi_query()

默认情况下,MariaDB/MySQL服务器不支持执行多个SQL语句,除非客户端标记并设置。但是,PHP 中不存在这些选项。CLIENT_MULTI_STATEMENTSCLIENT_MULTI_RESULTS

评论

0赞 01_Secret.Lubis_10 1/10/2020
谢谢你回答我的问题。我是编程语言的新手,想开始。你的回答为我增加了更多的知识。