我试图在一个站点上测试SQL注入(PHP,使用MySQL数据库)。当我在username字段中放置一个撇号,并将密码框留空时,提交后,表单重新加载,字段再次变为空。但是当我在密码字段中使用一个撇号时,消息会说“无效用户名/密码”。
这说明了什么?如果我把admin‘作为用户名(不要添加注释)和密码字段中,写;Drop Table users; (不添加注释),我的评论会工作吗?
发布于 2018-07-05 10:05:27
没有足够的信息来说明--考虑到这一点,它可能只是拒绝空密码,并在密码字段中接受任何输入,对其进行散列,然后根据DB安全地检查它。
考虑以下伪代码(这并不是好的实践,只是清楚地读--不要在生产中使用!):
if (isempty($password)) {
reloadPage();
} else {
$query = "SELECT * FROM users where username = :username";
if ($user = dbquery($query, $username)){
if (checkpassword($password, $user.password)){
login();
} else {
reloadPage("Invalid Username/Password");
}
} else {
reloadPage("Invalid Username/Password");
}
}这将给出所描述的行为,而不允许SQLi (假设dbquery函数明确区分查询数据和用户提供的参数)。
稍微撇开一点说,在渗透测试中使用DROP TABLE不太可能对客户端有好处。您应该使用更安全的方法来验证潜在的缺陷:例如,获取当前DB用户。
https://security.stackexchange.com/questions/189002
复制相似问题