这是显示用户身份验证方式的PhP代码:
$input_uname = $_GET[’username’];
$input_pwd = $_GET[’Password’];
$hashed_pwd = sha1($input_pwd);
...
$sql = "SELECT id, name, eid, salary, birth, ssn, address, email,
nickname, Password
FROM credential
WHERE name= ’$input_uname’ and Password=’$hashed_pwd’";
$result = $conn -> query($sql);
// The following is Pseudo Code
if(id != NULL) {
if(name==’admin’) {
return All employees information;
} else if (name !=NULL){
return employee information;
}
} else {
Authentication Fails;
}
我尝试了很多类似的事情:
SELECT * FROM credential WHERE name= 'admin';
SELECT * FROM credential WHERE name= 'admin' and Password= 'xyz';
然后将此语句放在用户名框中,并将xyz
放在密码框中。
我不确定我是否正确地解决了这个问题。 SQL语句应该在用户名框中正确吗?密码框是否为空?我的教授在课堂上没有讲这个。有人可以澄清一下如何完成吗?我在网上看到了示例,它们看起来都与上述相似。但是,我每次都会收到相同的错误:
`There was an error running the query [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'admin' and password= "xyz"; and Password= da39a3ee5e6b40d3255bfe95601890afd80 at line 3]\n`
谢谢大家!
答案 0 :(得分:2)
我不同意这个问题是要教人们如何黑客。它的目的是教后端开发人员清理输入,以避免sql注入或其他类型的攻击。</ p>
要回答您的问题,您可以将密码字段保留为空,而仅使用用户名。
您可以在服务器代码上看到对输入没有任何控制,因为按原样输入并放在sql语句中。因此,为了使sql语句执行您想要的操作,该字段可以具有以下值:
admin'; --
连字符是sql注释,可让您禁用select语句的最后部分而不必提供密码。和报价和;将关闭该语句。结果,您将以admin登录;-)
答案 1 :(得分:0)
原来这是对我有用的东西:
Admin’ or ‘1=1
我不确定为什么这也行得通,但确实可以:
Admin’ or ‘