php - 创建盲SQL注入(inject)漏洞

标签 php mysql sql sql-injection

我正在建立一个带有 SQL 注入(inject)漏洞的网站用于测试目的。但是,我只想配置 SQL 盲注。我有这个 PHP 代码:

<?php
    $news_id = $_GET["id"];

    $conn = mysqli_connect("localhost","root","","db");
    $result = mysqli_query($conn,"SELECT * FROM News WHERE id='" . $_GET["id"] . "'");
    $count  = mysqli_num_rows($result);
    if($count==0) {
            $message = "Invalid ID";
            header( 'Location: id_not_found.html' );
    } else {
            $message = "Correct ID!";
            $m = mysqli_fetch_assoc($result);
    }
?>


<html>
    <head>
            <link rel="stylesheet" type="text/css" href="mystyle.css">
            <title>NEWS</title>
    </head>
    <body>
            <h1>NOTICIA</h1>
            <div style="background-color:#c6c6c6;color:black;padding:20px;">
                    <h2><?php echo $m["title"]; ?></h2>
                    <p><?php echo $m["body"]; ?></p>
                    <p><?php echo $m["datetime"]; ?></p>
            </div>
    </body>
</html>

在我看来,这段代码似乎只有一个 Blind SQL 漏洞,因为它只打印 News Table 的列名,所以如果用户插入一些查询,结果不会被打印出来。

但是,当我进行这种注入(inject)时:

http://localhost:8080/web_base_de_datos_asig/check_newsid.php?id=-1' UNION SELECT NULL,NULL,user(),NULL-- kyGC

打印当前用户,因为查询返回下一个数组:

Array ( [0] => [id] => [1] => [title] => [2] => root@localhost [body] => root@localhost [3] => [datetime] => ) 

那么,我怎样才能只编写盲注 SQL 呢?我真的不知道该怎么做。

更新 我写了一个肮脏的解决方案。但是,它有效(但我想得到另一个更有趣的解决方案)。 事实是,当返回数据时,我对数据库进行了另一个查询,询问每个参数。如果存在,则可以打印数据,因为它只包含真实的信息(不是,例如,db 用户名)。

   $result2 = mysqli_query($conn,"SELECT * FROM News WHERE title='" . $m["title"] . "' and body='" . $m["body"] . "' and datetime='" . $m["datetime"] . "'");
   $count2  = mysqli_num_rows($result2);

最佳答案

您将错误处理与有效载荷混淆了。盲注 SQL 并不意味着您不能使用联合子句利用它,这意味着如果发生错误(例如,如果注入(inject)了撇号),您将看不到任何错误消息或 SQL 注入(inject)的任何迹象。例如,您会看到常规的“ID 不正确”或“未找到结果”消息。 如果您的目标是不向用户返回任何文本结果的 SQL 注入(inject),那么您的目标是二进制 SQL 注入(inject),例如:登录屏幕。 请记住,二进制 SQL 注入(inject)和文本(返回文本)SQL 注入(inject)都可以是盲目的或描述性的(将错误打印回给用户)。

关于php - 创建盲SQL注入(inject)漏洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53579691/

相关文章:

php - Laravel:PHP Artisan Migrate 抛出 PDO 异常:找不到驱动程序 (Postgres)

php - Yii2 ActiveFormencodeErrorSummary 属性...它的用途是什么?

mysql - 在 2 台电脑上工作 - 同步

php - 禁用购物车中的结账按钮 - php

javascript - 如何使用 javascript/ajax 或任何其他验证格式验证用户名和密码以及从数据库中选择的角色

sql - 找出每组 Action 的开始时间

mysql - MySQL检查手册语法错误

sql - Powershell和SQL:如何将查询的值存储在变量中?

PHP页面: No database selected issue

php - 从mysql中选择YEAR(分页)