php - SQL注入(inject)攻击如何使用无效密码登录Web应用程序?

标签 php mysql sql-injection

作为类(class)项目,我用 PHP 开发了一个 Web 应用程序。现在我正尝试在我的网站上执行 SQL 注入(inject)攻击,但我不太明白这个想法。比方说,我知道一个有效的用户名,但我正在尝试使用一个无效的密码登录。我想我应该在登录页面的密码字段中输入类似 1 或 10=10 的内容,但我离成功还差得很远。

处理用户登录的代码如下:

<?php

require_once('repository_fns.php');
session_start();

if (($_POST['username']) && ($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
if(login($username, $password)) {
  $_SESSION['valid_user'] = $username;
}
else{
do_html_header_error_page();
do_error_message_cannot_login();
do_html_footer();
exit;
}
}

$current_user=$_SESSION['valid_user'];

do_html_header_member();
do_page_content_member($current_user);

do_html_footer();

?>

登录函数:

function login($username, $password) {
   $conn = db_connect();
   $result = $conn->query("select * from user where username='".$username."'
   and password = sha1('".$password."')");
   if (!$result) {
   return false;
 }

 if ($result->num_rows>0) {
   return true;
 } else {
 return false;
 }
 }

那么我应该如何实际执行攻击?或者此登录功能是否存在任何类型的 SQL 注入(inject)漏洞?

最佳答案

这个想法是注入(inject)一段 sql 来抑制密码检查部分。最简单的方法是使用注释“--”:

$username = "known_username'--";

所以查询将是

select * from user where username='known_username'--' and password = sha1('anything')

“--”后面的部分是注释,因此被忽略。

关于php - SQL注入(inject)攻击如何使用无效密码登录Web应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35150777/

相关文章:

java - 我应该将 ACL 表插入我的数据库还是创建一个单独的数据库?

mysql - Ruby on Rails 2.3.8 : How do I do a custom SQL query, 作为对象/ActiveRecord 对象返回,而不是散列?

php - PDO、准备好的语句和 SQL 注入(inject)

php - 如何使用 PHP 数组表示图形数据结构

php - 在 PHP 中,你如何创建可重用对象?对此有最佳实践吗?你喜欢哪个?

php - drupal 输入过滤器示例

MySQL 根据 DATE 更新列的值

php - 如何使用 Shift-JIS 和 CP932 创建 SQL 注入(inject)攻击?

php - 如何防止 PHP 中的 SQL 注入(inject)?

php - MySQL 夏令时信息似乎不正确。如何确保它在 Windows 中是最新的?