2015-09-05 37 views
0

下面是一本教科书sql注入例如:什么sql注入可以做伤害你

SELECT id FROM table WHERE username = '$username' AND password = '$password' 

如果您的网站并不能防止SQL注入,你可以很简单的密码发送= anything' OR 'x'='x作为输入和登录没有密码。简单。

攻击者也可以通过'; DROP TABLE table;从db中删除表。当然,如果sql连接具有DROP权限,则它不起作用。另外,攻击者可能希望通过除了简单删除表之外的其他方法来获得更多的好处。

所以问题是攻击者是否可以在桌面上执行UPDATE的攻击,通过攻击这个漏洞获得所有表,列表或db的结构?

P.S:不,我想用它来攻击人,但我有点好奇可以在我的数据库在最坏的情况发生..

+0

相关:[mysql注入损害?](http://stackoverflow.com/q/15731983/53114) – Gumbo

回答

1

潜在的,肯定的。如果您可以将DROP TABLE table;注入到执行的SQL语句中,您可以轻松地注入一条UPDATE语句,该语句可以修改任何表中所需的任何行的行。您也可以经常添加或修改SELECT语句来告诉你的信息,你感兴趣的问题。例如,如果你有一个像

select name 
    from people 
where person_id = '$person' 

查询,你可以注入像

anything` union all select table_name from information_schema.tables 

到产生如下陈述

select name 
    from people 
where person_id = 'anything' 
union all 
select table_name 
    from information_schema.tables 

向您展示所有表格。您可以执行相同的操作来获取表中的列列表,然后开始运行查询以查看各种表中的数据。

+0

明白了。但在大多数情况下,它不会将查询结果返回给您。像查询可能只是登录的一个中间步骤,因此您在注入成功时记录。还有DROP表就像你知道网站停止工作,那么你知道注入工作。那么他们是否仍然可以这样查询整个数据库信息? –

+0

@ Shih-MinLee - 我不确定我是否理解这个问题。大多数页面至少运行一个向用户显示信息的查询。如果您可以注入任何这些页面,则可以切实地从应用程序有权访问的数据库中获取任何信息。这可能比如果您只需登录到数据库并编写任意查询更麻烦一些。但是你可以得到表和列的列表,然后开始运行查询来提取你想要的任何信息。 –

+0

对于许多用例来说,查询是朝向后续页面的一个中间步骤。以登录为例,该过程是查询匹配=>登录您并在找到配置文件时重定向您当凭据不正确时,服务器将为您提供401或500状态。在这两种情况下,你都不会看到中间查询结果..? –