【问题标题】:Why can't this be SQL injected?为什么不能注入 SQL?
【发布时间】:2017-01-23 10:21:17
【问题描述】:

我必须制作一个可以进行 SQL 注入的应用程序,但我不能使 SQL 注入成为可能。我尝试了一切以SQL注入它,但我没有成功。可以写成admin'# 这样的用户名,因为这样会超出范围。

我希望你能帮助我。你会在下面看到我的代码。

<?php
    include('include/config.php');
    include('parts/header.php');

    $submit = $_POST['submit'];
    $username = $_POST['username'];
    $password = $_POST['password'];

    if ($submit) {
        if(!empty($username OR !empty($password))) {
            $sqlQuery = mysql_query("SELECT * FROM users WHERE username = '$username' AND password = '$password'");

            if(mysql_num_rows($sqlQuery) == 1) {
                // Success - admin'#
                echo "LOGGEDIN";
                $_SESSION['loggedin'] = 1;
            }
            else {
                echo "Wrong password or username";
            }
        }
        else {
            echo "You didn't fill every field.";
        }
    }
?>

<div id="container">
    <form action="login.php" method="POST">
        <input type="text" name="username" placeholder="Type user name...">
        <input type="password" name="password" placeholder="Type password...">
        <input type="submit" name="submit" value="Log in">
    </form>
</div>

【问题讨论】:

  • 这是托管在某处的实时站点上吗?
  • 您的 AND 条件使其始终为假
  • 你尝试注入什么?
  • 它不在任何地方,我在本地。条件很好。可以登录了。
  • @KevinSteenHansen 终于得到一个灵魂提示

标签: php sql-injection


【解决方案1】:
<?php
 include('include/config.php');
 include('parts/header.php');


$submit = $_POST['submit'];
$username = (int)$_POST['username'];
$password =(int)$_POST['password'];

if ($submit) {
    if(!empty($username OR !empty($password))) {
        $sqlQuery="SELECT * FROM users  WHERE user_login = '$username' AND password  = '$password'";

        //SELECT * FROM `wp_users` WHERE `user_login`='1' OR '1' = '1' AND `user_pass`='1' OR '1' = '1' 
        //$sqlQuery = mysql_query("SELECT * FROM users WHERE username = '$username' AND password = '$password'");
        echo $sqlQuery;
        exit;
        if(mysql_num_rows($sqlQuery) == 1) {
            // Success - admin'#
            echo "LOGGEDIN";
            $_SESSION['loggedin'] = 1;
        } else {
            echo "Wrong password or username";
        }
    } else {
        echo "You didn't fill every field.";
    }
}
?>

<div id="container">
    <form method="POST">
        <input type="text" name="username" placeholder="Indtast brugernavn..">
        <input type="password" name="password" placeholder="Indtast kodeord..">
        <input type="submit" name="submit" value="Log ind">
    </form>
</div>

您的查询输出将是这个并且始终为真,

SELECT * FROM wp_users WHERE user_login = '7' AND user_pass = '7'

【讨论】:

  • 确实有效:/ 给了我错误的密码声明。
  • 你检查链接了吗?
  • 这肯定会影响
  • 引号在哪里从查询字符串中消失了?
  • 是的,如果用户名用引号引起来,那怎么注入任何东西?
【解决方案2】:

您可以使用mysql_real_escape_string 函数使变量安全:

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);

【讨论】:

  • 我的任务是做一个不安全的应用程序,但我的代码不能被sql注入:/
  • 您需要使用 htmlspecialchars() 或 strip_tags()。 1st 将特殊字符如
  • 以为你误会了我。我必须进行 UNSECURE 登录。
  • 兄弟这将帮助你从sql注入。添加此脚本后,只需尝试您的 0=0 方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 2018-07-25
相关资源
最近更新 更多