作为类(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/