如何利用SQL注入开发我的PHP代码

如何利用SQL注入开发我的PHP代码,php,sql-injection,Php,Sql Injection,我正在从事一个项目,在修复漏洞之前,我们必须使用PHP编写登录页面,然后使用SQL注入对其进行攻击。到目前为止,我已经编写了登录页面,它连接到一个数据库,并进行查找以查看用户是否存在,如果存在,则可以登录 然而,无论我做了什么尝试,我似乎都无法利用它来打印其他用户,绕过密码,等等。我不知道为什么我是PHP新手。我没有做任何输入消毒 HTML输入表格: <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>"

我正在从事一个项目,在修复漏洞之前,我们必须使用PHP编写登录页面,然后使用SQL注入对其进行攻击。到目前为止,我已经编写了登录页面,它连接到一个数据库,并进行查找以查看用户是否存在,如果存在,则可以登录

然而,无论我做了什么尝试,我似乎都无法利用它来打印其他用户,绕过密码,等等。我不知道为什么我是PHP新手。我没有做任何输入消毒

HTML输入表格:

<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<p><font face = "Arial" size="4" color="#6b8e23">Login Menu</font></p>
<input type="text" name="username" placeholder="Username" />
<div><input type="password" name="password" placeholder="password" /></div>
<input type="submit" name="Login" value="Login"></input>

谢谢你读了这篇文章,我已经被困了一段时间了,我就是想不出来

这一切都是关于处理登录和密码的值。只要它们没有逃逸,恶意用户就可以使用单引号符号发送值。结果,以下字符将被解释为SQL查询的一部分。 我建议打印脚本中构建的完整SQL查询

例如进入

'或TRUE或'

as password将使其在不知道密码的情况下登录,因为查询将变成:

从usernames='root'和passwords=或TRUE或passwords的用户中选择count*as cntUser=


我不确定这是不是询问这些事情的正确地点。这并不是一个真正的编码问题。要向您指出正确的方向,请了解您作为$\u POST['username']发送的任何内容都将是查询的一部分。如果$u POST['username']是lol'或1=1;-您的$sql\u查询将从usernames='lol'或1=1;-和passwords='在MySQL中是一个注释。我想我说的是,在尝试之前先学习一些sql?是的,我自己也不确定,我想知道这是否是一个编码问题,所以我想在这里试试。or 1=1;-是我尝试的第一件事,但是如果脚本能够找到某人,它应该打印出用户找到的消息-但是当我使用任何类型的sql语句时,我都不会收到该消息,这似乎说明注入不起作用,这似乎说明注入不起作用,试着不要再这么幼稚了lol。有可能在服务器上,您已禁用了-作为注释,这意味着您在构建可注入SQL负载方面还有一些工作要做。唯一能阻止注入攻击的方法是使用prepare@IsThisJavascript,您能否举例说明如何禁用注释的-syntax?我不知道这是可配置的,也没有提到在文档中禁用注释语法:@BillKarwin抱歉,是的,你是对的。我在想一个我记得的老答案,但有点搞混了;我以为没有反斜杠转义开关,直到我重新阅读它facepalm。我想知道为什么OP不能在$u POST['username']中使用-登录。很荣幸从你那里得到一个标签:X
<?php
// connect to database
$host = "localhost";
$username = 'root';
$password = '';
$dbname = "accounts";
$con = mysqli_connect($host, $username, $password, $dbname);

//check to ensure connection exists !DEBUG!
if (!$con) {
    die("Connection Failed: " . mysqli_connect_error());
    ?>
    <p><font face = "Arial" size="4" color="#ff4500">No Connection</font></p>
    <?php
} else {
    ?>
    <p><font face = "Arial" size="4" color="#ff4500">Connection established with sql server </font></p>
<?php
}

//if the form has been submitted
if (isset($_POST['Login']))
{
    //user login details
    $user = $_POST['username'];
    $pass = $_POST['password'];

    if($user != "" && $pass != "")
    {
        $sql_query = "SELECT count(*) as cntUser FROM users where usernames='".$user."' AND passwords='".$pass."'";

        $result = mysqli_query($con, $sql_query);
        $row = mysqli_fetch_array($result);
        $count = $row['cntUser'];

        if($count > 0)
        {
            $_SESSION['username'] = $user;
            ?>
            <p><font face = "Arial" size="4" color="#ff4500">User Found</font></p>
            <?php
        } else {
            ?>
            <p><font face = "Arial" size="4" color="#ff4500">No User by that name</font></p>
            <?php
        }
    }
}
?>