如果我只知道用户名,如何使用SQL语句从网站获取数据?

时间:2019-02-28 23:26:28

标签: mysql sql sql-injection

我是MYSQL的新手,我有一个学校任务,内容如下:The SQL Injection Task

这是显示用户身份验证方式的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`

谢谢大家!

2 个答案:

答案 0 :(得分:2)

我不同意这个问题是要教人们如何黑客。它的目的是教后端开发人员清理输入,以避免sql注入或其他类型的攻击。<​​/ p>

要回答您的问题,您可以将密码字段保留为空,而仅使用用户名。

您可以在服务器代码上看到对输入没有任何控制,因为按原样输入并放在sql语句中。因此,为了使sql语句执行您想要的操作,该字段可以具有以下值:

admin'; --

连字符是sql注释,可让您禁用select语句的最后部分而不必提供密码。和报价和;将关闭该语句。结果,您将以admin登录;-)

答案 1 :(得分:0)

原来这是对我有用的东西:

Admin’ or ‘1=1

我不确定为什么这也行得通,但确实可以:

Admin’ or ‘