首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用SQL注入利用我的PHP代码

如何使用SQL注入利用我的PHP代码
EN

Stack Overflow用户
提问于 2018-04-03 10:00:02
回答 1查看 4.8K关注 0票数 1

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

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

HTML输入表格:

代码语言:javascript
运行
复制
<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>

代码语言:javascript
运行
复制
<?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
        }
    }
}
?>

谢谢你阅读了这篇文章,我已经坚持了很长一段时间了,我就是搞不懂!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-03 10:36:05

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

例如,输入

“或真或passwords=”

因为密码将使它在不知道查询将变成什么密码的情况下登录:

从用户名=‘root’和密码=‘OR TRUE或密码’的用户中选择count(*)作为cntUser

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49627254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档