如何通过 SQL 注入利用我的 PHP 代码
How to exploit my PHP code with SQL Injection
我正在做一个项目,我们必须用 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>
<?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
}
}
}
?>
感谢您阅读这篇文章,现在已经坚持了一段时间,我就是想不通!
这都是关于处理登录名和密码的值。只要他们没有逃脱,恶意用户就可以发送带有单引号的值。结果,以下字符将被解释为 SQL 查询的一部分。
我建议打印脚本中内置的完整 SQL 查询。
例如输入
' OR TRUE OR passwords='
因为密码会让它在不知道密码是什么的情况下登录,因为查询将变成:
SELECT count(*) as cntUser FROM users where usernames='root' AND passwords='' OR TRUE OR passwords=''
我正在做一个项目,我们必须用 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>
<?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
}
}
}
?>
感谢您阅读这篇文章,现在已经坚持了一段时间,我就是想不通!
这都是关于处理登录名和密码的值。只要他们没有逃脱,恶意用户就可以发送带有单引号的值。结果,以下字符将被解释为 SQL 查询的一部分。 我建议打印脚本中内置的完整 SQL 查询。
例如输入
' OR TRUE OR passwords='
因为密码会让它在不知道密码是什么的情况下登录,因为查询将变成:
SELECT count(*) as cntUser FROM users where usernames='root' AND passwords='' OR TRUE OR passwords=''